PageSourceSearch

https://www.eia.gov/energyexplained/includes/bundles/main.js

js eia.gov collected 2026-09-24 06:03:25 UTC 2,699,634 bytes, 57,425 lines download raw bytes

1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2module.exports={"type":"Topology","objects":{"default":{"type":"GeometryCollection","geometries":[{"type":"MultiPolygon","arcs":[[[9]],[[10]],[[11,12,13,14,15,16,17,18]]],"id":"US.MA","properties":{"hc-group":"admin1","hc-key":"us-ma","hc-a2":"MA","labelrank":"0","hasc":"US.MA","woe-id":"2347580","state-fips":"25","fips":"US25","postal-code":"MA","name":"Massachusetts","country":"United States of America","region":"Northeast","longitude":"-71.99930000000001","woe-name":"Massachusetts","latitude":"42.3739","woe-label":"Massachusetts, US, United States","type":"State","hc-middle-lon":-67.878,"hc-middle-lat":38.8}},{"type":"MultiPolygon","arcs":[[[19]],[[20,21,22]]],"id":"US.WA","properties":{"hc-group":"admin1","hc-key":"us-wa","hc-a2":"WA","labelrank":"0","hasc":"US.WA","woe-id":"2347606","state-fips":"53","fips":"US53","postal-code":"WA","name":"Washington","country":"United States of America","region":"West","longitude":"-120.361","woe-name":"Washington","latitude":"47.4865","woe-label":"Washington, US, United States","type":"State","hc-middle-lon":-120.01,"hc-middle-lat":47.403}},{"type":"Polygon","arcs":[[23,24,25,26]],"id":"US.CA","properties":{"hc-group":"admin1","hc-key":"us-ca","hc-a2":"CA","labelrank":"0","hasc":"US.CA","woe-id":"2347563","state-fips":"6","fips":"US06","postal-code":"CA","name":"California","country":"United States of America","region":"West","longitude":"-119.591","woe-name":"California","latitude":"36.7496","woe-label":"California, US, United States","type":"State","hc-middle-lon":-118.415,"hc-middle-lat":35.686}},{"type":"Polygon","arcs":[[-24,27,-22,28,29]],"id":"US.OR","properties":{"hc-group":"admin1","hc-key":"us-or","hc-a2":"OR","labelrank":"0","hasc":"US.OR","woe-id":"2347596","state-fips":"41","fips":"US41","postal-code":"OR","name":"Oregon","country":"United States of America","region":"West","longitude":"-120.386","woe-name":"Oregon","latitude":"43.8333","woe-label":"Oregon, US, United States","type":"State","hc-middle-lon":-120.81,"hc-middle-lat":43.957}},{"type":"MultiPolygon","arcs":[[[30]],[[31,32,33,34,35,36,37,38]]],"id":"US.WI","properties":{"hc-group":"admin1","hc-key":"us-wi","hc-a2":"WI","labelrank":"0","hasc":"US.WI","woe-id":"2347608","state-fips":"55","fips":"US55","postal-code":"WI","name":"Wisconsin","country":"United States of America","region":"Midwest","longitude":"-89.5831","woe-name":"Wisconsin","latitude":"44.3709","woe-label":"Wisconsin, US, United States","type":"State","hc-middle-lon":-90.479,"hc-middle-lat":45.253}},{"type":"MultiPolygon","arcs":[[[39]],[[40,41]]],"id":"US.ME","properties":{"hc-group":"admin1","hc-key":"us-me","hc-a2":"ME","labelrank":"0","hasc":"US.ME","woe-id":"2347578","state-fips":"23","fips":"US23","postal-code":"ME","name":"Maine","country":"United States of America","region":"Northeast","longitude":"-69.1973","woe-name":"Maine","latitude":"45.148","woe-label":"Maine, US, United States","type":"State","hc-middle-lon":-69.074,"hc-middle-lat":45.611}},{"type":"MultiPolygon","arcs":[[[42]],[[43]],[[44,45,46]],[[-36,47]]],"id":"US.MI","properties":{"hc-group":"admin1","hc-key":"us-mi","hc-a2":"MI","labelrank":"0","hasc":"US.MI","woe-id":"2347581","state-fips":"26","fips":"US26","postal-code":"MI","name":"Michigan","country":"United States of America","region":"Midwest","longitude":"-84.9479","woe-name":"Michigan","latitude":"43.4343","woe-label":"Michigan, US, United States","type":"State","hc-middle-lon":-84.717,"hc-middle-lat":43.677}},{"type":"Polygon","arcs":[[-30,48,49,50,-25]],"id":"US.NV","properties":{"hc-group":"admin1","hc-key":"us-nv","hc-a2":"NV","labelrank":"0","hasc":"US.NV","woe-id":"2347587","state-fips":"32","fips":"US32","postal-code":"NV","name":"Nevada","country":"United States of America","region":"West","longitude":"-117.02","woe-name":"Nevada","latitude":"39.4299","woe-label":"Nevada, US, United States","type":"State","hc-middle-lon":-117.046,"hc-middle-lat":39.518}},{"type":"Polygon","arcs":[[51,52,53,54,55]],"id":"US.NM","properties":{"hc-group":"admin1","hc-key":"us-nm","hc-a2":"NM","labelrank":"0","hasc":"US.NM","woe-id":"2347590","state-fips":"35","fips":"US35","postal-code":"NM","name":"New Mexico","country":"United States of America","region":"West","longitude":"-106.024","woe-name":"New Mexico","latitude":"34.5002","woe-label":"New Mexico, US, United States","type":"State","hc-middle-lon":-106.098,"hc-middle-lat":34.421}},{"type":"Polygon","arcs":[[-52,56,57,58,59,60]],"id":"US.CO","properties":{"hc-group":"admin1","hc-key":"us-co","hc-a2":"CO","labelrank":"0","hasc":"US.CO","woe-id":"2347564","state-fips":"8","fips":"US08","postal-code":"CO","name":"Colorado","country":"United States of America","region":"West","longitude":"-105.543","woe-name":"Colorado","latitude":"38.9998","woe-label":"Colorado, US, United States","type":"State","hc-middle-lon":-105.57,"hc-middle-lat":39.042}},{"type":"Polygon","arcs":[[-58,61,62,63,64,65]],"id":"US.WY","properties":{"hc-group":"admin1","hc-key":"us-wy","hc-a2":"WY","labelrank":"0","hasc":"US.WY","woe-id":"2347609","state-fips":"56","fips":"US56","postal-code":"WY","name":"Wyoming","country":"United States of America","region":"West","longitude":"-107.552","woe-name":"Wyoming","latitude":"42.9999","woe-label":"Wyoming, US, United States","type":"State","hc-middle-lon":-107.579,"hc-middle-lat":43.039}},{"type":"Polygon","arcs":[[66,67,68,-60]],"id":"US.KS","properties":{"hc-group":"admin1","hc-key":"us-ks","hc-a2":"KS","labelrank":"0","hasc":"US.KS","woe-id":"2347575","state-fips":"20","fips":"US20","postal-code":"KS","name":"Kansas","country":"United States of America","region":"Midwest","longitude":"-98.3309","woe-name":"Kansas","latitude":"38.5","woe-label":"Kansas, US, United States","type":"State","hc-middle-lon":-99.894,"hc-middle-lat":38.549}},{"type":"Polygon","arcs":[[-67,-59,-66,69,70,71,72]],"id":"US.NE","properties":{"hc-group":"admin1","hc-key":"us-ne","hc-a2":"NE","labelrank":"0","hasc":"US.NE","woe-id":"2347586","state-fips":"31","fips":"US31","postal-code":"NE","name":"Nebraska","country":"United States of America","region":"Midwest","longitude":"-99.68550000000001","woe-name":"Nebraska","latitude":"41.5002","woe-label":"Nebraska, US, United States","type":"State","hc-middle-lon":-100.323,"hc-middle-lat":41.555}},{"type":"Polygon","arcs":[[-69,73,74,75,-53,-61]],"id":"US.OK","properties":{"hc-group":"admin1","hc-key":"us-ok","hc-a2":"OK","labelrank":"0","hasc":"US.OK","woe-id":"2347595","state-fips":"40","fips":"US40","postal-code":"OK","name":"Oklahoma","country":"United States of America","region":"South","longitude":"-97.1309","woe-name":"Oklahoma","latitude":"35.452","woe-label":"Oklahoma, US, United States","type":"State","hc-middle-lon":-96.299,"hc-middle-lat":35.365}},{"type":"Polygon","arcs":[[-74,-68,-73,76,77,78,79,80,81,82]],"id":"US.MO","properties":{"hc-group":"admin1","hc-key":"us-mo","hc-a2":"MO","labelrank":"0","hasc":"US.MO","woe-id":"2347584","state-fips":"29","fips":"US29","postal-code":"MO","name":"Missouri","country":"United States of America","region":"Midwest","longitude":"-92.446","woe-name":"Missouri","latitude":"38.5487","woe-label":"Missouri, US, United States","type":"State","hc-middle-lon":-92.521,"hc-middle-lat":38.313}},{"type":"Polygon","arcs":[[83,84,85,-78,86,-39,87]],"id":"US.IL","properties":{"hc-group":"admin1","hc-key":"us-il","hc-a2":"IL","labelrank":"0","hasc":"US.IL","woe-id":"2347572","state-fips":"17","fips":"US17","postal-code":"IL","name":"Illinois","country":"United States of America","region":"Midwest","longitude":"-89.1991","woe-name":"Illinois","latitude":"39.946","woe-label":"Illinois, US, United States","type":"State","hc-middle-lon":-89.191,"hc-middle-lat":40.062}},{"type":"Polygon","arcs":[[88,-46,89,90,-85]],"id":"US.IN","properties":{"hc-group":"admin1","hc-key":"us-in","hc-a2":"IN","labelrank":"0","hasc":"US.IN","woe-id":"2347573","state-fips":"18","fips":"US18","postal-code":"IN","name":"Indiana","country":"United States of America","region":"Midwest","longitude":"-86.1396","woe-name":"Indiana","latitude":"39.8874","woe-label":"Indiana, US, United States","type":"State","hc-middle-lon":-86.242,"hc-middle-lat":40.071}},{"type":"MultiPolygon","arcs":[[[91]],[[92,93,94,-16]]],"id":"US.VT","properties":{"hc-group":"admin1","hc-key":"us-vt","hc-a2":"VT","labelrank":"0","hasc":"US.VT","woe-id":"2347604","state-fips":"50","fips":"US50","postal-code":"
2VT","name":"Vermont","country":"United States of America","region":"Northeast","longitude":"-72.7317","woe-name":"Vermont","latitude":"44.0886","woe-label":"Vermont, US, United States","type":"State","hc-middle-lon":-66.109,"hc-middle-lat":42.883}},{"type":"Polygon","arcs":[[95,-75,-83,96,97,98]],"id":"US.AR","properties":{"hc-group":"admin1","hc-key":"us-ar","hc-a2":"AR","labelrank":"0","hasc":"US.AR","woe-id":"2347562","state-fips":"5","fips":"US05","postal-code":"AR","name":"Arkansas","country":"United States of America","region":"South","longitude":"-92.14279999999999","woe-name":"Arkansas","latitude":"34.7563","woe-label":"Arkansas, US, United States","type":"State","hc-middle-lon":-92.364,"hc-middle-lat":35.031}},{"type":"MultiPolygon","arcs":[[[-96,99,100,-54,-76]],[[101]]],"id":"US.TX","properties":{"hc-group":"admin1","hc-key":"us-tx","hc-a2":"TX","labelrank":"0","hasc":"US.TX","woe-id":"2347602","state-fips":"48","fips":"US48","postal-code":"TX","name":"Texas","country":"United States of America","region":"South","longitude":"-98.7607","woe-name":"Texas","latitude":"31.131","woe-label":"Texas, US, United States","type":"State","hc-middle-lon":-97.541,"hc-middle-lat":31.032}},{"type":"MultiPolygon","arcs":[[[102]],[[103,-19]],[[-13,104,105]]],"id":"US.RI","properties":{"hc-group":"admin1","hc-key":"us-ri","hc-a2":"RI","labelrank":"0","hasc":"US.RI","woe-id":"2347598","state-fips":"44","fips":"US44","postal-code":"RI","name":"Rhode Island","country":"United States of America","region":"Northeast","longitude":"-71.5082","woe-name":"Rhode Island","latitude":"41.6242","woe-label":"Rhode Island, US, United States","type":"State","hc-middle-lon":-68.726,"hc-middle-lat":36.713}},{"type":"Polygon","arcs":[[106,107,108,109,110]],"id":"US.AL","properties":{"hc-group":"admin1","hc-key":"us-al","hc-a2":"AL","labelrank":"0","hasc":"US.AL","woe-id":"2347559","state-fips":"1","fips":"US01","postal-code":"AL","name":"Alabama","country":"United States of America","region":"South","longitude":"-86.7184","woe-name":"Alabama","latitude":"32.8551","woe-label":"Alabama, US, United States","type":"State","hc-middle-lon":-86.668,"hc-middle-lat":32.985}},{"type":"Polygon","arcs":[[111,112,-98,113,-108]],"id":"US.MS","properties":{"hc-group":"admin1","hc-key":"us-ms","hc-a2":"MS","labelrank":"0","hasc":"US.MS","woe-id":"2347583","state-fips":"28","fips":"US28","postal-code":"MS","name":"Mississippi","country":"United States of America","region":"South","longitude":"-89.71890000000001","woe-name":"Mississippi","latitude":"32.8657","woe-label":"Mississippi, US, United States","type":"State","hc-middle-lon":-89.833,"hc-middle-lat":32.749}},{"type":"MultiPolygon","arcs":[[[114,115,116,117]],[[118,119]],[[120,121,122,123,124]]],"id":"US.NC","properties":{"hc-group":"admin1","hc-key":"us-nc","hc-a2":"NC","labelrank":"0","hasc":"US.NC","woe-id":"2347592","state-fips":"37","fips":"US37","postal-code":"NC","name":"North Carolina","country":"United States of America","region":"South","longitude":"-78.866","woe-name":"North Carolina","latitude":"35.6152","woe-label":"North Carolina, US, United States","type":"State","hc-middle-lon":-78.867,"hc-middle-lat":35.491}},{"type":"MultiPolygon","arcs":[[[125,-116,126,-121,127,128,129,130,131,132,133,-120],[134]],[[135,-118]],[[136,137]],[[138,139]]],"id":"US.VA","properties":{"hc-group":"admin1","hc-key":"us-va","hc-a2":"VA","labelrank":"0","hasc":"US.VA","woe-id":"2347605","state-fips":"51","fips":"US51","postal-code":"
2VA","name":"Virginia","country":"United States of America","region":"South","longitude":"-78.2431","woe-name":"Virginia","latitude":"37.7403","woe-label":"Virginia, US, United States","type":"State","hc-middle-lon":-78.329,"hc-middle-lat":37.526}},{"type":"Polygon","arcs":[[-87,-77,140,-71,141,142,-33,143]],"id":"US.IA","properties":{"hc-group":"admin1","hc-key":"us-ia","hc-a2":"IA","labelrank":"0","hasc":"US.IA","woe-id":"2347574","state-fips":"19","fips":"US19","postal-code":"IA","name":"Iowa","country":"United States of America","region":"Midwest","longitude":"-93.3891","woe-name":"Iowa","latitude":"42.0423","woe-label":"Iowa, US, United States","type":"State","hc-middle-lon":-94.374,"hc-middle-lat":42.051}},{"type":"MultiPolygon","arcs":[[[144]],[[145,-138]],[[146,147]],[[-139,148,149,-131,150,151,152,153]]],"id":"US.MD","properties":{"hc-group":"admin1","hc-key":"us-md","hc-a2":"MD","labelrank":"0","hasc":"US.MD","woe-id":"2347579","state-fips":"24","fips":"US24","postal-code":"MD","name":"Maryland","country":"United States of America","region":"South","longitude":"-77.0454","woe-name":"Maryland","latitude":"39.3874","woe-label":"Maryland, US, United States","type":"State","hc-middle-lon":-71.572,"hc-middle-lat":28.505}},{"type":"MultiPolygon","arcs":[[[154]],[[155,-153,156,157,-148]]],"id":"US.DE","properties":{"hc-group":"admin1","hc-key":"us-de","hc-a2":"DE","labelrank":"0","hasc":"US.DE","woe-id":"2347566","state-fips":"10","fips":"US10","postal-code":"DE","name":"Delaware","country":"United States of America","region":"South","longitude":"-75.41119999999999","woe-name":"Delaware","latitude":"38.8657","woe-label":"Delaware, US, United States","type":"State","hc-middle-lon":-70.858,"hc-middle-lat":30.54}},{"type":"Polygon","arcs":[[158,-157,-152,159,160,161,162,163]],"id":"US.PA","properties":{"hc-group":"admin1","hc-key":"us-pa","hc-a2":"PA","labelrank":"0","hasc":"US.PA","woe-id":"2347597","state-fips":"42","fips":"US42","postal-code":"PA","name":"Pennsylvania","country":"United States of America","region":"Northeast","longitude":"-77.60939999999999","woe-name":"Pennsylvania","latitude":"40.8601","woe-label":"Pennsylvania, US, United States","type":"State","hc-middle-lon":-77.652,"hc-middle-lat":40.87}},{"type":"MultiPolygon","arcs":[[[164]],[[165,166,167,-164]]],"id":"US.NJ","properties":{"hc-group":"admin1","hc-key":"us-nj","hc-a2":"NJ","labelrank":"0","hasc":"US.NJ","woe-id":"2347589","state-fips":"34","fips":"US34","postal-code":"NJ","name":"New Jersey","country":"United States of America","region":"Northeast","longitude":"-74.4653","woe-name":"New Jersey","latitude":"40.0449","woe-label":"New Jersey, US, United States","type":"State","hc-middle-lon":-70.197,"hc-middle-lat":32.63}},{"type":"Polygon","arcs":[[-163,168,-93,-15,169,170,-167,171]],"id":"US.NY","properties":{"hc-group":"admin1","hc-key":"us-ny","hc-a2":"NY","labelrank":"0","hasc":"US.NY","woe-id":"2347591","state-fips":"36","fips":"US36","postal-code":"NY","name":"New York","country":"United States of America","region":"Northeast","longitude":"-75.32420000000001","woe-name":"New York","latitude":"43.1988","woe-label":"New York, US, United States","type":"State","hc-middle-lon":-75.04,"hc-middle-lat":43.02}},{"type":"Polygon","arcs":[[172,173,-63,174,-49,-29,-21]],"id":"US.ID","properties":{"hc-group":"admin1","hc-key":"us-id","hc-a2":"ID","labelrank":"0","hasc":"US.ID","woe-id":"2347571","state-fips":"16","fips":"US16","postal-code":"ID","name":"Idaho","country":"United States of America","region":"West","longitude":"-114.133","woe-name":"Idaho","latitude":"43.7825","woe-label":"Idaho, US, United States","type":"State","hc-middle-lon":-114.097,"hc-middle-lat":43.549}},{"type":"Polygon","arcs":[[-65,175,176,177,-142,-70]],"id":"US.SD","properties":{"hc-group":"admin1","hc-key":"us-sd","hc-a2":"SD","labelrank":"0","hasc":"US.SD","woe-id":"2347600","state-fips":"46","fips":"US46","postal-code":"SD","name":"South Dakota","country":"United States of America","region":"Midwest","longitude":"-100.255","woe-name":"South Dakota","latitude":"44.4711","woe-label":"South Dakota, US, United States","type":"State","hc-middle-lon":-100.262,"hc-middle-lat":44.506}},{"type":"MultiPolygon","arcs":[[[178]],[[179,-170,-14,-106]]],"id":"US.CT","properties":{"hc-group":"admin1","hc-key":"us-ct","hc-a2":"CT","labelrank":"0","hasc":"US.CT","woe-id":"2347565","state-fips":"9","fips":"US09","postal-code":"CT","name":"Connecticut","country":"United States of America","region":"Northeast","longitude":"-72.7594","woe-name":"Connecticut","latitude":"41.6486","woe-label":"Connecticut, US, United States","type":"State","hc-middle-lon":-69.47,"hc-middle-lat":34.644}},{"type":"MultiPolygon","arcs":[[[180]],[[181,-17,-95,182,-42]]],"id":"US.NH","properties":{"hc-group":"admin1","hc-key":"us-nh","hc-a2":"NH","labelrank":"0","hasc":"US.NH","woe-id":"2347588","state-fips":"33","fips":"US33","postal-code":"NH","name":"New Hampshire","country":"United States of America","region":"Northeast","longitude":"-71.6301","woe-name":"New Hampshire","latitude":"43.5993","woe-label":"New Hampshire, US, United States","type":"State","hc-middle-lon":-67.043,"hc-middle-lat":40.842}},{"type":"MultiPolygon","arcs":[[[-81,183]],[[-79,-86,-91,184,185,-129,186]],[[187,187,187]]],"id":"US.KY","properties":{"hc-group":"admin1","hc-key":"us-ky","hc-a2":"KY","labelrank":"0","hasc":"US.KY","woe-id":"2347576","state-fips":"21","fips":"US21","postal-code":"KY","name":"Kentucky","country":"United States of America","region":"South","longitude":"-85.5729","woe-name":"Kentucky","latitude":"37.3994","woe-label":"Kentucky, US, United States","type":"State","hc-middle-lon":-84.594,"hc-middle-lat":37.611}},{"type":"Polygon","arcs":[[-45,188,-161,189,-185,-90]],"id":"US.OH","properties":{"hc-group":"admin1","hc-key":"us-oh","hc-a2":"OH","labelrank":"0","hasc":"US.OH","woe-id":"2347594","state-fips":"39","fips":"US39","postal-code":"OH","name":"Ohio","country":"United States of America","region":"Midwest","longitude":"-82.67189999999999","woe-name":"Ohio","latitude":"40.0924","woe-label":"Ohio, US, United States","type":"State","hc-middle-lon":-83.048,"hc-middle-lat":40.263}},{"type":"Polygon","arcs":[[-114,-97,-82,-184,-80,-187,-128,-125,190,-109]],"id":"US.TN","properties":{"hc-group":"admin1","hc-key":"us-tn","hc-a2":"TN","labelrank":"0","hasc":"US.TN","woe-id":"2347601","state-fips":"47","fips":"US47","postal-code":"TN","name":"Tennessee","country":"United States of America","region":"South","longitude":"-86.3415","woe-name":"Tennessee","latitude":"35.7514","woe-label":"Tennessee, US, United States","type":"State","hc-middle-lon":-86.623,"hc-middle-lat":35.846}},{"type":"Polygon","arcs":[[-190,-160,-151,-130,-186]],"id":"US.WV","properties":{"hc-group":"admin1","hc-key":"us-wv","hc-a2":"WV","labelrank":"0","hasc":"US.WV","woe-id":"2347607","state-fips":"54","fips":"US54","postal-code":"WV","name":"West Virginia","country":"United States of America","region":"South","longitude":"-80.7128","woe-name":"West Virginia","latitude":"38.6422","woe-label":"West Virginia, US, United States","type":"State","hc-middle-lon":-80.919,"hc-middle-lat":38.701}},{"type":"MultiPolygon","arcs":[[[191]],[[192,-132,-150]]],"id":"US.DC","properties":{"hc-group":"admin1","hc-key":"us-dc","hc-a2":"DC","labelrank":"9","hasc":"US.DC","woe-id":"2347567","state-fips":"11","fips":"US11","postal-code":"DC","name":"District of Columbia","country":"United States of America","region":"South","longitude":"-77.01130000000001","woe-name":"District of Columbia","latitude":"38.8922","woe-label":"District of Columbia, US, United States","type":"Federal District","hc-middle-lon":-72.145,"hc-middle-lat":26.435}},{"type":"Polygon","arcs":[[193,-100,-99,-113]],"id":"US.LA","properties":{"hc-group":"admin1","hc-key":"us-la","hc-a2":"LA","labelrank":"0","hasc":"US.LA","woe-id":"2347577","state-fips":"22","fips":"US22","postal-code":"LA","name":"Louisiana","country":"United States of America","region":"South","longitude":"-91.9991","woe-name":"Louisiana","latitude":"30.5274","woe-label":"Louisiana, US, United States","type":"State","hc-middle-lon":-92.307,"hc-middle-lat":31.273}},{"type":"Polygon","arcs":[[-111,194,195]],"id":"US.FL","properties":{"hc-group":"admin1","hc-key":"us-fl","hc-a2":"FL","labelrank":"0","hasc":"US.FL","woe-id":"2347568","state-fips":"12","fips":"US12","postal-code":"FL","
2name":"Florida","country":"United States of America","region":"South","longitude":"-81.6228","woe-name":"Florida","latitude":"28.1568","woe-label":"Florida, US, United States","type":"State","hc-middle-lon":-81.631,"hc-middle-lat":27.933}},{"type":"Polygon","arcs":[[-110,-191,-124,196,197,-195]],"id":"US.GA","properties":{"hc-group":"admin1","hc-key":"us-ga","hc-a2":"GA","labelrank":"0","hasc":"US.GA","woe-id":"2347569","state-fips":"13","fips":"US13","postal-code":"GA","name":"Georgia","country":"United States of America","region":"South","longitude":"-83.4078","woe-name":"Georgia","latitude":"32.8547","woe-label":"Georgia, US, United States","type":"State","hc-middle-lon":-83.674,"hc-middle-lat":32.715}},{"type":"Polygon","arcs":[[198,-197,-123]],"id":"US.SC","properties":{"hc-group":"admin1","hc-key":"us-sc","hc-a2":"SC","labelrank":"0","hasc":"US.SC","woe-id":"2347599","state-fips":"45","fips":"US45","postal-code":"SC","name":"South Carolina","country":"United States of America","region":"South","longitude":"-80.6471","woe-name":"South Carolina","latitude":"33.8578","woe-label":"South Carolina, US, United States","type":"State","hc-middle-lon":-80.813,"hc-middle-lat":34.034}},{"type":"Polygon","arcs":[[199,-34,-143,-178,200]],"id":"US.MN","properties":{"hc-group":"admin1","hc-key":"us-mn","hc-a2":"MN","labelrank":"0","hasc":"US.MN","woe-id":"2347582","state-fips":"27","fips":"US27","postal-code":"MN","name":"Minnesota","country":"United States of America","region":"Midwest","longitude":"-93.364","woe-name":"Minnesota","latitude":"46.0592","woe-label":"Minnesota, US, United States","type":"State","hc-middle-lon":-94.386,"hc-middle-lat":45.85}},{"type":"Polygon","arcs":[[201,202,-176,-64,-174]],"id":"US.MT","properties":{"hc-group":"admin1","hc-key":"us-mt","hc-a2":"MT","labelrank":"0","hasc":"US.MT","woe-id":"2347585","state-fips":"30","fips":"US30","postal-code":"MT","name":"Montana","country":"United States of America","region":"West","longitude":"-110.044","woe-name":"Montana","latitude":"46.9965","woe-label":"Montana, US, United States","type":"State","hc-middle-lon":-109.139,"hc-middle-lat":47.053}},{"type":"Polygon","arcs":[[-203,203,-201,-177]],"id":"US.ND","properties":{"hc-group":"admin1","hc-key":"us-nd","hc-a2":"ND","labelrank":"0","hasc":"US.ND","woe-id":"2347593","state-fips":"38","fips":"US38","postal-code":"ND","name":"North Dakota","country":"United States of America","region":"Midwest","longitude":"-100.302","woe-name":"North Dakota","latitude":"47.4675","woe-label":"North Dakota, US, United States","type":"State","hc-middle-lon":-100.635,"hc-middle-lat":47.51}},{"type":"Polygon","arcs":[[204,-26,-51,205,-56]],"id":"US.AZ","properties":{"hc-group":"admin1","hc-key":"us-az","hc-a2":"AZ","labelrank":"0","hasc":"US.AZ","woe-id":"2347561","state-fips":"4","fips":"US04","postal-code":"AZ","name":"Arizona","country":"United States of America","region":"West","longitude":"-111.935","woe-name":"Arizona","latitude":"34.3046","woe-label":"Arizona, US, United States","type":"State","hc-middle-lon":-111.881,"hc-middle-lat":34.446}},{"type":"Polygon","arcs":[[-206,-50,-175,-62,-57]],"id":"US.UT","properties":{"hc-group":"admin1","hc-key":"us-ut","hc-a2":"UT","labelrank":"0","hasc":"US.UT","woe-id":"2347603","state-fips":"49","fips":"US49","postal-code":"UT","name":"Utah","country":"United States of America","region":"West","longitude":"-111.544","woe-name":"Utah","latitude":"39.5007","woe-label":"Utah, US, United States","type":"State","hc-middle-lon":-111.491,"hc-middle-lat":39.012}},{"type":"MultiPolygon","arcs":[[[206]],[[207]],[[208]],[[209]],[[210]],[[211]],[[212]],[[213]]],"id":"US.HI","properties":{"hc-group":"admin1","hc-key":"us-hi","hc-a2":"HI","labelrank":"0","hasc":"US.HI","woe-id":"2347570","state-fips":"15","fips":"US15","postal-code":"HI","name":"Hawaii","country":"United States of America","region":"West","longitude":"-157.999","woe-name":"Hawaii","latitude":"21.4919","woe-label":"Hawaii, US, United States","type":"State","hc-middle-lon":-155.52,"hc-middle-lat":19.605,"hc-inset":"us-all-hawaii"}},{"type":"MultiPolygon","arcs":[[[214],[215]],[[216]],[[217]],[[218]],[[219]],[[220]],[[221]],[[222]],[[223]
2],[[224]],[[225]],[[226]],[[227]],[[228]],[[229]],[[230]],[[231]],[[232]],[[233]],[[234]],[[235]],[[236]],[[237]],[[238]],[[239]],[[240]],[[241]],[[242]],[[243]],[[244]],[[245]],[[246]],[[247]],[[248]],[[249]],[[250]],[[251]],[[252]],[[253]],[[254]],[[255]],[[256]],[[257]],[[258]],[[259]]],"id":"US.AK","properties":{"hc-group":"admin1","hc-key":"us-ak","hc-a2":"AK","labelrank":"0","hasc":"US.AK","woe-id":"2347560","state-fips":"2","fips":"US02","postal-code":"AK","name":"Alaska","country":"United States of America","region":"West","longitude":"-151.604","woe-name":"Alaska","latitude":"65.3609","woe-label":"Alaska, US, United States","type":"State","hc-middle-lon":-150.208,"hc-middle-lat":65.023,"hc-inset":"us-all-alaska"}},{"type":"LineString","arcs":[0],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[1],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[2],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[3],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[4],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[5],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[6],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[7],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[8],"properties":{"hc-group":"__separator_lines__"}}],"hc-recommended-transform":{"default":{"crs":"+proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs","scale":0.000151481324748,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-2361356.09818,"yoffset":1398996.77886},"us-all-hawaii":{"xpan":190,"ypan":417,"crs":"+proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs","scale":0.000123090941806,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-338610.47557,"yoffset":1022754.31736,"geometry":{"type":"Polygon","coordinates":[[[-108.02234811026737,28.131995556971578],[-99.6925136210582,25.09851533842571],[-99.13103120627295,10.80433106513135],[-105.76273688266124,10.337841364791041],[-108.02234811026737,28.131995556971578]]]}},"us-all-alaska":{"rotation":-0.0174532925199,"xpan":5,"ypan":357,"crs":"+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs","scale":0.0000584397059179,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-1566154.00853,"yoffset":1992671.14918,"geometry":{"type":"Polygon","coordinates":[[[-120.85794661131852,30.762825284322425],[-119.60838899484447,31.05714930388009],[-108.02234811026737,28.131995556971578],[-105.76273688266124,10.337841364791041],[-115.12985129390901,8.8460581322757],[
2-120.85794661131852,30.762825284322425]]]}}},"hc-recommended-mapview":{"projection":{"name":"LambertConformalConic","parallels":[33,45],"rotation":[96]},"padding":[0,0,"8%",0],"insets":[{"id":"us-alaska","borderPath":{"type":"MultiLineString","coordinates":[[[0,60],[25,80],[25,100]]]},"field":{"type":"Polygon","coordinates":[[[0,60],[25,80],[25,100],[0,100]]]},"geoBounds":{"type":"Polygon","coordinates":[[[-179.5,50],[-129,50],[-129,72],[-179.5,72]]]},"padding":["30%","5%",0,0],"projection":{"name":"LambertConformalConic","parallels":[55,65],"rotation":[154]}},{"id":"us-hawaii","borderPath":{"type":"LineString","coordinates":[[[25,80],[40,92]]]},"field":{"type":"Polygon","coordinates":[[[25,80],[40,92],[40,100],[25,100]]]},"geoBounds":{"type":"Polygon","coordinates":[[[-162,23],[-152,23],[-152,18],[-162,18]]]},"padding":["30%","20%",0,"10%"],"projection":{"name":"LambertConformalConic","parallels":[8,18],"rotation":[157]}}]}}},"arcs":[[[9171,4808],[387,-132]],[[9292,4621],[82,-287],[105,-50]],[[9327,4389],[-16,-454],[95,-44]],[[9266,4321],[-29,-778],[100,-46]],[[9163,4298],[-15,-1140],[123,-56]],[[8986,3941],[78,-1168],[145,-66]],[[8922,3783],[62,-1396],[166,-75]],[[8884,3693],[25,-1692],[186,-82]],[[8764,3812],[73,-2196],[205,-89]],[[9445,4073],[377,-198],[-77,-366],[-367,192],[67,372]],[[9345,4303],[19,-17],[-20,-2],[-11,-11],[12,30]],[[9296,4344],[0,9],[-4,-2]],[[9292,4351],[-10,17],[-4,41],[-38,0]],[[9240,4409],[-87,3],[-66,5]],[[9087,4417],[-3,4],[23,127]],[[9107,4548],[32,0],[41,-2]],[[9180,4546],[106,-6],[13,21],[31,13]],[[9330,4574],[4,-31],[16,-16],[-26,-18],[-14,-44],[13,2],[16,-21],[17,-75],[23,-19],[24,14],[-3,48],[10,-35],[0,-35],[-22,-3],[-46,-24],[2,36],[-22,-16],[-2,-17],[-18,-7]],[[9302,4313],[-1,29],[-5,2]],[[4574,5694],[15,-16],[-16,-15],[10,-30],[-31,16],[11,9],[11,36]],[[5110,5740],[0,-498],[12,-37],[3,-35]],[[5125,5170],[-194,-1],[-9,-10],[-45,-4],[-58,-36],[-36,-1],[-26,-17],[-24,-2],[-9,15],[-48,2],[-43,-29],[-43,18],[-6,60],[-10,25],[-25,14]],[[4549,5204],[-18,-5],[-9,23],[-19,6],[-17,-13],[-17,23],[0,56],[6,-38],[9,18],[0,38],[-18,-1],[-3,28],[29,14],[-33,15],[-14,61],[-9,73],[-20,32],[-9,50],[15,38],[48,-37],[73,-12],[9,12],[14,-27],[21,20],[13,-48],[-12,-42],[21,45],[-6,-59],[21,-41],[-33,-8],[-5,-32],[-4,40],[-19,-50],[35,1],[10,37],[19,14],[-7,35],[0,39],[18,39],[-21,48],[4,14],[-18,14],[-12,-28],[12,-5],[23,-49],[-20,7],[-6,33],[-12,17],[15,26],[-5,3],[-7,27],[21,-18],[5,25],[-5,30],[-14,5],[-15,32],[6,12],[521,-1]],[[4455,4406],[385,0]],[[4840,4406],[0,-573],[171,-249],[134,-210],[185,-303]],[[5330,3071],[24,-102],[22,-36],[-23,-29],[-13,-36],[3,-40],[-13,-56],[-8,-4],[2,-62],[20,-19],[-6,-48],[-16,-5]],[[5322,2634],[-220,-34],[-1,30],[-11,2],[-6,78],[-17,43],[-61,82],[-21,-5],[2,19],[-14,38],[-24,-7],[-37,29],[-6,20],[-31,31],[-24,-3],[-24,13],[-30,-4],[-16,26],[0,105],[-23,22],[6,16],[-31,57],[-11,6],[-40,102],[-16,19],[-7,52],[15,21],[2,24],[-13,32],[-20,0],[-23,41],[1,32],[-11,33],[0,48],[10,5],[4,-41],[29,-27],[-11,40],[-15,23],[-3,43],[21,6],[-24,21],[-10,-7],[-2,-57],[-35,41],[-20,80],[-55,89],[4,21],[-13,61],[5,38],[-7,55],[-24,52],[-23,30],[-4,34],[27,114],[5,76],[-9,57],[-10,8],[5,42]],[[4455,4406],[-13,22],[-7,41],[2,64],[-13,35],[10,35],[6,59],[13,39],[8,64],[9,144],[-1,36],[15,140],[-8,40],[4,41],[-5,42],[35,-3],[12,13],[9,-21],[18,7]],[[5125,5170],[11,-32],[21,-16],[6,-32],[-17,-45],[-17,-82],[-34,-83],[1,-35],[27,-22],[-11,-76],[0,-341]],[[5112,4406],[-272,0]],[[7856,5044],[-8,-43],[-22,-56],[-10,19],[15,48],[25,32]],[[7520,4504],[-6,27]],[[7514,4531],[-31,17],[-11,79],[8,23],[-15,43]],[[7465,4693],[-4,79],[-12,20],[-22,10],[-40,69],[-27,28],[-17,5],[-22,28],[6,33],[1,71],[7,28],[-20,24],[1,27],[16,38],[37,32],[0,111],[17,20]],[[7386,5316],[29,-12],[55,30],[21,17],[20,-5],[-5,-28],[12,-26],[23,-10]],[[7541,5282],[17,-15],[10,-33],[91,-36],[26,-22],[59,-14],[11,-33],[24,-19],[-5,-63],[19,-2],[-7,-32],[12,-15]],[[7798,4998],[-21,-29],[-19,-72],[10,-3],[28,55],[16,8],[11,-16],[-21,-94],[5,-17],[-20,-56],[1,-42],[-18,-84],[0,-47],[11,-40],[-2,-61]],[[7779,4500],[-161,2],[-83,1]],[[7535,4503],[-15,1]],[[9548,4851],[14,21],[8,-16],[-19,-35],[-3,30]],[[9306,5037],[16,-12],[20,63],[25,30],[14,43],[-5,22],[11,55],[11,11],[6,55],[67,140],[18,-1],[4,-35],[12,-12],[64,30],[36,-59],[1,-260],[32,-13],[-3,-62],[11,-22],[17,3],[23,-65],[-25,-37],[-13,12],[-7,-21],[-42,-11],[-3,-27],[-14,-14],[-5,29],[-29,2],[-19,-37],[3,-47],[-18,61],[6,32],[-23,-22],[-8,-70],[-17,-24],[-10,9],[-13,-27],[-17,-2],[-12,-24],[-11,29],[-26,-29],[3,-26],[-34,-55],[
2-15,-36]],[[9337,4613],[-21,57],[1,34],[-11,333]],[[8166,5184],[1,-28],[-22,3],[8,31],[13,-6]],[[7715,5584],[-17,-31],[-40,-34],[0,25],[57,40]],[[8176,4355],[-77,-4],[-46,-2]],[[8053,4349],[0,11],[-186,1]],[[7867,4361],[22,34],[20,60],[15,87],[0,48],[-30,127],[10,30],[-8,57],[23,55],[0,60],[15,11],[3,33],[21,6],[18,45],[7,-23],[-8,-40],[8,-14],[13,28],[3,57],[20,28],[17,2],[-8,47],[28,32],[25,-22],[-8,25],[21,-5],[-9,-23],[21,-5],[12,-26],[53,-28],[11,-15],[7,-40],[-13,-13],[16,-57],[-7,-71],[-16,-12],[-6,-39],[-24,-14],[-4,-59],[21,-14],[17,19],[23,54],[29,15],[21,-28],[15,-123],[10,-50],[-9,-70],[-27,1],[-7,-48],[-22,-25],[-12,-65],[-18,-38]],[[7541,5282],[36,20],[21,26],[36,7],[24,26],[15,3],[30,42],[4,-11],[15,36],[34,22],[30,-10],[-47,-47],[-16,-37],[0,25],[-14,4],[12,-31],[-2,-36],[21,28],[40,-7],[15,-14],[26,-60],[34,5],[8,-16],[27,1],[40,43],[57,-1],[30,18],[23,1],[-10,-48],[20,-14],[17,9],[7,-16],[14,17],[28,3],[-3,-55],[23,-43],[-12,-9],[-46,5],[-11,12],[-8,-38],[-26,32],[-29,17],[-18,-3],[-11,-21],[-54,-6],[-11,-28],[-31,-26],[13,42],[-19,-5],[-20,-28],[-1,36],[-54,-154]],[[5112,4406],[187,1],[85,-1]],[[5384,4406],[0,-536],[0,-417]],[[5384,3453],[-1,-149],[-7,-34],[-39,22],[-15,-13],[5,-42],[-1,-68],[9,-62],[-5,-36]],[[5840,3452],[552,0]],[[6392,3452],[0,-71],[0,-24]],[[6392,3357],[-4,-4],[-2,-854],[-328,-1],[14,-44]],[[6072,2454],[-157,2],[1,-86],[-76,0]],[[5840,2370],[0,542],[0,540]],[[5840,3452],[0,644],[0,120]],[[5840,4216],[455,-1]],[[6295,4215],[184,0],[-1,-190]],[[6478,4025],[1,-125],[0,-448]],[[6479,3452],[-87,0]],[[5840,4216],[-183,-1],[0,191]],[[5657,4406],[0,149],[0,328]],[[5657,4883],[0,95],[638,0]],[[6295,4978],[1,-309],[-1,-72]],[[6295,4597],[1,-72],[-1,-310]],[[6478,4025],[615,0]],[[7093,4025],[40,-35],[-20,-55],[18,-28],[7,-32],[19,-18],[0,-405]],[[7157,3452],[-678,0]],[[6295,4597],[509,0],[37,-37],[22,12],[49,4],[16,-19],[38,-21],[21,-31]],[[6987,4505],[8,-4],[4,-55],[18,-42],[8,-37],[-2,-46],[14,-16],[6,-31],[3,-98]],[[7046,4176],[6,-33],[0,-4]],[[7052,4139],[13,-49],[28,-65]],[[7157,3452],[0,-24],[0,-71]],[[7157,3357],[16,-213],[-4,-331]],[[7169,2813],[-35,20],[
2-32,40],[-12,-18],[-23,16],[-15,-18],[-15,7],[-36,-37],[-29,41],[-19,-8],[-6,15],[-14,-18],[-4,-25],[-9,35],[-14,-16],[-29,30],[-25,-17],[-12,46],[-36,-12],[-43,26],[-22,4],[-6,34],[-38,-2],[-29,33],[-1,367],[-273,1]],[[7052,4139],[118,-5],[126,1],[125,8],[26,-46]],[[7447,4097],[-7,-39],[6,-59],[9,-30],[28,-49],[21,-25],[10,-62],[11,-23],[14,17],[28,-25],[-23,-102],[24,-54],[18,-12],[34,-48],[9,-49],[-7,-34],[13,-34],[24,-20]],[[7659,3449],[-2,-47],[-10,-32],[-10,14],[-6,-27]],[[7631,3357],[-5,-9],[-1,9]],[[7625,3357],[-7,10],[1,-10]],[[7619,3357],[2,-22],[-15,-27],[8,-20],[-10,-27]],[[7604,3261],[-60,-2],[28,58],[-8,40],[-407,0]],[[7779,4500],[-1,-40],[27,-105]],[[7805,4355],[-1,-452],[-12,-47],[11,-28],[3,-40],[-13,-46],[-10,-11],[-16,-57],[-8,-12],[-2,-56]],[[7757,3606],[-11,-32],[4,-31],[-31,-13],[-2,-64],[-38,28],[-13,-2],[-12,-28],[5,-15]],[[7447,4097],[5,42],[18,10],[20,56],[2,25],[-12,22],[8,46],[26,3],[33,30],[13,40],[3,58],[-21,24],[-22,51]],[[7535,4503],[115,-1],[129,-2]],[[7805,4355],[21,-20],[41,26]],[[8053,4349],[0,-77],[-2,-420]],[[8051,3852],[-5,-33],[6,-25],[-34,-19],[-24,6],[2,-35],[-18,-20],[-3,-24],[-14,-4],[-9,-43],[-13,-18],[-21,33],[-22,-23],[-1,-17],[-19,-5],[-7,17],[-31,-28],[-24,19],[-16,-17],[-26,14],[-15,-24]],[[9602,4855],[397,-208],[-86,-363],[-387,203],[76,368]],[[9107,4548],[1,154],[-16,9],[5,29],[-6,58],[10,35],[3,45],[-7,20],[2,81]],[[9099,4979],[59,1],[109,1]],[[9267,4981],[-12,-52],[8,-27],[-11,-29],[-34,-31],[-1,-27],[-14,-68],[-17,-48],[-1,-45],[-13,-80],[8,-28]],[[7210,2691],[-1,103],[-25,1],[-15,18]],[[7604,3261],[0,-31],[-20,-19],[2,-36],[-17,-30],[0,-50],[-18,-24]],[[7551,3071],[3,-15],[-18,-18],[-11,-36],[0,-41],[-34,-51],[5,-23],[-17,-8],[4,-34],[-16,-25],[9,-39],[-5,-31],[7,-32],[-6,-26]],[[7472,2692],[-17,0],[-245,-1]],[[7210,2691],[-1,-193],[21,-55],[-1,-24],[29,-103],[-6,-43],[-14,-48],[1,-93],[-7,-18]],[[7232,2114],[-12,-40],[5,-19],[-17,1],[-54,-44],[8,23],[-17,-9],[4,43],[-25,-15],[-4,-25],[27,-40],[-20,-21],[5,29],[-25,-62],[-40,-54],[-32,-15],[-5,-17],[-36,-39],[-1,-12],[-26,-28],[-29,-56],[13,46],[-13,15],[-18,-26],[17,-6],[-16,-42],[-17,2],[12,-29],[-14,-66],[-7,13],[-21,-26],[26,2],[-11,-51],[22,-169],[16,-30],[-26,-22],[-35,40],[-38,3],[-13,22],[-25,10],[-15,24],[-26,7],[-7,60],[-27,64],[-6,48],[2,50],[-18,17],[-34,95],[-19,26],[-11,57],[-20,63],[-4,37],[-32,52],[6,17],[-18,7],[-24,50],[-64,5],[-19,18],[-8,-23],[-25,-6],[-20,-89],[3,-9],[-26,-47],[-14,3],[-45,53],[-24,12],[-19,35],[-24,27],[-14,53],[0,47],[-30,93],[-32,33],[-58,104],[-15,10],[-18,51],[-13,10]],[[6923,1669],[-18,-85],[0,-53],[11,-88],[-13,69],[3,98],[17,59]],[[9374,3679],[367,-192],[-72,-368],[-359,187],[64,373]],[[9302,4313],[-7,-2],[1,33]],[[9292,4351],[0,-43],[-18,-3],[-6,-20],[-32,-10]],[[9236,4275],[5,40],[-1,94]],[[7814,2209],[-21,-44],[-60,-3],[18,7],[-7,18],[-20,4]],[[7724,2191],[-7,286],[36,573],[-8,20]],[[7745,3070],[-1,3],[236,-5]],[[7980,3068],[37,-390],[11,-62],[16,-65],[-13,-27],[-9,-60],[9,-55],[-6,-50],[10,-51]],[[8035,2308],[-236,-1],[-4,-24],[21,-43],[-2,-31]],[[7724,2191],[-41,4],[-43,-21],[-18,-21]],[[7622,2153],[-29,94],[10,61],[-176,-1],[8,11],[-7,41],[10,2],[1,42],[9,14],[9,54],[22,30],[16,62],[-16,21],[-6,61],[8,29],[-9,18]],[[7551,3071],[154,-1],[40,0]],[[8865,3366],[1,-10],[-11,10]],[[8855,3366],[5,0]],[[8860,3366],[0,-1],[2,1]],[[8862,3366],[1,0],[2,0]],[[8870,3366],[6,-51],[28,-108],[-22,66],[-14,93]],[[8868,3366],[1,1],[1,-1]],[[8340,3378],[40,-8],[103,-6],[371,2]],[[8854,3366],[23,-89],[-38,42],[13,-25],[-43,-30],[-15,8],[-4,-21],[62,7],[2,-63],[4,45],[12,17],[12,-28],[-5,-49],[-10,12],[-16,-48],[-19,-7],[-27,29],[-3,-20],[-36,19],[45,-35],[-16,-27],[11,-9],[-26,-25],[-22,32],[13,-34],[16,-13],[21,4],[7,27],[11,-34],[-27,-39],[-46,-2],[-48,-58],[-15,-32],[-13,-69],[-26,15],[-29,-8]],[[8622,2858],[-99,174],[-102,5],[-2,26],[-25,37],[-111,10],[-76,-39]],[[8207,3071],[-34,-1],[-76,-2]],[[8097,3068],[5,51],[16,1],[7,32],[22,25],[25,3],[39,42],[15,29],[26,21],[4,-16],[35,36],[10,-12],[15,37],[16,18],[8,43]],[[8868,3366],[-8,31],[0,-31]],[[8855,3366],[-2,8],[1,-8]],[[8340,3378],[-26,-3],[-157,2]],[[8157,3377],[48,28],[23,27],[23,52],[26,21],[35,50]],[[8312,3555],[13,-48],[25,-14],[19,23],[11,-17],[25,10],[9,25],[11,-9],[40,24],[1,34],[45,113],[14,60],[31,-32],[28,80],[10,-11],[27,39],[15,34],[9,54],[44,-59],[9,36]],[[8698,3897],[25,-17],[-4,-17],[36,-42]],[[8755,3821],[2,-5],[3,-1]],[[8760,3815],[1,-36],[-16,-11],[-11,-47],[9,-15],[19,13],[14,-42],[25,-5],[7,-24],[26,-23],[-6,-54],[-16,7],[-13,30],[-27,31],[37,-69],[26,-32],[-19,-15],[-4,-21]],[[8812,3502],[8,-5],[10,-42],[-12,-8],[-21,50],[-33,11],[27,-27],[22,-46],[19,10],[26,-9],[12,-70]],[[8812,3502],[-2,1],[-24,52],[15,-47],[9,-5],[1,-4],[1,3]],[[8862,3366],[3,5],[0,-5]],[[8926,3647],[-8,-25],[6,25]],[[8924,3647],[2,0]],[[8889,3637],[2,5],[23,4]],[[8914,3646],[-11,-35],[-36,-91],[6,-30],[
2-11,-21],[-6,43],[7,50],[26,75]],[[7052,4139],[-6,37]],[[6987,4505],[-14,45],[16,70],[-10,20],[-2,52],[12,1]],[[6989,4693],[327,0],[149,0]],[[7514,4531],[7,-23],[-1,-4]],[[9125,2100],[333,-170],[-59,-366],[-325,165],[51,371]],[[8924,3647],[6,16],[-4,-16]],[[8944,3730],[-3,-22],[2,21]],[[8943,3729],[1,1]],[[8889,3637],[-19,-7],[7,43],[-24,29],[-1,-13],[-24,44],[28,18],[-9,23],[-18,15],[18,22],[-13,13],[-2,39],[22,46],[9,40],[-25,-45],[-11,8],[-5,-31],[-17,3],[14,-33],[-11,-38],[2,-69],[8,-39],[-19,29],[29,-64],[-1,-19],[-22,30],[-25,11],[-18,43],[-15,-22],[-6,24],[22,41],[1,19]],[[8764,3797],[10,16],[-19,8]],[[8698,3897],[-10,53],[-26,18],[-27,-15],[-4,-17],[-19,2],[-9,17],[-17,-35],[-9,6],[-39,-52],[1,97]],[[8539,3971],[159,0],[178,0]],[[8876,3971],[9,-240],[55,-1]],[[8940,3730],[-6,-41],[-8,-3],[-12,-40]],[[9182,2494],[341,-175],[-62,-367],[-333,170],[54,372]],[[8943,3729],[-3,2],[0,-1]],[[8876,3971],[17,23],[16,-6]],[[8909,3988],[-16,-37],[1,-29],[15,-28],[3,-49],[21,-51],[7,1],[4,-65]],[[8946,4028],[-11,-22],[-26,-18]],[[8539,3971],[-95,1],[0,176]],[[8444,4148],[0,255]],[[8444,4403],[13,8],[56,46]],[[8513,4457],[0,-51],[404,0],[24,-33],[1,-40],[34,-50]],[[8976,4283],[-41,-71],[8,-17],[-12,-26],[0,-35],[9,-3],[33,-75],[-27,-28]],[[9243,2889],[349,-181],[-65,-368],[-341,176],[57,373]],[[8976,4283],[36,-35]],[[9012,4248],[36,-34]],[[9048,4214],[-11,-53],[-17,-15],[-6,-26],[26,-18],[2,-15],[-12,-114],[-21,-32],[-7,-39],[-22,-30],[-20,-49],[-9,-2],[7,41],[-23,7],[-36,56],[-2,27],[11,30],[27,19],[11,27]],[[8513,4457],[56,60],[26,51],[-18,49],[1,33],[33,16],[53,6],[33,-9],[19,-17],[16,8],[35,-3],[25,11],[27,37],[21,10],[-3,52],[11,28],[-17,-6],[-7,30],[19,31],[27,16],[15,39],[38,53],[37,29],[16,-3],[123,1]],[[9087,4417],[-6,-145],[5,-15],[-21,-22],[7,-19]],[[9072,4216],[-12,-32],[27,21],[23,-7],[12,11],[45,5],[24,28],[14,-25],[5,16],[1,-14],[24,10],[-50,-40],[-29,-10],[-29,-26],[-49,-19],[-37,-1],[-24,-13],[5,24],[12,-2],[13,31],[-8,-4],[9,45]],[[9012,4248],[-27,26],[-9,9]],[[5110,5
2740],[90,1]],[[5200,5741],[0,-189],[31,-58],[0,-51],[34,-31],[39,-68],[1,-14],[31,-38],[19,7],[1,-28],[-10,-50],[-1,-52],[7,-19],[-14,-22],[0,-40],[19,-17],[34,40],[16,-21],[7,-53],[25,-58],[-4,-13],[14,-27],[13,2],[13,-29],[5,-36],[13,-16],[15,24],[29,-7],[12,19],[39,-7],[28,9],[4,27],[13,3],[24,-45]],[[5657,4406],[-120,0],[-153,0]],[[6295,4978],[2,1],[0,179]],[[6297,5158],[577,0],[106,1]],[[6980,5159],[-7,-35],[-21,-31],[16,-37],[22,-21],[-1,-342]],[[9307,3284],[357,-186],[-68,-368],[-350,181],[61,373]],[[9236,4275],[-5,6],[-55,-16],[-35,-3],[-27,-13],[-42,-33]],[[9521,4465],[387,-203],[-81,-365],[-377,197],[71,371]],[[9337,4613],[3,-4],[-10,-35]],[[9267,4981],[16,53],[23,3]],[[7625,3357],[-6,0]],[[8051,3852],[35,1],[11,-14],[12,-42],[30,-8],[14,-24],[16,13],[21,-20],[38,27],[5,-30],[22,-32]],[[8255,3723],[-4,-50],[31,-89],[30,-29]],[[8157,3377],[-6,-4],[-127,7],[-28,-1],[-103,8],[-117,-3],[-21,9],[3,-36],[-127,0]],[[8255,3723],[0,0]],[[8176,4355],[52,-37],[-7,-9],[42,-18],[42,22],[34,2],[30,39],[75,49]],[[8444,4148],[-14,-11],[6,-58],[-24,-98],[0,-27],[-32,-44],[-23,0],[-19,-25],[-13,-37],[6,-26],[-13,-12],[-14,25],[-14,-42],[3,-33],[-14,-32],[-24,-5]],[[8097,3068],[-50,0],[-67,0]],[[9071,1707],[325,-164],[-56,-364],[-318,159],[49,369]],[[8764,3797],[0,9],[-4,9]],[[7622,2153],[-41,14],[-22,23],[-20,-46],[9,-15],[27,-5],[15,22],[22,-2],[-16,-38],[17,-12],[15,37],[12,-30],[-36,-53],[16,-44],[32,-11],[15,-26],[-11,-32],[-21,8],[-10,27],[-30,16],[6,15],[-30,22],[2,-56],[-15,-25],[-6,29],[-19,14],[-13,-32],[-22,-2],[-41,31],[6,38],[-25,8],[-13,42],[-16,-7],[1,22],[-26,-19],[2,-22],[17,6],[19,-13],[-11,-19],[-27,20],[-13,-10],[-37,13],[-47,33],[-24,-1],[-34,-13],[3,54]],[[8035,2308],[12,-54],[240,-29],[5,-39],[12,2],[1,69],[12,16],[38,-20]],[[8355,2253],[5,-2],[4,-77],[15,-108],[28,-127],[37,-114],[-6,-13],[5,-73],[16,-61],[26,-139],[2,-79],[-8,-126],[-19,-77],[-1,-64],[-20,-40],[12,43],[-6,14],[-18,-20],[-13,8],[-22,-12],[-8,20],[3,32],[-12,59],[-31,46],[-11,-3],[-10,92],[-23,2],[4,85],[-15,19],[6,-31],[-15,8],[-31,111],[24,70],[-2,23],[-17,-7],[-3,-34],[-18,20],[4,68],[11,55],[3,81],[-15,57],[-21,0],[-17,45],[-17,23],[-25,75],[-32,35],[-33,-14],[3,-25],[-14,3],[-7,-23],[-35,-35],[-35,12],[5,23],[-10,26],[-24,36],[-36,35],[-41,19],[-93,-24],[17,29],[-7,10]],[[8207,3071],[-22,-56],[29,-41],[17,-6],[11,-53],[15,-41],[30,-42],[4,-22],[24,-30],[1,-22],[15,-39],[22,-22],[10,-79],[19,-27],[11,-76],[17,-11]],[[8410,2504],[6,-6],[-46,-87],[6,-51],[-17,-16],[3,-51],[-7,-40]],[[8622,2858],[-33,-47],[-18,-42],[-5,-45],[-17,-30],[-13,3],[-7,-24],[-37,-57],[-31,-25],[-31,5],[22,-20],[-42,-72]],[[6919,5741],[187,-1],[1,72],[31,-14],[11,-93],[10,-15],[33,-15],[33,-2],[11,-23],[24,5],[21,16],[26,-2],[30,-15],[24,-58],[7,14],[24,5],[32,-45],[24,-12],[47,37],[12,-24],[55,2],[19,-20],[31,-2],[-41,-36],[-41,-19],[-44,-42],[-45,-71],[-55,-67]],[[6980,5159],[-4,73],[-18,60],[4,53],[-7,16],[-2,92],[-25,131],[-3,69],[5,22],[-11,66]],[[5200,5741],[320,-1],[776,0]],[[6296,5740],[0,-545],[1,-37]],[[6296,5740],[168,0],[455,1]],[[5840,2370],[-179,0],[-46,28],[-303,195],[10,41]],[[5384,3453],[299,0],[157,-1]],[[1589,235],[2,-3],[2,1],[3,0],[10,-7],[8,-8],[15,-19],[5,-10],[2,-7],[0,-17],[0,-8],[3,0],[4,3],[2,-3],[1,-4],[0,-9],[1,-5],[2,-4],[4,-9],[5,-4],[2,-3],[1,-4],[0,-6],[-5,-12],[-4,-3],[-6,-11],[-4,-3],[0,-2],[-3,-1],[-3,-5],[-10,-5],[-4,2],[-2,0],[-2,-2],[-5,-6],[-2,-4],[-3,-2],[-4,-5],[-4,-5],[-2,-1],[-4,-7],[0,-3],[0,-7],[-5,-10],[-1,-8],[-2,-3],[-3,-6],[-1,1],[0,4],[-2,3],[-4,4],[-6,8],[-6,3],[-1,7],[-1,1],[-1,5],[-1,8],[1,10],[2,28],[0,4],[-1,5],[-3,19],[-2,6],[0,4],[-1,4],[-1,10],[-2,5],[-1,2],[-2,4],[-3,12],[2,10],[5,8],[1,4],[1,2],[4,3],[2,8],[3,7],[2,5],[1,0],[1,9],[-1,3],[-1,3],[-3,10],[-2,8],[0,13],[2,7],[1,2],[3,0],[9,-4],[2,-9],[4,-3],[2,-2],[2,-4],[2,-2]],[[1504,310],[-1,-3],[-2,0],[-3,0],[-4,-1],[-3,-1],[-2,4],[1,3],[2,3],[5,6],[3,2],[2,0],[2,-5],[-1,-6],[1,-2]],[[1470,349],[-5,-1],[-2,6],[0,4],[0,8],[-1,4],[-1,2],[-4,3],[-1,4],[1,4],[2,2],[4,1],[8,-3],[4,-7],[3,-7],[2,-5],[-1,-4],[-2,-6],[-4,-3],[-3,-2]],[[1499,405],[1,-2],[3,-3],[1,-2],[1,-1],[0,-5],[1,-2],[3,-9],[2,0],[1,3],[1,0],[5,1],[3,4],[2,1],[3,0],[5,-2],[1,-2],[1,-2],[2,-5],[3,-4],[0,-2],[2,1],[1,-2],[1,-4],[3,-1],[3,-3],[5,-3],[2,-8],[-1,-7],[-1,-6],[-3,-2],[-1,-5],[-3,0],[-5,-5],[-5,0],[-2,0],[-9,-8],[-4,2],[-1,-1],[-4,0],[-3,4],[-1,5],[0,1],[1,4],[-1,12],[-1,4],[0,4],[0,3],[-2,3],[-3,-2],[-1,-2],[-1,-1],[-2,4],[-2,0],[-2,3],[-2,0],[-3,7],[-3,7],[0,4],[-1,2],[1,10],[1,4],[1,3],[1,0],[2,5],[2,-1],[1,2],[1,-1]],[[1439,442],[4,-1],[1,0],[0,-2],[2,0],[13,-4],[4,-1],[1,6],[1,0],[1,-3],[0,-4],[5,-2],[5,0],[2,1],[2,1],[2,0],[3,-1],[1,-2],[2,-1],[-1,-6],[-3,-5],[-3,-4],[-4,-3],[-3,-1],[-4,0],[-4,2],[-7,3],[-4,3],[-10,-1],[-4,-1],[-4,0],[-2,2],[-1,2],[0,4],[2,5],[1,1],[2,4],[0,4],[-1,4],[1,0]],[[1380,514],[1,-4],[1,-1],[0,-3],[2,0],[1,-5],[0,-4],[-1,-1],[1,-9],[2,-1],[1,-5],[2,-1],[1,-2],[1,4],[-1,2],[0,2],[1,1],[4,-1],[-2,-3],[0,-6],[2,-2],[1,-4],[0,-2],[1,-5],[4,-5],[1,-1],[-5,-8],[-1,-1],[0,3],[-1,1],[-4,-1],[-3,-4],[-2,1],[-1,3],[-5,4],[-1,5],[0,2],[-2,-3],[1,-2],[-4,-1],[1,2],[-2,1],[-1,6],[3,3],[1,1],[-3,4],[-1,-4],[-2,4],[1,-5],[-1,-1],[-3,5],[1,-4],[4,-6],[-1,-3],[-2,-1],[-8,-3],[-2,2],[-1,6],[-1,5],[-2,6],[-2,1],[0,6],[-1,2],[-2,4],[-1,4],[-1,9],[0,2],[-4,6],[4,2],[4,0],[6,0],[1,4],[2,2],[2,4],[0,1],[2,6],[3,5],[3,2],[2,-1],[2,-5],[2,-6],[0,-4],[2,-5]],[[1170,549],[-2,-1],[-2,3],[-1,7],[0,4],[1,4],[4,7],[3,5],[3,4],[1,5],[0,3],[2,2],[2,0],[1,-2],[1,-3],[-2,-5],[-1,-4],[1,-5],[-1,-3],[-3,-3],[-2,-1],[-3,-5],[-1,-3],[-1,-9]],[[1244,634],[1,-1],[1,0],[2,-2],[1,-3],[2,-2],[1,-7],[0,-1],[0,-7],[-1,-3],[-1,-7],[-1,-1],[-1,-6],[1,-7],[0,-5],[-3,-1],[1,-3],[-1,-1],[-2,-2],[-1,-3],[-3,-5],[-1,-2],[-4,3],[-4,0],[-5,2],[-1,2],[-1,-2],[-1,1],[-2,3],[-1,5],[-1,0],[-2,3],[-1,0],[-3,2],[-3,2],[-1,5],[-2,3],[0,9],[1,1],[4,8],[0,5],[2,3],[4,3],[3,3],[1,3],[2,1],[1,2],[4,2],[1,-2],[3,-2],[0,3],[2,1],[4,0],[2,-1],[2,2],[1,-1]],[[1186,9864],[-6,8],[38,31],[62,-6],[86,12],[75,43],[38,47],[109,-24],[1,-23],[-42,-18],[14,-29],[30,5],[34,53],[55,-24],[-2,-31],[47,-9],[19,22],[55,4],[100,-21],[-39,-48],[82,-1],[-22,-21],[73,-1],[117,14],[80,-5],[59,-34],[20,8],[32,-22],[63,-14],[112,3],[55,-35],[63,-2],[50,19],[69,7],[63,-21],[31,-31],[42,-6],[36,-33],[36,2],[2,-1781],[90,-25],[34,27],[49,2],[-8,-52],[45,-35],[9,-26],[89,-98],[18,-62],[53,46],[22,0],[24,84],[79,39],[41,-49],[-6,-24],[63,-70],[16,-40],[32,-20],[45,-62],[104,-232],[19,
2-32],[-6,-31],[21,-14],[6,-39],[20,2],[134,-94],[8,-38],[-13,-30],[17,-87],[-34,-73],[-29,-26],[-22,6],[-12,76],[17,27],[-3,71],[-28,50],[-49,-17],[-21,-74],[-27,49],[19,9],[16,79],[-55,74],[-4,29],[-63,80],[-30,1],[19,44],[-25,31],[-7,41],[-34,53],[4,66],[-20,-39],[-11,8],[9,-11],[-33,10],[-4,14],[22,-7],[-32,22],[-54,167],[-1,-65],[30,-110],[-8,-26],[-30,31],[-42,-1],[7,30],[-23,65],[-10,-24],[-75,62],[2,-35],[38,-7],[47,-64],[-2,-35],[-45,4],[-9,-24],[-90,77],[-55,84],[-84,46],[-60,43],[36,34],[-15,33],[-65,-36],[-99,32],[15,28],[-43,-10],[-98,27],[-103,-21],[-29,30],[-63,29],[17,70],[-25,-29],[-8,-40],[-41,27],[-35,1],[30,43],[-59,-5],[-40,17],[18,14],[-22,27],[-48,-12],[-39,11],[-40,-18],[-2,49],[-24,-93],[18,28],[24,-53],[-23,-34],[-20,-68],[-70,9],[-41,-23],[-9,-43],[-15,10],[-45,-53],[16,51],[-42,-75],[-25,-16],[-41,6],[-37,-18],[-16,28],[48,31],[44,57],[-44,-27],[-38,30],[38,75],[18,67],[-14,34],[32,14],[56,46],[38,-22],[19,11],[65,-16],[-87,52],[8,16],[-42,1],[-8,24],[-57,-60],[-38,-13],[-71,-99],[10,-15],[-34,-32],[5,-22],[-46,-78],[-59,-13],[-2,-33],[-37,-16],[-4,-65],[43,7],[38,-45],[-72,-66],[8,-21],[-33,-25],[-20,-44],[-43,-1],[-32,-56],[-20,14],[-12,-47],[-25,6],[-48,-53],[18,3],[-18,-64],[-23,10],[-35,-50],[-21,18],[-4,-43],[-28,8],[-69,-65],[29,-12],[-43,-59],[-75,-38],[-31,16],[-77,-75],[-22,10],[-33,-31],[-21,6],[11,37],[-21,6],[-32,-91],[-31,-28],[-25,61],[-19,-70],[-23,30],[-26,-54],[0,54],[71,70],[66,80],[87,22],[8,-21],[50,-10],[-31,29],[19,54],[57,59],[73,50],[28,-14],[-3,49],[33,55],[58,49],[16,170],[40,50],[-3,32],[-97,-52],[-37,39],[9,48],[-41,-57],[13,-48],[-26,-19],[-49,93],[-29,-27],[-29,15],[-12,42],[-43,-41],[-42,-13],[-6,-25],[-76,-2],[43,21],[-8,50],[-23,49],[32,43],[-56,116],[-8,53],[-10,-74],[-101,-37],[-44,6],[-1,33],[-50,55],[-30,9],[-40,41],[70,51],[64,-8],[29,-35],[20,32],[-48,19],[-57,-2],[-51,14],[17,17],[-38,38],[0,-28],[-50,63],[13,23],[-39,15],[37,16],[-28,27],[45,4],[-10,52],[53,76],[23,4],[0,57],[26,57],[41,25],[35,-9],[38,-37],[23,5],[45,43],[29,44],[11,-14],[90,13],[36,47],[-17,95],[-42,35],[58,41],[-35,55],[-23,-31],[-60,-9],[-47,-41],[-48,-18],[-37,29],[-79,1],[-59,-23],[-104,26],[-27,27],[8,33],[-51,48],[38,-3],[37,29],[-116,22],[-61,36],[18,30],[54,30],[21,-5],[28,36],[124,69],[79,28],[71,5],[-16,-76],[22,-25],[137,1],[25,-19],[30,53],[52,-5],[-46,34],[-40,-15],[7,28],[-69,80],[27,11],[30,-36],[-7,-19],[44,-42],[36,17],[39,-31],[47,6],[4,24],[-61,26],[-55,-25],[-35,32],[3,67],[-55,-12],[-113,20],[-12,45],[-31,54],[-118,85],[-46,15],[-55,41],[27,40],[0,59],[52,-3],[122,12],[66,38],[46,52],[-5,50],[16,37],[40,50],[18,-10],[43,53],[15,-16],[79,17],[63,51],[14,-1]],[[1186,9864],[5,-5],[-13,-50],[28,35],[-15,15],[1,4],[-6,1]],[[58,6370],[-24,-7],[18,28],[13,-11],[-7,-10]],[[278,6477],[22,5],[-2,-20],[-10,9],[-10,6]],[[416,6502],[-12,8],[-41,-33],[39,81],[16,-6],[4,41],[35,20],[14,-34],[-40,-29],[-15,-48]],[[674,6724],[-24,-22],[-22,16],[14,20],[32,-14]],[[932,6772],[-3,20],[21,-10],[9,-14],[-27,4]],[[845,6899],[17,-2],[18,-55],[-23,-29],[-46,1],[-25,-34],[-41,-2],[-10,31],[23,16],[14,39],[30,3],[43,32]],[[1237,6898],[3,-7],[-21,8],[10,14],[8,-15]],[[3675,6858],[-8,-29],[-33,76],[8,29],[17,-58],[16,-18]],[[3813,6900],[-8,-41],[-27,31],[9,50],[26,-40]],[[1195,6928],[2,-22],[-32,-33],[23,36],[7,19]],[[1157,6963],[-20,-10],[1,-42],[-25,-2],[-3,42],[47,12]],[[3761,6966],[16,-23],[-10,-28],[-10,42],[4,9]],[[3598,6980],[3,-4],[16,6],[-20,-49],[1,47]],[[3625,7042],[-17,-20],[-15,10],[3,13],[29,-3]],[[3816,7067],[23,-47],[-1,-60],[-20,-38],[-57,53],[15,16],[-2,56],[42,20]],[[3576,7058],[14,32],[36,15],[0,-25],[-50,-22]],[[3701,7114],[35,-16],[-20,-36],[-37,37],[17,45],[5,-30]],[[3686,7161],[-1,-30],[-38,12],[13,21],[26,-3]],[[3730,7145],[20,-30],[-12,-15],[-27,30],[1,42],[18,-27]],[[1693,7193],[-1,-16],[-23,-23],[3,25],[21,14]],[[1732,7183],[6,-9],[-33,2],[4,16],[23,-9]],[[3663,7230],[32,-38],[-23,-19],[-14,3],[5,54]],[[1811,7301],[20,0],[-36,-33],[-5,15],[21,18]],[[3418,7314],[-5,-45],[-20,-3],[12,35],[13,13]],[[3349,7461],[-12,-31],[-9,32],[7,16],[14,-17]],[[1808,7478],[28,-20],[-12,0],[-36,13],[20,7]],[[1846,7514],[13,37
2],[25,-25],[23,9],[14,-30],[-13,-17],[-63,-31],[-34,23],[6,32],[29,2]],[[1874,7551],[-17,13],[27,17],[1,-17],[-11,-13]],[[1112,7583],[-23,-20],[1,29],[34,22],[-12,-31]],[[2295,7855],[-3,-15],[-23,-10],[17,41],[9,-16]],[[2364,7909],[17,-9],[-50,-71],[-40,-27],[19,39],[46,46],[8,22]],[[630,7916],[38,-17],[-3,-45],[16,-26],[-54,-20],[-44,5],[-51,32],[-23,32],[52,4],[7,16],[62,19]],[[2416,7931],[37,-6],[-42,-38],[9,23],[-4,21]],[[2311,7937],[8,-12],[-12,-35],[-11,22],[15,25]],[[43,7916],[-2,-13],[-40,30],[-1,18],[43,-35]],[[2458,7933],[-18,-5],[-1,12],[49,13],[-30,-20]],[[622,6689],[-35,-49],[45,25],[-17,-28],[-108,-71],[-35,-2],[62,32],[13,93],[38,5],[-1,-30],[22,33],[16,-8]],[[3633,6938],[23,70],[-37,-1],[14,49],[-7,53],[-25,4],[-5,31],[41,-3],[10,-53],[29,-11],[59,-137],[13,-94],[-18,-17],[-32,78],[-34,-13],[7,45],[-38,-1]],[[3415,7338],[20,35],[43,-42],[28,-114],[-5,-106],[-47,96],[6,30],[-23,-1],[19,39],[-19,10],[3,30],[-25,23]],[[1841,7449],[-8,-34],[40,37],[12,-32],[-6,-35],[26,2],[-18,-35],[-58,15],[32,-21],[-3,-20],[-44,3],[-49,-58],[-33,-63],[-8,19],[29,70],[-28,-5],[-11,-42],[-27,16],[0,36],[-23,18],[5,30],[46,47],[20,-8],[11,-44],[7,49],[-11,29],[25,15],[10,-36],[6,53],[37,-27],[-19,33],[40,-12]],[[3397,7412],[23,-58],[-28,-10],[-9,43],[-42,41],[9,29],[46,54],[82,-47],[-2,-41],[-41,-1],[15,-19],[29,10],[8,-53],[-23,-2],[-67,54]],[[3520,7327],[-17,56],[-15,97],[-15,53],[25,-41],[45,-9],[29,-63],[-8,-20],[-24,71],[2,-42],[25,-42],[0,-59],[-62,-58],[0,42],[15,15]],[[168,8529],[21,-7],[27,22],[32,1],[20,-40],[47,-22],[78,-11],[-9,-26],[-45,4],[-41,-44],[-12,34],[-75,49],[-39,7],[-28,-21],[-28,10],[-10,28],[10,52],[18,-33],[34,-3]],[[3586,7222],[-22,-77],[7,-25],[-28,-30],[-7,56],[22,23],[-24,17],[-9,53],[25,4],[23,-31],[13,12],[-1,7],[-24,50],[22,2],[72,-27],[-1,-63],[-33,44],[24,-57],[-5,-15],[-48,1],[-6,56]]],"bbox":[-173.0093523315348,18.90630573265573,-63.48999976734578,71.31215663572162],"transform":{"scale":[0.010953030559474851,0.005241109201226711],"translate":[-173.0093523315348,18.90630573265573]},"title":"United States of America, small","version":"2.2.0","copyright":"Copyright (c) 2024 Highsoft AS, Based on data from Natural Earth","copyrightShort":"Natural Earth","copyrightUrl":"http://www.naturalearthdata.com"}
3},{}],2:[function(require,module,exports){
4module.exports={"type":"Topology","objects":{"default":{"type":"GeometryCollection","geometries":[{"type":"MultiPolygon","arcs":[[[0]],[[1,2,3,4,5,6,7,8]]],"id":"US.MA","properties":{"hc-group":"admin1","hc-key":"us-ma","hc-a2":"MA","labelrank":"0","hasc":"US.MA","woe-id":"2347580","state-fips":"25","fips":"US25","postal-code":"MA","name":"Massachusetts","country":"United States of America","region":"Northeast","longitude":"-71.99930000000001","woe-name":"Massachusetts","latitude":"42.3739","
4woe-label":"Massachusetts, US, United States","type":"State","hc-middle-lon":-72.055,"hc-middle-lat":42.398}},{"type":"MultiPolygon","arcs":[[[9]],[[10,11,12]]],"id":"US.WA","properties":{"hc-group":"admin1","hc-key":"us-wa","hc-a2":"WA","labelrank":"0","hasc":"US.WA","woe-id":"2347606","state-fips":"53","fips":"US53","postal-code":"WA","name":"Washington","country":"United States of America","region":"West","longitude":"-120.361","woe-name":"Washington","latitude":"47.4865","woe-label":"Washington, US, United States","type":"State","hc-middle-lon":-120.01,"hc-middle-lat":47.403}},{"type":"Polygon","arcs":[[13,14,15,16]],"id":"US.CA","properties":{"hc-group":"admin1","hc-key":"us-ca","hc-a2":"CA","labelrank":"0","hasc":"US.CA","woe-id":"2347563","state-fips":"6","fips":"US06","postal-code":"CA","name":"California","country":"United States of America","region":"West","longitude":"-119.591","woe-name":"California","latitude":"36.7496","woe-label":"California, US, United States","type":"State","hc-middle-lon":-118.415,"hc-middle-lat":35.686}},{"type":"Polygon","arcs":[[-14,17,-12,18,19]],"id":"US.OR","properties":{"hc-group":"admin1","hc-key":"us-or","hc-a2":"OR","labelrank":"0","hasc":"US.OR","woe-id":"2347596","state-fips":"41","fips":"US41","postal-code":"OR","name":"Oregon","country":"United States of America","region":"West","longitude":"-120.386","woe-name":"Oregon","latitude":"43.8333","woe-label":"Oregon, US, United States","type":"State","hc-middle-lon":-120.81,"hc-middle-lat":43.957}},{"type":"MultiPolygon","arcs":[[[20]],[[21,22,23,24,25,26,27,28]]],"id":"US.WI","properties":{"hc-group":"admin1","hc-key":"us-wi","hc-a2":"WI","labelrank":"0","hasc":"US.WI","woe-id":"2347608","state-fips":"55","fips":"US55","postal-code":"WI","name":"Wisconsin","country":"United States of America","region":"Midwest","longitude":"-89.5831","woe-name":"Wisconsin","latitude":"44.3709","woe-label":"Wisconsin, US, United States","type":"State","hc-middle-lon":-90.479,"hc-middle-lat":45.253}},{"type":"MultiPolygon","arcs":[[[29]],[[30,31]]],"id":"US.ME","properties":{"hc-group":"admin1","hc-key":"us-me","hc-a2":"ME","labelrank":"0","hasc":"US.ME","woe-id":"2347578","state-fips":"23","fips":"US23","postal-code":"ME","name":"Maine","country":"United States of America","region":"Northeast","longitude":"-69.1973","woe-name":"Maine","latitude":"45.148","woe-label":"Maine, US, United States","type":"State","hc-middle-lon":-69.074,"hc-middle-lat":45.611}},{"type":"MultiPolygon","arcs":[[[32]],[[33]],[[34,35,36]],[[-26,37]]],"id":"US.MI","properties":{"hc-group":"admin1","hc-key":"us-mi","hc-a2":"MI","labelrank":"0","hasc":"US.MI","woe-id":"2347581","state-fips":"26","fips":"US26","postal-code":"MI","name":"Michigan","country":"United States of America","region":"Midwest","longitude":"-84.9479","woe-name":"Michigan","latitude":"43.4343","woe-label":"Michigan, US, United States","type":"State","hc-middle-lon":-84.717,"hc-middle-lat":43.677}},{"type":"Polygon","arcs":[[-20,38,39,40,-15]],"id":"US.NV","properties":{"hc-group":"admin1","hc-key":"us-nv","hc-a2":"NV","labelrank":"0","hasc":"US.NV","woe-id":"2347587","state-fips":"32","fips":"US32","postal-code":"NV","name":"Nevada","country":"United States of America","region":"West","longitude":"-117.02","woe-name":"Nevada","latitude":"39.4299","woe-label":"Nevada, US, United States","type":"State","hc-middle-lon":-117.046,"hc-middle-lat":39.518}},{"type":"Polygon","arcs":[[41,42,43,44,45]],"id":"US.NM","properties":{"hc-group":"admin1","hc-key":"us-nm","hc-a2":"NM","labelrank":"0","hasc":"US.NM","woe-id":"2347590","state-fips":"35","fips":"US35","postal-code":"NM","name":"New Mexico","country":"United States of America","region":"West","longitude":"-106.024","woe-name":"New Mexico","latitude":"34.5002","woe-label":"New Mexico, US, United States","type":"State","hc-middle-lon":-106.098,"hc-middle-lat":34.421}},{"type":"Polygon","arcs":[[-42,46,47,48,49,50]],"id":"US.CO","properties":{"hc-group":"admin1","hc-key":"us-co","hc-a2":"CO","labelrank":"0","hasc":"US.CO","woe-id":"2347564","state-fips":"8","fips":"US08","postal-code":"CO","name":"Colorado","country":"United States of America","region":"West","longitude":"-105.543","woe-name":"Colorado","latitude":"38.9998","woe-label":"Colorado, US, United States","type":"State","hc-middle-lon":-105.57,"hc-middle-lat":39.042}},{"type":"Polygon","arcs":[[-48,51,52,53,54,55]],"id":"US.WY","properties":{"hc-group":"admin1","hc-key":"us-wy","hc-a2":"WY","labelrank":"0","hasc":"US.WY","woe-id":"2347609","state-fips":"56","fips":"US56","postal-code":"WY","name":"Wyoming","country":"United States of America","region":"West","longitude":"-107.552","woe-name":"Wyoming","latitude":"42.9999","woe-label":"Wyoming, US, United States","type":"State","hc-middle-lon":-107.579,"hc-middle-lat":43.039}},{"type":"Polygon","arcs":[[56,57,58,-50]],"id":"US.KS","properties":{"hc-group":"admin1","hc-key":"us-ks","hc-a2":"KS","labelrank":"0","hasc":"US.KS","woe-id":"2347575","state-fips":"20","fips":"US20","postal-code":"KS","name":"Kansas","country":"United States of America","region":"Midwest","longitude":"-98.3309","woe-name":"Kansas","latitude":"38.5","woe-label":"Kansas, US, United States","type":"State","hc-middle-lon":-99.894,"hc-middle-lat":38.549}},{"type":"Polygon","arcs":[[-57,-49,-56,59,60,61,62]],"id":"US.NE","properties":{"hc-group":"admin1","hc-key":"us-ne","hc-a2":"NE","labelrank":"0","hasc":"US.NE","woe-id":"2347586","state-fips":"31","fips":"US31","postal-code":"NE","name":"Nebraska","country":"United States of America","region":"Midwest","longitude":"-99.68550000000001","woe-name":"Nebraska","latitude":"41.5002","woe-label":"Nebraska, US, United States","type":"State","hc-middle-lon":-100.323,"hc-middle-lat":41.555}},{"type":"Polygon","arcs":[[-59,63,64,65,-43,-51]],"id":"US.OK","properties":{"hc-group":"admin1","hc-key":"us-ok","hc-a2":"OK","labelrank":"0","hasc":"US.OK","woe-id":"2347595","state-fips":"40","fips":"US40","postal-code":"OK","name":"Oklahoma","country":"United States of America","region":"South","longitude":"-97.1309","woe-name":"Oklahoma","latitude":"35.452","woe-label":"Oklahoma, US, United States","type":"State","hc-middle-lon":-96.299,"hc-middle-lat":35.365}},{"type":"Polygon","arcs":[[-64,-58,-63,66,67,68,69,70,71,72]],"id":"US.MO","properties":{"hc-group":"admin1","hc-key":"us-mo","hc-a2":"MO","labelrank":"0","hasc":"US.MO","woe-id":"2347584","state-fips":"29","fips":"US29","postal-code":"MO","name":"Missouri","country":"United States of America","region":"Midwest","longitude":"-92.446","woe-name":"Missouri","latitude":"38.5487","woe-label":"Missouri, US, United States","type":"State","hc-middle-lon":-92.521,"hc-middle-lat":38.313}},{"type":"Polygon","arcs":[[73,74,75,-68,76,-29,77]],"id":"US.IL","properties":{"hc-group":"admin1","hc-key":"us-il","hc-a2":"IL","labelrank":"0","hasc":"US.IL","woe-id":"2347572","state-fips":"17","fips":"US17","postal-code":"IL","name":"Illinois","country":"United States of America","region":"Midwest","longitude":"-89.1991","woe-name":"Illinois","latitude":"39.946","woe-label":"Illinois, US, United States","type":"State","hc-middle-lon":-89.191,"hc-middle-lat":40.062}},{"type":"Polygon","arcs":[[78,-36,79,80,-75]],"id":"US.IN","properties":{"hc-group":"admin1","hc-key":"us-in","hc-a2":"IN","labelrank":"0","hasc":"US.IN","woe-id":"2347573","state-fips":"18","fips":"US18","postal-code":"IN","name":"Indiana","country":"United States of America","region":"Midwest","longitude":"-86.1396","woe-name":"Indiana","latitude":"39.8874","woe-label":"Indiana, US, United States","type":"State","hc-middle-lon":-86.242,"hc-middle-lat":40.071}},{"type":"Polygon","arcs":[[81,82,83,-6]],"id":"US.VT","properties":{"hc-group":"admin1","hc-key":"us-vt","hc-a2":"VT","labelrank":"0","hasc":"US.VT","woe-id":"2347604","state-fips":"50","fips":"US50","postal-code":"
4VT","name":"Vermont","country":"United States of America","region":"Northeast","longitude":"-72.7317","woe-name":"Vermont","latitude":"44.0886","woe-label":"Vermont, US, United States","type":"State","hc-middle-lon":-72.843,"hc-middle-lat":44.15}},{"type":"Polygon","arcs":[[84,-65,-73,85,86,87]],"id":"US.AR","properties":{"hc-group":"admin1","hc-key":"us-ar","hc-a2":"AR","labelrank":"0","hasc":"US.AR","woe-id":"2347562","state-fips":"5","fips":"US05","postal-code":"AR","name":"Arkansas","country":"United States of America","region":"South","longitude":"-92.14279999999999","woe-name":"Arkansas","latitude":"34.7563","woe-label":"Arkansas, US, United States","type":"State","hc-middle-lon":-92.364,"hc-middle-lat":35.031}},{"type":"MultiPolygon","arcs":[[[-85,88,89,-44,-66]],[[90]]],"id":"US.TX","properties":{"hc-group":"admin1","hc-key":"us-tx","hc-a2":"TX","labelrank":"0","hasc":"US.TX","woe-id":"2347602","state-fips":"48","fips":"US48","postal-code":"TX","name":"Texas","country":"United States of America","region":"South","longitude":"-98.7607","woe-name":"Texas","latitude":"31.131","woe-label":"Texas, US, United States","type":"State","hc-middle-lon":-97.541,"hc-middle-lat":31.032}},{"type":"MultiPolygon","arcs":[[[91,-9]],[[-3,92,93]]],"id":"US.RI","properties":{"hc-group":"admin1","hc-key":"us-ri","hc-a2":"RI","labelrank":"0","hasc":"US.RI","woe-id":"2347598","state-fips":"44","fips":"US44","postal-code":"RI","name":"Rhode Island","country":"United States of America","region":"Northeast","longitude":"-71.5082","woe-name":"Rhode Island","latitude":"41.6242","woe-label":"Rhode Island, US, United States","type":"State","hc-middle-lon":-71.542,"hc-middle-lat":41.424}},{"type":"Polygon","arcs":[[94,95,96,97,98]],"id":"US.AL","properties":{"hc-group":"admin1","hc-key":"us-al","hc-a2":"AL","labelrank":"0","hasc":"US.AL","woe-id":"2347559","state-fips":"1","fips":"US01","postal-code":"AL","name":"Alabama","country":"United States of America","region":"South","longitude":"-86.7184","woe-name":"Alabama","latitude":"32.8551","woe-label":"Alabama, US, United States","type":"State","hc-middle-lon":-86.668,"hc-middle-lat":32.985}},{"type":"Polygon","arcs":[[99,100,-87,101,-96]],"id":"US.MS","properties":{"hc-group":"admin1","hc-key":"us-ms","hc-a2":"MS","labelrank":"0","hasc":"US.MS","woe-id":"2347583","state-fips":"28","fips":"US28","postal-code":"MS","name":"Mississippi","country":"United States of America","region":"South","longitude":"-89.71890000000001","woe-name":"Mississippi","latitude":"32.8657","woe-label":"Mississippi, US, United States","type":"State","hc-middle-lon":-89.833,"hc-middle-lat":32.749}},{"type":"MultiPolygon","arcs":[[[102,103,104,105]],[[106,107]],[[108,109,110,111,112]]],"id":"US.NC","properties":{"hc-group":"admin1","hc-key":"us-nc","hc-a2":"NC","labelrank":"0","hasc":"US.NC","woe-id":"2347592","state-fips":"37","fips":"US37","postal-code":"NC","name":"North Carolina","country":"United States of America","region":"South","longitude":"-78.866","woe-name":"North Carolina","latitude":"35.6152","woe-label":"North Carolina, US, United States","type":"State","hc-middle-lon":-78.867,"hc-middle-lat":35.491}},{"type":"MultiPolygon","arcs":[[[113,-104,114,-109,115,116,117,118,119,120,121,-108],[122]],[[123,-106]],[[124,125]],[[126,127]]],"id":"US.VA","properties":{"hc-group":"admin1","hc-key":"us-va","hc-a2":"VA","labelrank":"0","hasc":"US.VA","woe-id":"2347605","state-fips":"51","fips":"US51","postal-code":"
4VA","name":"Virginia","country":"United States of America","region":"South","longitude":"-78.2431","woe-name":"Virginia","latitude":"37.7403","woe-label":"Virginia, US, United States","type":"State","hc-middle-lon":-78.329,"hc-middle-lat":37.526}},{"type":"Polygon","arcs":[[-77,-67,128,-61,129,130,-23,131]],"id":"US.IA","properties":{"hc-group":"admin1","hc-key":"us-ia","hc-a2":"IA","labelrank":"0","hasc":"US.IA","woe-id":"2347574","state-fips":"19","fips":"US19","postal-code":"IA","name":"Iowa","country":"United States of America","region":"Midwest","longitude":"-93.3891","woe-name":"Iowa","latitude":"42.0423","woe-label":"Iowa, US, United States","type":"State","hc-middle-lon":-94.374,"hc-middle-lat":42.051}},{"type":"MultiPolygon","arcs":[[[132,-126]],[[133,134]],[[-127,135,136,-119,137,138,139,140]]],"id":"US.MD","properties":{"hc-group":"admin1","hc-key":"us-md","hc-a2":"MD","labelrank":"0","hasc":"US.MD","woe-id":"2347579","state-fips":"24","fips":"US24","postal-code":"MD","name":"Maryland","country":"United States of America","region":"South","longitude":"-77.0454","woe-name":"Maryland","latitude":"39.3874","woe-label":"Maryland, US, United States","type":"State","hc-middle-lon":-76.642,"hc-middle-lat":39.381}},{"type":"Polygon","arcs":[[141,-140,142,143,-135]],"id":"US.DE","properties":{"hc-group":"admin1","hc-key":"us-de","hc-a2":"DE","labelrank":"0","hasc":"US.DE","woe-id":"2347566","state-fips":"10","fips":"US10","postal-code":"DE","name":"Delaware","country":"United States of America","region":"South","longitude":"-75.41119999999999","woe-name":"Delaware","latitude":"38.8657","woe-label":"Delaware, US, United States","type":"State","hc-middle-lon":-75.081,"hc-middle-lat":38.671}},{"type":"Polygon","arcs":[[144,-143,-139,145,146,147,148,149]],"id":"US.PA","properties":{"hc-group":"admin1","hc-key":"us-pa","hc-a2":"PA","labelrank":"0","hasc":"US.PA","woe-id":"2347597","state-fips":"42","fips":"US42","postal-code":"PA","name":"Pennsylvania","country":"United States of America","region":"Northeast","longitude":"-77.60939999999999","woe-name":"Pennsylvania","latitude":"40.8601","woe-label":"Pennsylvania, US, United States","type":"State","hc-middle-lon":-77.652,"hc-middle-lat":40.87}},{"type":"Polygon","arcs":[[150,151,152,-150]],"id":"US.NJ","properties":{"hc-group":"admin1","hc-key":"us-nj","hc-a2":"NJ","labelrank":"0","hasc":"US.NJ","woe-id":"2347589","state-fips":"34","fips":"US34","postal-code":"NJ","name":"New Jersey","country":"United States of America","region":"Northeast","longitude":"-74.4653","woe-name":"New Jersey","latitude":"40.0449","woe-label":"New Jersey, US, United States","type":"State","hc-middle-lon":-74.556,"hc-middle-lat":39.748}},{"type":"Polygon","arcs":[[-149,153,-82,-5,154,155,-152,156]],"id":"US.NY","properties":{"hc-group":"admin1","hc-key":"us-ny","hc-a2":"NY","labelrank":"0","hasc":"US.NY","woe-id":"2347591","state-fips":"36","fips":"US36","postal-code":"NY","name":"New York","country":"United States of America","region":"Northeast","longitude":"-75.32420000000001","woe-name":"New York","latitude":"43.1988","woe-label":"New York, US, United States","type":"State","hc-middle-lon":-75.04,"hc-middle-lat":43.02}},{"type":"Polygon","arcs":[[157,158,-53,159,-39,-19,-11]],"id":"US.ID","properties":{"hc-group":"admin1","hc-key":"us-id","hc-a2":"ID","labelrank":"0","hasc":"US.ID","woe-id":"2347571","state-fips":"16","fips":"US16","postal-code":"ID","name":"Idaho","country":"United States of America","region":"West","longitude":"-114.133","woe-name":"Idaho","latitude":"43.7825","woe-label":"Idaho, US, United States","type":"State","hc-middle-lon":-114.097,"hc-middle-lat":43.549}},{"type":"Polygon","arcs":[[-55,160,161,162,-130,-60]],"id":"US.SD","properties":{"hc-group":"admin1","hc-key":"us-sd","hc-a2":"SD","labelrank":"0","hasc":"US.SD","woe-id":"2347600","state-fips":"46","fips":"US46","postal-code":"SD","name":"South Dakota","country":"United States of America","region":"Midwest","longitude":"-100.255","woe-name":"South Dakota","latitude":"44.4711","woe-label":"South Dakota, US, United States","type":"State","hc-middle-lon":-100.262,"hc-middle-lat":44.506}},{"type":"Polygon","arcs":[[163,-155,-4,-94]],"id":"US.CT","properties":{"hc-group":"admin1","hc-key":"us-ct","hc-a2":"CT","labelrank":"0","hasc":"US.CT","woe-id":"2347565","state-fips":"9","fips":"US09","postal-code":"CT","name":"Connecticut","country":"United States of America","region":"Northeast","longitude":"-72.7594","woe-name":"Connecticut","latitude":"41.6486","woe-label":"Connecticut, US, United States","type":"State","hc-middle-lon":-72.757,"hc-middle-lat":41.516}},{"type":"Polygon","arcs":[[164,-7,-84,165,-32]],"id":"US.NH","properties":{"hc-group":"admin1","hc-key":"us-nh","hc-a2":"NH","labelrank":"0","hasc":"US.NH","woe-id":"2347588","state-fips":"33","fips":"US33","postal-code":"NH","name":"New Hampshire","country":"United States of America","region":"Northeast","longitude":"-71.6301","woe-name":"New Hampshire","latitude":"43.5993","woe-label":"New Hampshire, US, United States","type":"State","hc-middle-lon":-71.593,"hc-middle-lat":43.783}},{"type":"MultiPolygon","arcs":[[[-71,166]],[[-69,-76,-81,167,168,-117,169]],[[170,170,170]]],"id":"US.KY","properties":{"hc-group":"admin1","hc-key":"us-ky","hc-a2":"KY","labelrank":"0","hasc":"US.KY","woe-id":"2347576","state-fips":"21","fips":"US21","postal-code":"KY","name":"Kentucky","country":"United States of America","region":"South","longitude":"-85.5729","woe-name":"Kentucky","latitude":"37.3994","woe-label":"Kentucky, US, United States","type":"State","hc-middle-lon":-84.594,"hc-middle-lat":37.611}},{"type":"Polygon","arcs":[[-35,171,-147,172,-168,-80]],"id":"US.OH","properties":{"hc-group":"admin1","hc-key":"us-oh","hc-a2":"OH","labelrank":"0","hasc":"US.OH","woe-id":"2347594","state-fips":"39","fips":"US39","postal-code":"OH","name":"Ohio","country":"United States of America","region":"Midwest","longitude":"-82.67189999999999","woe-name":"Ohio","latitude":"40.0924","woe-label":"Ohio, US, United States","type":"State","hc-middle-lon":-83.048,"hc-middle-lat":40.263}},{"type":"Polygon","arcs":[[-102,-86,-72,-167,-70,-170,-116,-113,173,-97]],"id":"US.TN","properties":{"hc-group":"admin1","hc-key":"us-tn","hc-a2":"TN","labelrank":"0","hasc":"US.TN","woe-id":"2347601","state-fips":"47","fips":"US47","postal-code":"TN","name":"Tennessee","country":"United States of America","region":"South","longitude":"-86.3415","woe-name":"Tennessee","latitude":"35.7514","woe-label":"Tennessee, US, United States","type":"State","hc-middle-lon":-86.623,"hc-middle-lat":35.846}},{"type":"Polygon","arcs":[[-173,-146,-138,-118,-169]],"id":"US.WV","properties":{"hc-group":"admin1","hc-key":"us-wv","hc-a2":"WV","labelrank":"0","hasc":"US.WV","woe-id":"2347607","state-fips":"54","fips":"US54","postal-code":"WV","name":"West Virginia","country":"United States of America","region":"South","longitude":"-80.7128","woe-name":"West Virginia","latitude":"38.6422","woe-label":"West Virginia, US, United States","type":"State","hc-middle-lon":-80.919,"hc-middle-lat":38.701}},{"type":"Polygon","arcs":[[174,-120,-137]],"id":"US.DC","properties":{"hc-group":"admin1","hc-key":"us-dc","hc-a2":"DC","labelrank":"9","hasc":"US.DC","woe-id":"2347567","state-fips":"11","fips":"US11","postal-code":"DC","name":"District of Columbia","country":"United States of America","region":"South","longitude":"-77.01130000000001","woe-name":"District of Columbia","latitude":"38.8922","woe-label":"District of Columbia, US, United States","type":"Federal District","hc-middle-lon":-77.001,"hc-middle-lat":38.899}},{"type":"Polygon","arcs":[[175,-89,-88,-101]],"id":"US.LA","properties":{"hc-group":"admin1","hc-key":"us-la","hc-a2":"LA","labelrank":"0","hasc":"US.LA","woe-id":"2347577","state-fips":"22","fips":"US22","postal-code":"LA","name":"Louisiana","country":"United States of America","region":"South","longitude":"-91.9991","woe-name":"Louisiana","latitude":"30.5274","woe-label":"Louisiana, US, United States","type":"State","hc-middle-lon":-92.307,"hc-middle-lat":31.273}},{"type":"Polygon","arcs":[[-99,176,177]],"id":"US.FL","properties":{"hc-group":"admin1","hc-key":"us-fl","hc-a2":"FL","labelrank":"0","hasc":"US.FL","woe-id":"2347568","state-fips":"12","fips":"US12","postal-code":"FL","
4name":"Florida","country":"United States of America","region":"South","longitude":"-81.6228","woe-name":"Florida","latitude":"28.1568","woe-label":"Florida, US, United States","type":"State","hc-middle-lon":-81.631,"hc-middle-lat":27.933}},{"type":"Polygon","arcs":[[-98,-174,-112,178,179,-177]],"id":"US.GA","properties":{"hc-group":"admin1","hc-key":"us-ga","hc-a2":"GA","labelrank":"0","hasc":"US.GA","woe-id":"2347569","state-fips":"13","fips":"US13","postal-code":"GA","name":"Georgia","country":"United States of America","region":"South","longitude":"-83.4078","woe-name":"Georgia","latitude":"32.8547","woe-label":"Georgia, US, United States","type":"State","hc-middle-lon":-83.674,"hc-middle-lat":32.715}},{"type":"Polygon","arcs":[[180,-179,-111]],"id":"US.SC","properties":{"hc-group":"admin1","hc-key":"us-sc","hc-a2":"SC","labelrank":"0","hasc":"US.SC","woe-id":"2347599","state-fips":"45","fips":"US45","postal-code":"SC","name":"South Carolina","country":"United States of America","region":"South","longitude":"-80.6471","woe-name":"South Carolina","latitude":"33.8578","woe-label":"South Carolina, US, United States","type":"State","hc-middle-lon":-80.813,"hc-middle-lat":34.034}},{"type":"Polygon","arcs":[[181,-24,-131,-163,182]],"id":"US.MN","properties":{"hc-group":"admin1","hc-key":"us-mn","hc-a2":"MN","labelrank":"0","hasc":"US.MN","woe-id":"2347582","state-fips":"27","fips":"US27","postal-code":"MN","name":"Minnesota","country":"United States of America","region":"Midwest","longitude":"-93.364","woe-name":"Minnesota","latitude":"46.0592","woe-label":"Minnesota, US, United States","type":"State","hc-middle-lon":-94.386,"hc-middle-lat":45.85}},{"type":"Polygon","arcs":[[183,184,-161,-54,-159]],"id":"US.MT","properties":{"hc-group":"admin1","hc-key":"us-mt","hc-a2":"MT","labelrank":"0","hasc":"US.MT","woe-id":"2347585","state-fips":"30","fips":"US30","postal-code":"MT","name":"Montana","country":"United States of America","region":"West","longitude":"-110.044","woe-name":"Montana","latitude":"46.9965","woe-label":"Montana, US, United States","type":"State","hc-middle-lon":-109.139,"hc-middle-lat":47.053}},{"type":"Polygon","arcs":[[-185,185,-183,-162]],"id":"US.ND","properties":{"hc-group":"admin1","hc-key":"us-nd","hc-a2":"ND","labelrank":"0","hasc":"US.ND","woe-id":"2347593","state-fips":"38","fips":"US38","postal-code":"ND","name":"North Dakota","country":"United States of America","region":"Midwest","longitude":"-100.302","woe-name":"North Dakota","latitude":"47.4675","woe-label":"North Dakota, US, United States","type":"State","hc-middle-lon":-100.635,"hc-middle-lat":47.51}},{"type":"Polygon","arcs":[[186,-16,-41,187,-46]],"id":"US.AZ","properties":{"hc-group":"admin1","hc-key":"us-az","hc-a2":"AZ","labelrank":"0","hasc":"US.AZ","woe-id":"2347561","state-fips":"4","fips":"US04","postal-code":"AZ","name":"Arizona","country":"United States of America","region":"West","longitude":"-111.935","woe-name":"Arizona","latitude":"34.3046","woe-label":"Arizona, US, United States","type":"State","hc-middle-lon":-111.881,"hc-middle-lat":34.446}},{"type":"Polygon","arcs":[[-188,-40,-160,-52,-47]],"id":"US.UT","properties":{"hc-group":"admin1","hc-key":"us-ut","hc-a2":"UT","labelrank":"0","hasc":"US.UT","woe-id":"2347603","state-fips":"49","fips":"US49","postal-code":"UT","name":"Utah","country":"United States of America","region":"West","longitude":"-111.544","woe-name":"Utah","latitude":"39.5007","woe-label":"Utah, US, United States","type":"State","hc-middle-lon":-111.491,"hc-middle-lat":39.012}},{"type":"MultiPolygon","arcs":[[[188]],[[189]],[[190]],[[191]],[[192]],[[193]],[[194]],[[195]]],"id":"US.HI","properties":{"hc-group":"admin1","hc-key":"us-hi","hc-a2":"HI","labelrank":"0","hasc":"US.HI","woe-id":"2347570","state-fips":"15","fips":"US15","postal-code":"HI","name":"Hawaii","country":"United States of America","region":"West","longitude":"-157.999","woe-name":"Hawaii","latitude":"21.4919","woe-label":"Hawaii, US, United States","type":"State","hc-middle-lon":-155.52,"hc-middle-lat":19.605,"hc-inset":"us-all-hawaii"}},{"type":"MultiPolygon","arcs":[[[196],[197]],[[198]],[[199]],[[200]],[[201]],[[202]],[[203]],[[204]],[[205]],[[206]],[[207]],[[208]],[[209]],[[210]],[[211]],[[212]],[[213]],[[214]],[[215]],[[216]],[[217]],[[218]],[[219]],[[220]],[[221]],[[222]],[[223]
4],[[224]],[[225]],[[226]],[[227]],[[228]],[[229]],[[230]],[[231]],[[232]],[[233]],[[234]],[[235]],[[236]],[[237]],[[238]],[[239]],[[240]],[[241]]],"id":"US.AK","properties":{"hc-group":"admin1","hc-key":"us-ak","hc-a2":"AK","labelrank":"0","hasc":"US.AK","woe-id":"2347560","state-fips":"2","fips":"US02","postal-code":"AK","name":"Alaska","country":"United States of America","region":"West","longitude":"-151.604","woe-name":"Alaska","latitude":"65.3609","woe-label":"Alaska, US, United States","type":"State","hc-middle-lon":-150.208,"hc-middle-lat":65.023,"hc-inset":"us-all-alaska"}}],"hc-recommended-transform":{"default":{"crs":"+proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs","scale":0.000151481324748,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-2361356.09818,"yoffset":1398996.77886},"us-all-hawaii":{"xpan":190,"ypan":417,"crs":"+proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs","scale":0.000123090941806,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-338610.47557,"yoffset":1022754.31736,"geometry":{"type":"Polygon","coordinates":[[[-108.02234811026737,28.131995556971578],[-99.6925136210582,25.09851533842571],[-99.13103120627295,10.80433106513135],[-105.76273688266124,10.337841364791041],[-108.02234811026737,28.131995556971578]]]}},"us-all-alaska":{"rotation":-0.0174532925199,"xpan":5,"ypan":357,"crs":"+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs","scale":0.0000584397059179,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-1566154.00853,"yoffset":1992671.14918,"geometry":{"type":"Polygon","coordinates":[[[-120.85794661131852,30.762825284322425],[-119.60838899484447,31.05714930388009],[-108.02234811026737,28.131995556971578],[-105.76273688266124,10.337841364791041],[-115.12985129390901,8.8460581322757],[
4-120.85794661131852,30.762825284322425]]]}}},"hc-recommended-mapview":{"projection":{"name":"LambertConformalConic","parallels":[33,45],"rotation":[96]},"padding":[0,0,"8%",0],"insets":[{"id":"us-alaska","borderPath":{"type":"MultiLineString","coordinates":[[[0,60],[25,80],[25,100]]]},"field":{"type":"Polygon","coordinates":[[[0,60],[25,80],[25,100],[0,100]]]},"geoBounds":{"type":"Polygon","coordinates":[[[-179.5,50],[-129,50],[-129,72],[-179.5,72]]]},"padding":["30%","5%",0,0],"projection":{"name":"LambertConformalConic","parallels":[55,65],"rotation":[154]}},{"id":"us-hawaii","borderPath":{"type":"LineString","coordinates":[[[25,80],[40,92]]]},"field":{"type":"Polygon","coordinates":[[[25,80],[40,92],[40,100],[25,100]]]},"geoBounds":{"type":"Polygon","coordinates":[[[-162,23],[-152,23],[-152,18],[-162,18]]]},"padding":["30%","20%",0,"10%"],"projection":{"name":"LambertConformalConic","parallels":[8,18],"rotation":[157]}}]}}},"arcs":[[[9647,4303],[19,-17],[-20,-2],[-11,-11],[12,30]],[[9596,4344],[1,9],[-5,-2]],[[9592,4351],[-10,17],[-4,41],[-39,0]],[[9539,4409],[-90,3],[-68,5]],[[9381,4417],[-3,4],[23,127]],[[9401,4548],[33,0],[42,-2]],[[9476,4546],[110,-6],[14,21],[32,13]],[[9632,4574],[3,-31],[17,-16],[-26,-18],[-15,-44],[13,2],[17,-21],[17,-75],[25,-19],[24,14],[-3,48],[10,-35],[0,-35],[-23,-3],[-47,-24],[3,36],[-24,-16],[-2,-17],[-18,-7]],[[9603,4313],[-1,29],[-6,2]],[[4722,5694],[15,-16],[-16,-15],[10,-30],[-32,16],[12,9],[11,36]],[[5276,5740],[-1,-498],[12,-37],[4,-35]],[[5291,5170],[-201,-1],[-9,-10],[-46,-4],[-61,-36],[-36,-1],[-27,-17],[-25,-2],[-10,15],[-49,2],[-44,-29],[-45,18],[-6,60],[-10,25],[-26,14]],[[4696,5204],[-18,-5],[-10,23],[-20,6],[-17,-13],[-18,23],[0,56],[6,-38],[10,18],[0,38],[-18,-1],[-4,28],[30,14],[-34,15],[-14,61],[-10,73],[-20,32],[-9,50],[15,38],[49,-37],[76,-12],[9,12],[15,-27],[21,20],[14,-48],[-13,-42],[22,45],[-6,-59],[21,-41],[-34,-8],[-4,-32],[-5,40],[-19,-50],[35,1],[11,37],[20,14],[-8,35],[1,39],[18,39],[-22,48],[5,14],[-19,14],[-12,-28],[11,-5],[24,-49],[-20,7],[-6,33],[-12,17],[15,26],[-6,3],[-6,27],[21,-18],[5,25],[-5,30],[-15,5],[-15,32],[6,12],[539,-1]],[[4599,4406],[397,0]],[[4996,4406],[0,-573],[177,-249],[138,-210],[192,-303]],[[5503,3071],[24,-102],[23,-36],[-24,-29],[-13,-36],[3,-40],[-13,-56],[-9,-4],[2,-62],[21,-19],[-6,-48],[-17,-5]],[[5494,2634],[-227,-34],[-1,30],[-12,2],[-6,78],[-17,43],[-63,82],[-22,-5],[2,19],[-14,38],[-25,-7],[-39,29],[-5,20],[-33,31],[-24,-3],[-25,13],[-31,-4],[-17,26],[1,105],[-24,22],[6,16],[-32,57],[-11,6],[-42,102],[-16,19],[-7,52],[15,21],[2,24],[-13,32],[-21,0],[-23,41],[0,32],[-11,33],[0,48],[10,5],[5,-41],[30,-27],[-12,40],[-16,23],[-3,43],[22,6],[-25,21],[-10,-7],[-2,-57],[-36,41],[-21,80],[-56,89],[4,21],[-14,61],[6,38],[-8,55],[-25,52],[-23,30],[-4,34],[28,114],[4,76],[-9,57],[-10,8],[5,42]],[[4599,4406],[-14,22],[-7,41],[2,64],[-13,35],[10,35],[7,59],[13,39],[8,64],[10,144],[-2,36],[16,140],[-8,40],[4,41],[-5,42],[35,-3],[13,13],[9,-21],[19,7]],[[5291,5170],[11,-32],[21,-16],[7,-32],[-18,-45],[-17,-82],[-35,-83],[1,-35],[27,-22],[-11,-76],[0,-341]],[[5277,4406],[-281,0]],[[8109,5044],[-7,-43],[-23,-56],[-11,19],[16,48],[25,32]],[[7763,4504],[-6,27]],[[7757,4531],[-32,17],[-11,79],[7,23],[-15,43]],[[7706,4693],[-4,79],[-13,20],[-22,10],[-42,69],[-27,28],[-18,5],[-22,28],[6,33],[0,71],[8,28],[-20,24],[0,27],[17,38],[39,32],[0,111],[17,20]],[[7625,5316],[30,-12],[57,30],[21,17],[21,-5],[-6,-28],[13,-26],[24,-10]],[[7785,5282],[17,-15],[11,-33],[94,-36],[26,-22],[61,-14],[11,-33],[26,-19],[-6,-63],[20,-2],[-7,-32],[12,-15]],[[8050,4998],[-21,-29],[-20,-72],[10,-3],[29,55],[16,8],[11,-16],[-21,-94],[5,-17],[-21,-56],[2,-42],[-19,-84],[1,-47],[11,-40],[-3,-61]],[[8030,4500],[-166,2],[-86,1]],[[7778,4503],[-15,1]],[[9856,4851],[15,21],[9,-16],[-21,-35],[-3,30]],[[9606,5037],[17,-12],[21,63],[26,30],[14,43],[-5,22],[12,55],[11,11],[6,55],[70,140],[18,-1],[3,-35],[13,-12],[67,30],[36,-59],[2,-260],[33,-13],[-3,-62],[11,-22],[17,3],[24,-65],[-26,-37],[-13,12],[-7,-21],[-44,-11],[-3,-27],[-14,-14],[-5,29],[-31,2],[-19,-37],[4,-47],[-20,61],[6,32],[-23,-22],[-8,-70],[-18,-24],[-10,9],[-13,-27],[-19,-2],[-11,-24],[-12,29],[-27,-29],[3,-26],[-35,-55],[-15,-36]],[[9639,4613],[-22,57],[1,34],[-12,333]],[[8430,5184],[1,-28],[-23,3],[8,31],[14,-6]],[[7965,5584],[-18,-31],[-42,-34],[1,25],[59,40]],[[8440,4355],[-79,
4-4],[-48,-2]],[[8313,4349],[0,11],[-192,1]],[[8121,4361],[23,34],[21,60],[15,87],[0,48],[-31,127],[10,30],[-7,57],[23,55],[0,60],[16,11],[2,33],[22,6],[19,45],[7,-23],[-8,-40],[8,-14],[14,28],[2,57],[21,28],[18,2],[-9,47],[29,32],[26,-22],[-8,25],[22,-5],[-10,-23],[22,-5],[12,-26],[55,-28],[12,-15],[7,-40],[-14,-13],[16,-57],[-6,-71],[-17,-12],[-6,-39],[-25,-14],[-4,-59],[21,-14],[18,19],[24,54],[30,15],[22,-28],[15,-123],[11,-50],[-10,-70],[-28,1],[-7,-48],[-23,-25],[-12,-65],[-19,-38]],[[7785,5282],[37,20],[21,26],[37,7],[25,26],[16,3],[31,42],[4,-11],[15,36],[36,22],[31,-10],[-49,-47],[-17,-37],[0,25],[-13,4],[12,-31],[-2,-36],[21,28],[41,-7],[16,-14],[27,-60],[35,5],[8,-16],[28,1],[42,43],[59,-1],[30,18],[23,1],[-10,-48],[21,-14],[17,9],[8,-16],[14,17],[30,3],[-3,-55],[23,-43],[-12,-9],[-48,5],[-12,12],[-7,-38],[-27,32],[-30,17],[-19,-3],[-11,-21],[-56,-6],[-12,-28],[-31,-26],[13,42],[-20,-5],[-20,-28],[-1,36],[-56,-154]],[[5277,4406],[193,1],[88,-1]],[[5558,4406],[0,-536],[0,-417]],[[5558,3453],[-1,-149],[-7,-34],[-41,22],[-15,-13],[5,-42],[0,-68],[9,-62],[-5,-36]],[[6028,3452],[570,0]],[[6598,3452],[0,-71],[0,-24]],[[6598,3357],[-3,-4],[-3,-854],[-339,-1],[15,-44]],[[6268,2454],[-161,2],[0,-86],[-79,0]],[[6028,2370],[1,542],[-1,540]],[[6028,3452],[0,644],[1,120]],[[6029,4216],[470,-1]],[[6499,4215],[189,0],[0,-190]],[[6688,4025],[0,-125],[1,-448]],[[6689,3452],[-91,0]],[[6029,4216],[-189,-1],[0,191]],[[5840,4406],[0,149],[0,328]],[[5840,4883],[0,95],[659,0]],[[6499,4978],[0,-309],[0,-72]],[[6499,4597],[0,-72],[0,-310]],[[6688,4025],[635,0]],[[7323,4025],[41,-35],[-21,-55],[19,-28],[6,-32],[20,-18],[0,-405]],[[7388,3452],[-699,0]],[[6499,4597],[525,0],[38,-37],[23,12],[51,4],[16,-19],[39,-21],[22,-31]],[[7213,4505],[8,-4],[4,-55],[18,-42],[9,-37],[-2,-46],[15,-16],[5,-31],[4,-98]],[[7274,4176],[6,-33],[0,-4]],[[7280,4139],[13,-49],[30,-65]],[[7388,3452],[0,-24],[0,-71]],[[7388,3357],[17,-213],[-4,-331]],[[7401,2813],[-37,20],[-33,40],[-12,-18],[-23,16],[-16,-18],[-16,7],[-37,-37],[-30,41],[-19,-8],[-6,15],[-15,-18],[-4,-25],[-9,35],[-15,-16],[-29,30],[-26,-17],[-13,46],[-37,-12],[-44,26],[-23,4],[-7,34],[-39,-2],[-30,33],[0,367],[-283,1]],[[7280,4139],[121,-5],[131,1],[129,8],[27,-46]],[[7688,4097],[-8,-39],[7,-59],[9,-30],[29,-49],[21,-25],[11,-62],[12,-23],[14,17],[28,-25],[-24,-102],[26,-54],[18,-12],[35,-48],[9,-49],[-7,-34],[13,-34],[25,-20]],[[7906,3449],[-1,-47],[-11,-32],[-10,14],[-6,-27]],[[7878,3357],[-5,-9],[-2,9]],[[7871,3357],[-7,10],[1,-10]],[[7865,3357],[3,-22],[-16,-27],[8,-20],[-10,-27]],[[7850,3261],[-62,-2],[29,58],[-9,40],[-420,0]],[[8030,4500],[-1,-40],[28,-105]],[[8057,4355],[-1,-452],[-12,-47],[11,-28],[3,-40],[-13,-46],[-10,-11],[-17,-57],[-9,-12],[-1,-56]],[[8008,3606],[-11,-32],[4,-31],[-33,-13],[-2,-64],[-39,28],[-13,-2],[-13,-28],[5,-15]],[[7688,4097],[5,42],[19,10],[20,56],[2,25],[-12,22],[8,46],[27,3],[34,30],[14,40],[3,58],[-22,24],[-23,51]],[[7778,4503],[119,-1],[133,-2]],[[8057,4355],[22,-20],[42,26]],[[8313,4349],[1,-77],[-3,-420]],[[8311,3852],[-5,-33],[6,-25],[-35,-19],[-25,6],[3,-35],[-19,-20],[-4,-24],[-14,-4],[-9,-43],[-13,-18],[-22,33],[-23,-23],[-1,-17],[-19,-5],[-7,17],[-33,-28],[-25,19],[-16,-17],[-27,14],[-15,-24]],[[9401,4548],[1,154],[-16,9],[5,29],[-6,58],[10,35],[3,45],[-6,20],[1,81]],[[9393,4979],[61,1],[113,1]],[[9567,4981],[-13,-52],[8,-27],[-11,-29],[-35,-31],[-1,-27],[-15,-68],[-17,-48],[-1,-45],[-14,-80],[8,-28]],[[7443,2691],[-1,103],[-26,1],[-15,18]],[[7850,3261],[0,-31],[-21,-19],[3,-36],[-18,-30],[0,-50],[-19,-24]],[[7795,3071],[3,-15],[-18,-18],[-12,-36],[0,-41],[-34,-51],[4,-23],[-17,-8],[4,-34],[-17,-25],[9,-39],[-5,-31],[8,-32],[-6,-26]],[[7714,2692],[-18,0],[-253,-1]],[[7443,2691],[-1,-193],[22,-55],[-1,-24],[30,-103],[-6,-43],[-15,-48],[1,-93],[-8,-18]],[[7465,2114],[-12,-40],[5,-19],[-17,1],[-56,-44],[9,23],[-19,-9],[5,43],[-26,-15],[-4,-25],[28,-40],[-20,-21],[5,29],[-26,-62],[-41,-54],[-33,-15],[-5,-17],[-38,-39],[-1,-12],[-27,-28],[-29,-56],[12,46],[-13,15],[-19,-26],[19,-6],[-17,-42],[-17,2],[11,-29],[-14,-66],[-7,13],[-21,-26],[26,2],[-11,-51],[23,-169],[16,-30],[-27,-22],[-36,40],[-39,3],[-14,22],[-26,10],[-15,24],[-27,7],[-7,60],[-28,64],[-6,48],[2,50],[-19,17],[-35,95],[-19,26],[-11,57],[-22,63],[-4,37],[-33,52],[7,17],[-19,7],[-24,50],[-67,5],[-20,18],[-7,-23],[-27,-6],[-20,-89],[3,-9],[-27,-47],[-14,3],[-46,53],[-25,12],[-20,35],[-25,27],[-14,53],[0,47],[-31,93],[-33,33],[-61,104],[-15,10],[-18,51],[-14,10]],[[7147,1669],[-19,-85],[0,-53],[11,-88],[-13,69],[3,98],[18,59]],[[9603,4313],[-8,-2],[1,33]],[[9592,4351],[0,-43],[-18,-3],[-6,-20],[-34,-10]],[[9534,4275],[5,40],[0,94]],[[8067,2209],[-22,-44],[-62,-3],[19,7],[-7,18],[-21,4]],[[7974,2191],[-8,286],[38,573],[-9,20]],[[7995,3070],[0,3],[243,-5]],[[8238,3068],[38,-390],[11,-62],[17,-65],[-14,-27],[-9,-60],[10,-55],[-7,-50
4],[10,-51]],[[8294,2308],[-243,-1],[-4,-24],[21,-43],[-1,-31]],[[7974,2191],[-43,4],[-44,-21],[-19,-21]],[[7868,2153],[-30,94],[11,61],[-181,-1],[7,11],[-6,41],[9,2],[1,42],[9,14],[10,54],[23,30],[16,62],[-16,21],[-6,61],[7,29],[-8,18]],[[7795,3071],[159,-1],[41,0]],[[9152,3366],[0,-10],[-10,10]],[[9142,3366],[4,0]],[[9146,3366],[1,-1],[2,1]],[[9149,3366],[1,0],[2,0]],[[9157,3366],[6,-51],[29,-108],[-23,66],[-14,93]],[[9155,3366],[1,1],[1,-1]],[[8610,3378],[41,-8],[106,-6],[383,2]],[[9140,3366],[23,-89],[-39,42],[14,-25],[-44,-30],[-15,8],[-5,-21],[64,7],[2,-63],[4,45],[13,17],[12,-28],[-6,-49],[-9,12],[-17,-48],[-19,-7],[-29,29],[-2,-20],[-37,19],[46,-35],[-16,-27],[10,-9],[-26,-25],[-23,32],[14,-34],[16,-13],[21,4],[8,27],[12,-34],[-28,-39],[-48,-2],[-50,-58],[-15,-32],[-14,-69],[-26,15],[-30,-8]],[[8901,2858],[-102,174],[-106,5],[-1,26],[-27,37],[-114,10],[-78,-39]],[[8473,3071],[-36,-1],[-78,-2]],[[8359,3068],[5,51],[16,1],[8,32],[22,25],[26,3],[40,42],[16,29],[26,21],[5,-16],[36,36],[11,-12],[15,37],[17,18],[8,43]],[[9155,3366],[-8,31],[-1,-31]],[[9142,3366],[-3,8],[1,-8]],[[8610,3378],[-28,-3],[-162,2]],[[8420,3377],[51,28],[23,27],[24,52],[27,21],[36,50]],[[8581,3555],[13,-48],[26,-14],[20,23],[11,-17],[26,10],[9,25],[11,-9],[41,24],[1,34],[47,113],[15,60],[31,-32],[30,80],[10,-11],[28,39],[16,34],[8,54],[46,-59],[10,36]],[[8980,3897],[25,-17],[-5,-17],[38,-42]],[[9038,3821],[2,-5],[3,-1]],[[9043,3815],[2,-36],[
4-18,-11],[-11,-47],[9,-15],[20,13],[15,-42],[25,-5],[8,-24],[27,-23],[-7,-54],[-16,7],[-13,30],[-28,31],[38,-69],[26,-32],[-19,-15],[-4,-21]],[[9097,3502],[8,-5],[10,-42],[-12,-8],[-21,50],[-35,11],[29,-27],[22,-46],[20,10],[26,-9],[13,-70]],[[9097,3502],[-3,1],[-24,52],[16,-47],[8,-5],[2,-4],[1,3]],[[9149,3366],[2,5],[1,-5]],[[9214,3647],[-7,-25],[6,25]],[[9213,3647],[1,0]],[[9177,3637],[2,5],[23,4]],[[9202,3646],[-11,-35],[-37,-91],[6,-30],[-12,-21],[-6,43],[7,50],[28,75]],[[7280,4139],[-6,37]],[[7213,4505],[-15,45],[17,70],[-10,20],[-3,52],[13,1]],[[7215,4693],[338,0],[153,0]],[[7757,4531],[7,-23],[-1,-4]],[[9213,3647],[6,16],[-5,-16]],[[9233,3730],[-3,-22],[2,21]],[[9232,3729],[1,1]],[[9177,3637],[-21,-7],[8,43],[-24,29],[-1,-13],[-26,44],[29,18],[-9,23],[-19,15],[19,22],[-13,13],[-3,39],[23,46],[9,40],[-25,-45],[-11,8],[-6,-31],[-17,3],[14,-33],[-12,-38],[3,-69],[9,-39],[-21,29],[30,-64],[0,-19],[-23,30],[-26,11],[-18,43],[-16,-22],[-6,24],[22,41],[1,19]],[[9047,3797],[11,16],[-20,8]],[[8980,3897],[-11,53],[-27,18],[-28,-15],[-4,-17],[-20,2],[-9,17],[-17,-35],[-10,6],[-40,-52],[1,97]],[[8815,3971],[164,0],[184,0]],[[9163,3971],[9,-240],[57,-1]],[[9229,3730],[-6,-41],[-9,-3],[-12,-40]],[[9232,3729],[-3,2],[0,-1]],[[9163,3971],[18,23],[16,-6]],[[9197,3988],[-17,-37],[2,-29],[15,-28],[3,-49],[22,-51],[7,1],[4,-65]],[[9235,4028],[-12,-22],[-26,-18]],[[8815,3971],[-98,1],[0,176]],[[8717,4148],[0,255]],[[8717,4403],[14,8],[58,46]],[[8789,4457],[-1,-51],[418,0],[24,-33],[1,-40],[35,-50]],[[9266,4283],[-42,-71],[8,-17],[-12,-26],[0,-35],[9,-3],[34,-75],[-28,-28]],[[9266,4283],[37,-35]],[[9303,4248],[37,-34]],[[9340,4214],[-11,-53],[-17,-15],[-7,-26],[27,-18],[2,-15],[-12,-114],[-21,-32],[-8,-39],[-23,-30],[-21,-49],[-8,-2],[7,41],[-24,7],[-37,56],[-2,27],[11,30],[28,19],[11,27]],[[8789,4457],[57,60],[27,51],[-19,49],[1,33],[35,16],[54,6],[35,-9],[19,-17],[16,8],[36,-3],[26,11],[28,37],[22,10],[-3,52],[11,28],[-17,-6],[-8,30],[20,31],[28,16],[15,39],[40,53],[38,29],[16,-3],[127,1]],[[9381,4417],[-6,-145],[5,-15],[-22,-22],[7,-19]],[[9365,4216],[-12,-32],[27,21],[25,-7],[12,11],[46,5],[25,28],[15,-25],[5,16],[0,-14],[26,10],[-52,-40],[-30,-10],[-30,-26],[-50,-19],[-39,-1],[-24,-13],[4,24],[13,-2],[14,31],[-8,-4],[8,45]],[[9303,4248],[-28,26],[-9,9]],[[5276,5740],[93,1]],[[5369,5741],[0,-189],[31,-58],[0,-51],[35,-31],[40,-68],[1,-14],[32,-38],[20,7],[1,-28],[-10,-50],[-1,-52],[7,-19],[-15,-22],[1,-40],[19,-17],[36,40],[16,-21],[7,-53],[26,-58],[-4,-13],[14,-27],[14,2],[12,-29],[6,-36],[14,-16],[15,24],[30,-7],[12,19],[41,-7],[28,9],[5,27],[13,3],[25,-45]],[[5840,4406],[-124,0],[-158,0]],[[6499,4978],[1,1],[0,179]],[[6500,5158],[596,0],[110,1]],[[7206,5159],[-8,-35],[-21,-31],[16,-37],[22,-21],[0,-342]],[[9534,4275],[-4,6],[-58,-16],[-36,-3],[-28,-13],[-43,-33]],[[9639,4613],[3,-4],[-10,-35]],[[9567,4981],[16,53],[23,3]],[[7871,3357],[-6,0]],[[8311,3852],[36,1],[12,-14],[12,-42],[31,-8],[14,-24],[17,13],[21,-20],[40,27],[6,-30],[22,-32]],[[8522,3723],[-4,-50],[32,-89],[31,-29]],[[8420,3377],[-5,-4],[-132,7],[-28,-1],[-106,8],[-121,-3],[-22,9],[2,-36],[-130,0]],[[8522,3723],[0,0]],[[8440,4355],[54,-37],[-7,-9],[43,-18],[44,22],[35,2],[30,39],[78,49]],[[8717,4148],[-15,-11],[6,-58],[-24,-98],[0,-27],[-33,-44],[-24,0],[-19,-25],[-13,-37],[5,-26],[-13,-12],[-15,25],[-14,-42],[3,-33],[-15,-32],[-24,-5]],[[8359,3068],[-52,0],[-69,0]],[[9047,3797],[1,9],[-5,9]],[[7868,2153],[-41,14],[-24,23],[-20,-46],[9,-15],[28,-5],[15,22],[23,-2],[-16,-38],[17,-12],[16,37],[12,-30],[-37,-53],[16,-44],[33,-11],[16,-26],[-11,-32],[-22,8],[-11,27],[-30,16],[6,15],[-31,22],[2,-56],[-16,-25],[-5,29],[-20,14],[-14,-32],[-23,-2],[-41,31],[5,38],[-25,8],[-14,42],[-16,-7],[1,22],[-27,-19],[2,-22],[17,6],[19,-13],[-11,-19],[-28,20],[-13,-10],[-38,13],[-49,33],[-24,-1],[-35,-13],[2,54]],[[8294,2308],[14,-54],[247,-29],[6,-39],[12,2],[1,69],[12,16],[39,-20]],[[8625,2253],[5,-2],[5,-77],[14,-108],[30,-127],[38,-114],[-7,-13],[6,-73],[16,-61],[27,-139],[2,-79],[-8,-126],[-19,-77],[-2,-64],[-21,-40],[13,43],[-6,14],[-19,-20],[-13,8],[-22,-12],[-9,20],[3,32],[-13,59],[-32,46],[-10,-3],[-11,92],[-24,2],[4,85],[-15,19],[6,-31],[-15,8],[-33,111],[25,70],[-2,23],[-17,-7],[-4,-34],[-17,20],[4,68],[11,55],[3,8
41],[-16,57],[-21,0],[-18,45],[-18,23],[-26,75],[-32,35],[-34,-14],[3,-25],[-15,3],[-7,-23],[-36,-35],[-36,12],[5,23],[-10,26],[-25,36],[-37,35],[-43,19],[-95,-24],[17,29],[-7,10]],[[8473,3071],[-23,-56],[29,-41],[18,-6],[11,-53],[16,-41],[31,-42],[4,-22],[25,-30],[0,-22],[16,-39],[23,-22],[11,-79],[19,-27],[12,-76],[17,-11]],[[8682,2504],[6,-6],[-47,-87],[5,-51],[-17,-16],[3,-51],[-7,-40]],[[8901,2858],[-35,-47],[-18,-42],[-5,-45],[-17,-30],[-15,3],[-6,-24],[-39,-57],[-31,-25],[-33,5],[23,-20],[-43,-72]],[[7143,5741],[193,-1],[1,72],[32,-14],[11,-93],[11,-15],[34,-15],[33,-2],[12,-23],[25,5],[21,16],[27,-2],[31,-15],[25,-58],[7,14],[25,5],[33,-45],[25,-12],[48,37],[12,-24],[58,2],[19,-20],[32,-2],[-42,-36],[-43,-19],[-45,-42],[-47,-71],[-56,-67]],[[7206,5159],[-5,73],[-18,60],[4,53],[-7,16],[-2,92],[-26,131],[-3,69],[5,22],[-11,66]],[[5369,5741],[330,-1],[801,0]],[[6500,5740],[0,-545],[0,-37]],[[6500,5740],[173,0],[470,1]],[[6028,2370],[-184,0],[-47,28],[-313,195],[10,41]],[[5558,3453],[309,0],[161,-1]],[[1640,235],[2,-3],[2,1],[4,0],[10,-7],[8,-8],[16,-19],[4,-10],[3,-7],[0,-17],[0,-8],[3,0],[4,3],[2,-3],[2,-4],[-1,-9],[2,-5],[1,-4],[5,-9],[5,-4],[2,-3],[1,-4],[0,-6],[-6,-12],[-4,-3],[-6,-11],[-4,-3],[0,-2],[-4,-1],[-2,-5],[-11,-5],[-4,2],[-2,0],[-2,-2],[-5,-6],[-2,-4],[-3,-2],[-4,-5],[-5,-5],[-1,-1],[-4,-7],[-1,-3],[0,-7],[-4,-10],[-2,-8],[-1,-3],[-4,-6],[-1,1],[0,4],[-2,3],[-4,4],[-7,8],[-5,3],[-2,7],[-1,1],[-1,5],[0,8],[1,10],[2,28],[0,4],[-2,5],[-3,19],[-2,6],[0,4],[-1,4],[-1,10],[-2,5],[-1,2],[-2,4],[-3,12],[2,10],[5,8],[1,4],[1,2],[4,3],[3,8],[2,7],[2,5],[2,0],[1,9],[-1,3],[-2,3],[-3,10],[-1,8],[0,13],[1,7],[2,2],[3,0],[9,-4],[2,-9],[4,-3],[2,-2],[2,-4],[2,-2]],[[1553,310],[-1,-3],[-3,0],[-2,0],[-5,-1],[-3,-1],[-2,4],[1,3],[2,3],[6,6],[2,2],[2,0],[3,-5],[-2,-6],[2,-2]],[[1517,349],[-5,-1],[-1,6],[-1,4],[0,8],[0,4],[-2,2],[-4,3],[-1,4],[1,4],[2,2],[4,1],[9,-3],[4,-7],[3,-7],[1,-5],[0,-4],[-2,-6],[-4,-3],[-4,-2]],[[1548,405],[0,-2],[4,-3],[0,-2],[2,-1],[0,-5],[1,-2],[3,-9],[1,0],[1,3],[2,0],[5,1],[3,4],[2,1],[3,0],[5,-2],[2,-2],[0,-2],[3,-5],[2,-4],[1,-2],[2,1],[1,-2],[1,-4],[3,-1],[3,-3],[5,-3],[2,-8],[0,-7],[-2,-6],[-3,-2],[-1,-5],[-3,0],[-5,-5],[-5,0],[-2,0],[-9,-8],[-5,2],[-1,-1],[-4,0],[-3,4],[-1,5],[0,1],[0,4],[0,12],[-1,4],[0,4],[-1,3],[-2,3],[-3,-2],[0,-2],[-1,-1],[-3,4],[-2,0],[-2,3],[-1,0],[-4,7],[-2,7],[-1,4],[0,2],[0,10],[1,4],[1,3],[1,0],[2,5],[2,-1],[2,2],[1,-1]],[[1485,442],[4,-1],[1,0],[1,-2],[2,0],[13,-4],[4,-1],[1,6],[1,0],[1,-3],[1,-4],[5,-2],[4,0],[2,1],[3,1],[2,0],[3,-1],[1,-2],[3,-1],[-2,-6],[-3,-5],[-4,-4],[-3,-3],[-4,-1],[-3,0],[-4,2],[-7,3],[-5,3],[-11,-1],[-3,-1],[-5,0],[-2,2],[-1,2],[0,4],[2,5],[2,1],[1,4],[1,4],[-2,4],[1,0]],[[1425,514],[0,-4],[1,-1],[1,-3],[1,0],[2,-5],[0,-4],[-1,-1],[1,-9],[2,-1],[1,-5],[2,-1],[1,-2],[1,4],[-1,2],[0,2],[1,1],[4,-1],[-2,-3],[0,-6],[2,-2],[1,-4],[0,-2],[1,-5],[4,-5],[1,-1],[-4,-8],[-1,-1],[-1,3],[-1,1],[-4,-1],[-3,-4],[-2,1],[-1,3],[-5,4],[-1,5],[0,2],[-2,-3],[1,-2],[-4,-1],[0,2],[-2,1],[0,6],[3,3],[0,1],[-3,4],[0,-4],[-3,4],[1,-5],[0,-1],[-3,5],[0,-4],[4,-6],[-1,-3],[-1,-1],[-9,-3],[-2,2],[-1,6],[-1,5],[-2,6],[-2,1],[0,6],[-1,2],[-3,4],[-1,4],[0,9],[-1,2],[-4,6],[4,2],[4,0],[7,0],[1,4],[2,2],[2,4],[0,1],[2,6],[3,5],[3,2],[2,-1],[3,-5],[2,-6],[-1,-4],[3,-5]],[[1207,549],[-1,-1],[-2,3],[-1,7],[0,4],[1,4],[4,7],[3,5],[3,4],[2,5],[-1,3],[2,2],[2,0],[1,-2],[1,-3],[-2,-5],[0,-4],[0,-5],[-1,-3],[-3,-3],[-2,-1],[-3,-5],[-1,-3],[-2,-9]],[[1284,634],[1,-1],[2,0],[1,-2],[1,-3],[2,-2],[1,-7],[1,-1],[0,-7],[-1,-3],[-2,-7],[-1,-1],[0,-6],[0,-7],[0,-5],[-2,-1],[1,-3],[-2,-1],[-2,-2],[0,-3],[-4,-5],[-1,-2],[-4,3],[-5,0],[-4,2],[-1,2],[-2,-2],[0,1],[-2,3],[-2,5],[-1,0],[-1,3],[-2,0],[-3,2],[-3,2],[-1,5],[-2,3],[0,9],[1,1],[4,8],[0,5],[2,3],[4,3],[3,3],[2,3],[2,1],[1,2],[4,2],[1,-2],[3,-2],[0,3],[2,1],[4,0],[2,-1],[2,2],[1,-1]],[[1225,9864],[-7,8],[39,31],[64,-6],[89,12],[78,43],[39,47],[112,-24],[1,-23],[-43,-18],[15,-29],[30,5],[36,53],[57,-24],[-3,-31],[49,-9],[20,22],[56,4],[103,-21],[-40,-48],[85,-1],[-23,-21],[76,-1],[121,14],[82,-5],[60,-34],[21,8],[33,-22],[65,-14],[116,3],[57,-35],[65,-2],[51,19],[71,7],[66,-21],[32,-31],[43,-6],[37,-33],[37,2],[2,-1781],[93,-25],[35,27],[51,2],[-8,-52],[46,-35],[9,-26],[93,-98],[18,-62],[55,46],[22,0],[25,84],[82,39],[42,-49],[-6,-24],[65,-70],[16,-40],[34,-20],[46,-62],[108,-232],[19,
4-32],[-6,-31],[22,-14],[6,-39],[21,2],[138,-94],[8,-38],[-13,-30],[17,-87],[-35,-73],[-30,-26],[-22,6],[-13,76],[17,27],[-2,71],[-29,50],[-52,-17],[-20,-74],[-28,49],[19,9],[17,79],[-58,74],[-4,29],[-65,80],[-31,1],[20,44],[-26,31],[-7,41],[-35,53],[5,66],[-21,-39],[-12,8],[9,-11],[-34,10],[-4,14],[23,-7],[-33,22],[-55,167],[-2,-65],[31,-110],[-9,-26],[-30,31],[-43,-1],[6,30],[-23,65],[-10,-24],[-78,62],[3,-35],[39,-7],[48,-64],[-2,-35],[-46,4],[-9,-24],[-94,77],[-57,84],[-86,46],[-62,43],[37,34],[-15,33],[-67,-36],[-103,32],[16,28],[-45,-10],[-101,27],[-106,-21],[-30,30],[-65,29],[17,70],[-26,-29],[-8,-40],[-42,27],[-36,1],[30,43],[-60,-5],[-41,17],[18,14],[-22,27],[-50,-12],[-41,11],[-41,-18],[-2,49],[-25,-93],[19,28],[25,-53],[-24,-34],[-21,-68],[-72,9],[-42,-23],[-9,-43],[-16,10],[-46,-53],[17,51],[-44,-75],[-26,-16],[-42,6],[-38,-18],[-17,28],[50,31],[45,57],[-46,-27],[-38,30],[39,75],[18,67],[-14,34],[33,14],[58,46],[39,-22],[20,11],[67,-16],[-90,52],[8,16],[-43,1],[-9,24],[-59,-60],[-39,-13],[-73,-99],[10,-15],[-35,-32],[5,-22],[-47,-78],[-61,-13],[-2,-33],[-38,-16],[-4,-65],[44,7],[40,-45],[-75,-66],[8,-21],[-33,-25],[-22,-44],[-44,-1],[-33,-56],[-20,14],[-13,-47],[-26,6],[-50,-53],[19,3],[-18,-64],[-25,10],[-35,-50],[-22,18],[-4,-43],[-29,8],[-71,-65],[29,-12],[-44,-59],[-78,-38],[-32,16],[-79,-75],[-22,10],[-35,-31],[-21,6],[11,37],[-22,6],[-33,-91],[-31,-28],[-27,61],[-19,-70],[-24,30],[-26,-54],[-1,54],[74,70],[68,80],[90,22],[8,-21],[51,-10],[-32,29],[20,54],[59,59],[76,50],[28,-14],[-3,49],[34,55],[60,49],[17,170],[41,50],[-3,32],[-100,-52],[-38,39],[9,48],[-42,-57],[13,-48],[-27,-19],[-51,93],[-30,-27],[-29,15],[-13,42],[-45,-41],[-42,-13],[-7,-25],[-78,-2],[44,21],[-8,50],[-23,49],[33,43],[-59,116],[-8,53],[-10,-74],[-104,-37],[-46,6],[-1,33],[-52,55],[-30,9],[-42,41],[73,51],[66,-8],[30,-35],[21,32],[-50,19],[-59,-2],[-53,14],[18,17],[-40,38],[0,-28],[-51,63],[13,23],[-40,15],[39,16],[-29,27],[45,4],[-9,52],[54,76],[24,4],[0,57],[27,57],[42,25],[36,-9],[39,-37],[24,5],[47,43],[30,44],[12,-14],[92,13],[37,47],[-18,95],[-43,35],[60,41],[-36,55],[-24,-31],[-62,-9],[-48,-41],[-50,-18],[-38,29],[-82,1],[-61,-23],[-107,26],[-28,27],[9,33],[-53,48],[39,-3],[38,29],[-119,22],[-64,36],[19,30],[55,30],[22,-5],[29,36],[129,69],[81,28],[74,5],[-17,-76],[23,-25],[141,1],[26,-19],[30,53],[55,-5],[-49,34],[-40,-15],[6,28],[-71,80],[28,11],[31,-36],[-7,-19],[46,-42],[37,17],[40,-31],[49,6],[3,24],[-62,26],[-57,-25],[-36,32],[3,67],[-57,-12],[-116,20],[-12,45],[-33,54],[-122,85],[-47,15],[-56,41],[26,40],[1,59],[54,-3],[125,12],[69,38],[47,52],[-5,50],[16,37],[42,50],[19,-10],[43,53],[17,-16],[81,17],[65,51],[15,-1]],[[1225,9864],[5,-5],[-14,-50],[29,35],[-15,15],[1,4],[-6,1]],[[59,6370],[-24,-7],[19,28],[13,-11],[-8,-10]],[[287,6477],[22,5],[-1,-20],[-11,9],[-10,6]],[[429,6502],[-12,8],[-42,-33],[40,81],[16,-6],[5,41],[36,20],[14,-34],[-41,-29],[-16,-48]],[[696,6724],[-25,-22],[-22,16],[14,20],[33,-14]],[[962,6772],[-3,20],[22,-10],[8,-14],[-27,4]],[[872,6899],[17,-2],[20,-55],[-24,-29],[-48,1],[-26,-34],[-42,-2],[-10,31],[24,16],[14,39],[31,3],[44,32]],[[1277,6898],[3,-7],[-22,8],[11,14],[8,-15]],[[3794,6858],[-8,-29],[-35,76],[9,29],[17,-58],[17,-18]],[[3936,6900],[-8,-41],[-28,31],[9,50],[27,-40]],[[1234,6928],[2,-22],[-33,-33],[24,36],[7,19]],[[1195,6963],[-21,-10],[1,-42],[-26,-2],[-3,42],[49,12]],[[3883,6966],[17,-23],[-11,-28],[-11,42],[5,9]],[[3714,6980],[3,-4],[17,6],[-21,-49],[1,47]],[[3742,7042],[-18,-20],[-15,10],[3,13],[30,-3]],[[3940,7067],[23,-47],[-1,-60],[-21,-38],[-58,53],[15,16],[-2,56],[44,20]],[[3692,7058],[14,32],[37,15],[0,-25],[-51,-22]],[[3820,7114],[37,-16],[-20,-36],[-39,37],[18,45],[4,-30]],[[3805,7161],[-1,-30],[-39,12],[13,21],[27,-3]],[[3850,7145],[21,-30],[-12,-15],[-28,30],[1,42],[18,-27]],[[1747,7193],[-1,-16],[-23,-23],[3,25],[21,14]],[[1788,7183],[6,-9],[-34,2],[5,16],[23,-9]],[[3782,7230],[32,-38],[-23,-19],[-15,3],[6,54]],[[1869,7301],[21,0],[-37,-33],[-5,15],[21,18]],[[3528,7314],[-4,-45],[-21,-3],[12,35],[13,13]],[[3457,7461],[-12,-31],[-9,32],[7,16],[14,-17]],[[1866,7478],[30,-20],[-13,0],[-37,13],[20,7]],[[1906,7514],[13,37
4],[26,-25],[24,9],[14,-30],[-13,-17],[-66,-31],[-35,23],[7,32],[30,2]],[[1935,7551],[-18,13],[28,17],[1,-17],[-11,-13]],[[1148,7583],[-24,-20],[2,29],[35,22],[-13,-31]],[[2369,7855],[-3,-15],[-24,-10],[18,41],[9,-16]],[[2440,7909],[18,-9],[-52,-71],[-41,-27],[20,39],[47,46],[8,22]],[[650,7916],[40,-17],[-4,-45],[17,-26],[-56,-20],[-45,5],[-53,32],[-24,32],[54,4],[7,16],[64,19]],[[2494,7931],[38,-6],[-43,-38],[10,23],[-5,21]],[[2386,7937],[8,-12],[-13,-35],[-11,22],[16,25]],[[44,7916],[-2,-13],[-41,30],[-1,18],[44,-35]],[[2537,7933],[-18,-5],[-1,12],[51,13],[-32,-20]],[[642,6689],[-36,-49],[46,25],[-17,-28],[-112,-71],[-36,-2],[64,32],[13,93],[39,5],[-1,-30],[23,33],[17,-8]],[[3750,6938],[24,70],[-38,-1],[14,49],[-6,53],[-27,4],[-4,31],[42,-3],[10,-53],[30,-11],[61,-137],[13,-94],[-18,-17],[-34,78],[-34,-13],[7,45],[-40,-1]],[[3525,7338],[21,35],[45,-42],[28,-114],[-5,-106],[-49,96],[7,30],[-24,-1],[19,39],[-19,10],[3,30],[-26,23]],[[1900,7449],[-8,-34],[41,37],[13,-32],[-6,-35],[26,2],[-18,-35],[-60,15],[33,-21],[-3,-20],[-45,3],[-51,-58],[-34,-63],[-8,19],[29,70],[-28,-5],[-11,-42],[-28,16],[-1,36],[-23,18],[5,30],[47,47],[21,-8],[11,-44],[7,49],[-11,29],[26,15],[11,-36],[6,53],[37,-27],[-18,33],[40,-12]],[[3507,7412],[24,-58],[-29,-10],[-10,43],[-43,41],[9,29],[48,54],[84,-47],[-1,-41],[-42,-1],[15,-19],[29,10],[8,-53],[-23,-2],[-69,54]],[[3634,7327],[-18,56],[-15,97],[-16,53],[26,-41],[47,-9],[29,-63],[-8,-20],[-24,71],[1,-42],[27,-42],[-1,-59],[-64,-58],[0,42],[16,15]],[[174,8529],[22,-7],[27,22],[33,1],[20,-40],[50,-22],[80,-11],[-10,-26],[-46,4],[-43,-44],[-12,34],[-78,49],[-39,7],[-30,-21],[-28,10],[-10,28],[10,52],[18,-33],[36,-3]],[[3702,7222],[-23,-77],[7,-25],[-29,-30],[-7,56],[23,23],[-25,17],[-9,53],[26,4],[24,-31],[13,12],[-1,7],[-24,50],[22,2],[74,-27],[-1,-63],[-34,44],[25,-57],[-5,-15],[-49,1],[-7,56]]],"bbox":[-173.0093523315348,18.90630573265573,-66.91930887013093,71.31215663572162],"transform":{"scale":[0.010610065352675656,0.005241109201226711],"translate":[-173.0093523315348,18.90630573265573]},"title":"United States of America","version":"2.2.0","copyright":"Copyright (c) 2024 Highsoft AS, Based on data from Natural Earth","copyrightShort":"Natural Earth","copyrightUrl":"http://www.naturalearthdata.com"}
5},{}],3:[function(require,module,exports){
6'use strict';
7
8var ToIntegerOrInfinity = require('es-abstract/2024/ToIntegerOrInfinity');
9var ToLength = require('es-abstract/2024/ToLength');
10var ToObject = require('es-object-atoms/ToObject');
11var SameValueZero = require('es-abstract/2024/SameValueZero');
12var $isNaN = require('es-abstract/helpers/isNaN');
13var $isFinite = require('es-abstract/helpers/isFinite');
14var GetIntrinsic = require('get-intrinsic');
15var callBound = require('call-bind/callBound');
16var isString = require('is-string');
17
18var $charAt = callBound('String.prototype.charAt');
19var $indexOf = GetIntrinsic('%Array.prototype.indexOf%'); // TODO: use callBind.apply without breaking IE 8
20var $max = GetIntrinsic('%Math.max%');
21
22module.exports = function includes(searchElement) {
23	var fromIndex = arguments.length > 1 ? ToIntegerOrInfinity(arguments[1]) : 0;
24	if ($indexOf && !$isNaN(searchElement) && $isFinite(fromIndex) && typeof searchElement !== 'undefined') {
25		return $indexOf.apply(this, arguments) > -1;
26	}
27
28	var O = ToObject(this);
29	var length = ToLength(O.length);
30	if (length === 0) {
31		return false;
32	}
33	var k = fromIndex >= 0 ? fromIndex : $max(0, length + fromIndex);
34	while (k < length) {
35		if (SameValueZero(searchElement, isString(O) ? $charAt(O, k) : O[k])) {
36			return true;
37		}
38		k += 1;
39	}
40	return false;
41};
42
43},{"call-bind/callBound":13,"es-abstract/2024/SameValueZero":40,"es-abstract/2024/ToIntegerOrInfinity":43,"es-abstract/2024/ToLength":44,"es-abstract/helpers/isFinite":63,"es-abstract/helpers/isNaN":65,"es-object-atoms/ToObject":80,"get-intrinsic":101,"is-string":118}],4:[function(require,module,exports){
44'use strict';
45
46var define = require('define-properties');
47var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
48var callBind = require('call-bind');
49var callBound = require('call-bind/callBound');
50
51var implementation = require('./implementation');
52var getPolyfill = require('./polyfill');
53var polyfill = callBind.apply(getPolyfill());
54var shim = require('./shim');
55
56var $slice = callBound('Array.prototype.slice');
57
58/* eslint-disable no-unused-vars */
59var boundShim = function includes(array, searchElement) {
60/* eslint-enable no-unused-vars */
61	RequireObjectCoercible(array);
62	return polyfill(array, $slice(arguments, 1));
63};
64define(boundShim, {
65	getPolyfill: getPolyfill,
66	implementation: implementation,
67	shim: shim
68});
69
70module.exports = boundShim;
71
72},{"./implementation":3,"./polyfill":5,"./shim":6,"call-bind":14,"call-bind/callBound":13,"define-properties":16,"es-object-atoms/RequireObjectCoercible":79}],5:[function(require,module,exports){
73'use strict';
74
75var implementation = require('./implementation');
76
77module.exports = function getPolyfill() {
78	if (
79		Array.prototype.includes
80		&& Array(1).includes(undefined) // https://bugzilla.mozilla.org/show_bug.cgi?id=1767541
81	) {
82		return Array.prototype.includes;
83	}
84	return implementation;
85};
86
87},{"./implementation":3}],6:[function(require,module,exports){
88'use strict';
89
90var define = require('define-properties');
91var getPolyfill = require('./polyfill');
92
93module.exports = function shimArrayPrototypeIncludes() {
94	var polyfill = getPolyfill();
95	define(
96		Array.prototype,
97		{ includes: polyfill },
98		{ includes: function () { return Array.prototype.includes !== polyfill; } }
99	);
100	return polyfill;
101};
102
103},{"./polyfill":5,"define-properties":16}],7:[function(require,module,exports){
104'use strict';
105
106var Call = require('es-abstract/2024/Call');
107var Get = require('es-abstract/2024/Get');
108var HasProperty = require('es-abstract/2024/HasProperty');
109var IsCallable = require('es-abstract/2024/IsCallable');
110var LengthOfArrayLike = require('es-abstract/2024/LengthOfArrayLike');
111var ToObject = require('es-object-atoms/ToObject');
112var ToString = require('es-abstract/2024/ToString');
113
114var callBound = require('call-bind/callBound');
115var isString = require('is-string');
116var $Object = require('es-object-atoms');
117var $TypeError = require('es-errors/type');
118
119// Check failure of by-index access of string characters (IE < 9) and failure of `0 in boxedString` (Rhino)
120var boxedString = $Object('a');
121var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
122
123var strSplit = callBound('%String.prototype.split%');
124
125module.exports = function reduce(callbackfn) {
126	var O = ToObject(this);
127	var self = splitString && isString(O) ? strSplit(O, '') : O;
128	var len = LengthOfArrayLike(self);
129
130	// If no callback function or if callback is not a callable function
131	if (!IsCallable(callbackfn)) {
132		throw new $TypeError('Array.prototype.reduce callback must be a function');
133	}
134
135	if (len === 0 && arguments.length < 2) {
136		throw new $TypeError('reduce of empty array with no initial value');
137	}
138
139	var k = 0;
140
141	var accumulator;
142	var Pk, kPresent;
143	if (arguments.length > 1) {
144		accumulator = arguments[1];
145	} else {
146		kPresent = false;
147		while (!kPresent && k < len) {
148			Pk = ToString(k);
149			kPresent = HasProperty(O, Pk);
150			if (kPresent) {
151				accumulator = Get(O, Pk);
152			}
153			k += 1;
154		}
155		if (!kPresent) {
156			throw new $TypeError('reduce of empty array with no initial value');
157		}
158	}
159
160	while (k < len) {
161		Pk = ToString(k);
162		kPresent = HasProperty(O, Pk);
163		if (kPresent) {
164			var kValue = Get(O, Pk);
165			accumulator = Call(callbackfn, void undefined, [accumulator, kValue, k, O]);
166		}
167		k += 1;
168	}
169
170	return accumulator;
171};
172
173},{"call-bind/callBound":13,"es-abstract/2024/Call":24,"es-abstract/2024/Get":27,"es-abstract/2024/HasProperty":28,"es-abstract/2024/IsCallable":31,"es-abstract/2024/LengthOfArrayLike":36,"es-abstract/2024/ToString":48,"es-errors/type":77,"es-object-atoms":81,"es-object-atoms/ToObject":80,"is-string":118}],8:[function(require,module,exports){
174'use strict';
175
176var define = require('define-properties');
177var RequireObjectCoercible = require('es-abstract/2024/RequireObjectCoercible');
178var callBind = require('call-bind');
179var callBound = require('call-bind/callBound');
180
181var implementation = require('./implementation');
182
183var getPolyfill = require('./polyfill');
184var polyfill = callBind.apply(getPolyfill());
185
186var shim = require('./shim');
187
188var $slice = callBound('%Array.prototype.slice%');
189
190// eslint-disable-next-line no-unused-vars
191var boundShim = function reduce(array, callbackfn) {
192	RequireObjectCoercible(array);
193	return polyfill(array, $slice(arguments, 1));
194};
195define(boundShim, {
196	getPolyfill: getPolyfill,
197	implementation: implementation,
198	shim: shim
199});
200
201module.exports = boundShim;
202
203},{"./implementation":7,"./polyfill":9,"./shim":10,"call-bind":14,"call-bind/callBound":13,"define-properties":16,"es-abstract/2024/RequireObjectCoercible":38}],9:[function(require,module,exports){
204'use strict';
205
206var arrayMethodBoxesProperly = require('es-array-method-boxes-properly');
207
208var implementation = require('./implementation');
209
210module.exports = function getPolyfill() {
211	var method = Array.prototype.reduce;
212	return arrayMethodBoxesProperly(method) ? method : implementation;
213};
214
215},{"./implementation":7,"es-array-method-boxes-properly":70}],10:[function(require,module,exports){
216'use strict';
217
218var define = require('define-properties');
219var getPolyfill = require('./polyfill');
220
221module.exports = function shimArrayPrototypeReduce() {
222	var polyfill = getPolyfill();
223	define(
224		Array.prototype,
225		{ reduce: polyfill },
226		{ reduce: function () { return Array.prototype.reduce !== polyfill; } }
227	);
228	return polyfill;
229};
230
231},{"./polyfill":9,"define-properties":16}],11:[function(require,module,exports){
232/*
233 * JavaScript Canvas to Blob
234 * https://github.com/blueimp/JavaScript-Canvas-to-Blob
235 *
236 * Copyright 2012, Sebastian Tschan
237 * https://blueimp.net
238 *
239 * Licensed under the MIT license:
240 * https://opensource.org/licenses/MIT
241 *
242 * Based on stackoverflow user Stoive's code snippet:
243 * http://stackoverflow.com/q/4998908
244 */
245
246/* global define, Uint8Array, ArrayBuffer, module */
247
248;(function (window) {
249  'use strict'
250
251  var CanvasPrototype =
252    window.HTMLCanvasElement && window.HTMLCanvasElement.prototype
253  var hasBlobConstructor =
254    window.Blob &&
255    (function () {
256      try {
257        return Boolean(new Blob())
258      } catch (e) {
259        return false
260      }
261    })()
262  var hasArrayBufferViewSupport =
263    hasBlobConstructor &&
264    window.Uint8Array &&
265    (function () {
266      try {
267        return new Blob([new Uint8Array(100)]).size === 100
268      } catch (e) {
269        return false
270      }
271    })()
272  var BlobBuilder =
273    window.BlobBuilder ||
274    window.WebKitBlobBuilder ||
275    window.MozBlobBuilder ||
276    window.MSBlobBuilder
277  var dataURIPattern = /^data:((.*?)(;charset=.*?)?)(;base64)?,/
278  var dataURLtoBlob =
279    (hasBlobConstructor || BlobBuilder) &&
280    window.atob &&
281    window.ArrayBuffer &&
282    window.Uint8Array &&
283    function (dataURI) {
284      var matches,
285        mediaType,
286        isBase64,
287        dataString,
288        byteString,
289        arrayBuffer,
290        intArray,
291        i,
292        bb
293      // Parse the dataURI components as per RFC 2397
294      matches = dataURI.match(dataURIPattern)
295      if (!matches) {
296        throw new Error('invalid data URI')
297      }
298      // Default to text/plain;charset=US-ASCII
299      mediaType = matches[2]
300        ? matches[1]
301        : 'text/plain' + (matches[3] || ';charset=US-ASCII')
302      isBase64 = !!matches[4]
303      dataString = dataURI.slice(matches[0].length)
304      if (isBase64) {
305        // Convert base64 to raw binary data held in a string:
306        byteString = atob(dataString)
307      } else {
308        // Convert base64/URLEncoded data component to raw binary:
309        byteString = decodeURIComponent(dataString)
310      }
311      // Write the bytes of the string to an ArrayBuffer:
312      arrayBuffer = new ArrayBuffer(byteString.length)
313      intArray = new Uint8Array(arrayBuffer)
314      for (i = 0; i < byteString.length; i += 1) {
315        intArray[i] = byteString.charCodeAt(i)
316      }
317      // Write the ArrayBuffer (or ArrayBufferView) to a blob:
318      if (hasBlobConstructor) {
319        return new Blob([hasArrayBufferViewSupport ? intArray : arrayBuffer], {
320          type: mediaType
321        })
322      }
323      bb = new BlobBuilder()
324      bb.append(arrayBuffer)
325      return bb.getBlob(mediaType)
326    }
327  if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) {
328    if (CanvasPrototype.mozGetAsFile) {
329      CanvasPrototype.toBlob = function (callback, type, quality) {
330        var self = this
331        setTimeout(function () {
332          if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) {
333            callback(dataURLtoBlob(self.toDataURL(type, quality)))
334          } else {
335            callback(self.mozGetAsFile('blob', type))
336          }
337        })
338      }
339    } else if (CanvasPrototype.toDataURL && dataURLtoBlob) {
340      if (CanvasPrototype.msToBlob) {
341        CanvasPrototype.toBlob = function (callback, type, quality) {
342          var self = this
343          setTimeout(function () {
344            if (
345              ((type && type !== 'image/png') || quality) &&
346              CanvasPrototype.toDataURL &&
347              dataURLtoBlob
348            ) {
349              callback(dataURLtoBlob(self.toDataURL(type, quality)))
350            } else {
351              callback(self.msToBlob(type))
352            }
353          })
354        }
355      } else {
356        CanvasPrototype.toBlob = function (callback, type, quality) {
357          var self = this
358          setTimeout(function () {
359            callback(dataURLtoBlob(self.toDataURL(type, quality)))
360          })
361        }
362      }
363    }
364  }
365  if (typeof define === 'function' && define.amd) {
366    define(function () {
367      return dataURLtoBlob
368    })
369  } else if (typeof module === 'object' && module.exports) {
370    module.exports = dataURLtoBlob
371  } else {
372    window.dataURLtoBlob = dataURLtoBlob
373  }
374})(window)
375
376},{}],12:[function(require,module,exports){
377
378},{}],13:[function(require,module,exports){
379'use strict';
380
381var GetIntrinsic = require('get-intrinsic');
382
383var callBind = require('./');
384
385var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
386
387module.exports = function callBoundIntrinsic(name, allowMissing) {
388	var intrinsic = GetIntrinsic(name, !!allowMissing);
389	if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {
390		return callBind(intrinsic);
391	}
392	return intrinsic;
393};
394
395},{"./":14,"get-intrinsic":101}],14:[function(require,module,exports){
396'use strict';
397
398var bind = require('function-bind');
399var GetIntrinsic = require('get-intrinsic');
400var setFunctionLength = require('set-function-length');
401
402var $TypeError = require('es-errors/type');
403var $apply = GetIntrinsic('%Function.prototype.apply%');
404var $call = GetIntrinsic('%Function.prototype.call%');
405var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
406
407var $defineProperty = require('es-define-property');
408var $max = GetIntrinsic('%Math.max%');
409
410module.exports = function callBind(originalFunction) {
411	if (typeof originalFunction !== 'function') {
412		throw new $TypeError('a function is required');
413	}
414	var func = $reflectApply(bind, $call, arguments);
415	return setFunctionLength(
416		func,
417		1 + $max(0, originalFunction.length - (arguments.length - 1)),
418		true
419	);
420};
421
422var applyBind = function applyBind() {
423	return $reflectApply(bind, $apply, arguments);
424};
425
426if ($defineProperty) {
427	$defineProperty(module.exports, 'apply', { value: applyBind });
428} else {
429	module.exports.apply = applyBind;
430}
431
432},{"es-define-property":71,"es-errors/type":77,"function-bind":100,"get-intrinsic":101,"set-function-length":142}],15:[function(require,module,exports){
433'use strict';
434
435var $defineProperty = require('es-define-property');
436
437var $SyntaxError = require('es-errors/syntax');
438var $TypeError = require('es-errors/type');
439
440var gopd = require('gopd');
441
442/** @type {import('.')} */
443module.exports = function defineDataProperty(
444	obj,
445	property,
446	value
447) {
448	if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
449		throw new $TypeError('`obj` must be an object or a function`');
450	}
451	if (typeof property !== 'string' && typeof property !== 'symbol') {
452		throw new $TypeError('`property` must be a string or a symbol`');
453	}
454	if (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {
455		throw new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');
456	}
457	if (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {
458		throw new $TypeError('`nonWritable`, if provided, must be a boolean or null');
459	}
460	if (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {
461		throw new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');
462	}
463	if (arguments.length > 6 && typeof arguments[6] !== 'boolean') {
464		throw new $TypeError('`loose`, if provided, must be a boolean');
465	}
466
467	var nonEnumerable = arguments.length > 3 ? arguments[3] : null;
468	var nonWritable = arguments.length > 4 ? arguments[4] : null;
469	var nonConfigurable = arguments.length > 5 ? arguments[5] : null;
470	var loose = arguments.length > 6 ? arguments[6] : false;
471
472	/* @type {false | TypedPropertyDescriptor<unknown>} */
473	var desc = !!gopd && gopd(obj, property);
474
475	if ($defineProperty) {
476		$defineProperty(obj, property, {
477			configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,
478			enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,
479			value: value,
480			writable: nonWritable === null && desc ? desc.writable : !nonWritable
481		});
482	} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {
483		// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable
484		obj[property] = value; // eslint-disable-line no-param-reassign
485	} else {
486		throw new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');
487	}
488};
489
490},{"es-define-property":71,"es-errors/syntax":76,"es-errors/type":77,"gopd":102}],16:[function(require,module,exports){
491'use strict';
492
493var keys = require('object-keys');
494var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
495
496var toStr = Object.prototype.toString;
497var concat = Array.prototype.concat;
498var defineDataProperty = require('define-data-property');
499
500var isFunction = function (fn) {
501	return typeof fn === 'function' && toStr.call(fn) === '[object Function]';
502};
503
504var supportsDescriptors = require('has-property-descriptors')();
505
506var defineProperty = function (object, name, value, predicate) {
507	if (name in object) {
508		if (predicate === true) {
509			if (object[name] === value) {
510				return;
511			}
512		} else if (!isFunction(predicate) || !predicate()) {
513			return;
514		}
515	}
516
517	if (supportsDescriptors) {
518		defineDataProperty(object, name, value, true);
519	} else {
520		defineDataProperty(object, name, value);
521	}
522};
523
524var defineProperties = function (object, map) {
525	var predicates = arguments.length > 2 ? arguments[2] : {};
526	var props = keys(map);
527	if (hasSymbols) {
528		props = concat.call(props, Object.getOwnPropertySymbols(map));
529	}
530	for (var i = 0; i < props.length; i += 1) {
531		defineProperty(object, props[i], map[props[i]], predicates[props[i]]);
532	}
533};
534
535defineProperties.supportsDescriptors = !!supportsDescriptors;
536
537module.exports = defineProperties;
538
539},{"define-data-property":15,"has-property-descriptors":103,"object-keys":123}],17:[function(require,module,exports){
540var e;e=function(e){function O(e){this.series&&((o=Array.isArray(e.yAxis)?e.yAxis:[e.yAxis]).forEac
540h(function(e){e.yType=null}),this.series.forEach(function(e){var t;e.baseSeries||(t=void 0!==e.options.yAxis?e.options.yAxis:0,o[t].yType=null==o[t].yType||e.options.yType==o[t].yType?e.options.yType:I.yTypes.mixed)})),e.minXType=r.call(this,n),e.maxXType=r.call(this,s);var o,t=z(e.xAxis);switch(t[0].minRange=void 0!==t[0].minRange?t[0].minRange:I.xMinRanges[e.minXType],e.minXType){case I.xTypes.annual:t[0].minTickInterval=31536e6;break;case I.xTypes.monthly:t[0].minTickInterval=24192e5;break;case I.xTypes.weekly:t[0].minTickInterval=6048e5;break;case I.xTypes.daily:t[0].minTickInterval=864e5;break;case I.xTypes.quarterly:t[0].minTickInterval=7776e6;break;case I.xTypes.hourly:t[0].minTickInterval=36e5;break;default:t[0].minTickInterval=null}}function i(e){for(var t,o,i,r,a,s,n,l,p,h,d,c,g="datetime"==z(this.options.xAxis)[0].type,y=!1,u=!1,x=!0,m=t=o=i=!0,f=r=a=s=null,b=!0,v=e.xData||e.data,C=e.yData||e.data,T=0;T<v.length;T++){x=!1,g&&(k=(c=new Date(void 0!==v[T]&&void 0!==v[T].x?v[T].x:v[T])).getUTCMonth(),l=c.getUTCDate(),p=c.getUTCDay(),h=c.getUTCHours(),c=c.getHours(),null!==f&&null!==r&&null!==a&&null!==s&&(m&=k==f,o&=p==a,i&=h==s||c==n,t&=l==r)&&i&&!m&&((k-f)%3==0?b&=!0:b=!1),f=k,r=l,a=p,s=h,n=c);var k=C[T]&&void 0!==C[T].y?C[T].y:C[T];y|=k<0,u|=0<k}return{xType:d=x?d:g?m&&t&&i?I.xTypes.annual:t&&i&&b?I.xTypes.quarterly:t&&i?I.xTypes.monthly:o&&i?I.xTypes.weekly:i?I.xTypes.daily:I.xTypes.hourly:I.xTypes.category,yType:y&&u||"value"==e.options.compare||"percent"==e.options.compare?I.yTypes.mixed:y?I.yTypes.negative:I.yTypes.positive}}function r(e){for(var t,o,i=0;i<this.series.length;i++)o=this.series[i].options.xType,t=isNaN(t)?o:e(t,o);return t}function a(){var e=!!this.options.chart.lineUpYAxisZeros&&function(){var e,t,o,i,r=!1,a=[],s=!0,n=!0,l=void 0,p={},h=this.yAxis;if(this.axisZerosAligned++,1<h.length){for(i=0;i<this.yAxis.length;i++)o=h[i],o=o.getExtremes(),a[i]={min:e=Math.abs(o.min),max:o=Math.abs(o.max),axisLength:t=o+e,positiveRatio:Math.abs(o)/t,negativeRatio:Math.abs(e)/t};for(i=0;i<a.length;i++){var d=a[i].positiveRatio,c=a[i].negativeRatio,g=Math.abs(d-c);!isNaN(d)&&!isNaN(c)&&(s&=1==d,n&=1==c,void 0===l||g<l)&&(l=g,p={positiveRatio:d,negativeRatio:c})}for(1!=l||s||n||(p={positiveRatio:.5,negativeRatio:.5}),i=0;i<this.yAxis.length;i++)a[i].positiveRatio==p.positiveRatio||isNaN(a[i].min)||isNaN(a[i].max)||(r=!0,p.positiveRatio<a[i].positiveRatio?h[i].setExtremes(a[i].max*p.negativeRatio/p.positiveRatio*-1,a[i].max,!1):h[i].setExtremes(-1*a[i].min,a[i].min*p.positiveRatio/p.negativeRatio,!1))}r&&y.apply(this);return this.axisZerosAligned--,r}.apply(this);l&&(l=!1,e||y.apply(this))}function y(){for(var e=this,t=Array.isArray(e.yAxis)?e.yAxis:[e.yAxis],o=0;o<t.length;o++)t[o].isDirty=!0;for(o=0;o<e.series.length;o++)e.series[o].isDirty=!0;null!==e.redraw?e.redraw(!1):e.detachedredraw(!1)}function p(){if(this.logoElement&&Array.isArray(this.logoElement))for(var e=this.logoElement.length-1;0<=e;e--)this.logoElement[e].destroy(),this.logoElement.pop();switch(this.options.chart.logo){case I.logos.eia:!function(){var e,t,o={eia_logo1:I.eiaColors.yellow,eia_logo2:I.eiaColors.green,eia_logo3:I.eiaColors.blue,eia_logo4:I.eiaColors.darkGrey,eia_logo5:I.eiaColors.darkGrey,eia_logo6:"white"},i={eia_logo3:function(e,t,o){return["M",e+41.61*o,t+8.68*o,"C",e+34.49*o,t+4.67*o,e+23.03*o,t+5.18*o,e+1.84*o,t+17.02*o,"C",e+.68*o,t+17.67*o,e+.67*o,t+17.31*o,e+.95*o,t+16.97*o,"C",e+2.42*o,t+15.22*o,e+21.34*o,t+-.32*o,e+38.13*o,t+1.15*o,"C",e+43.03*o,t+1.58*o,e+51.75*o,t+4.42*o,e+53.2*o,t+13.88*o,"C",e+54.65*o,t+23.32*o,e+50.36*o,t+28.88*o,e+49.07*o,t+29.18*o,"C",e+50.78*o,t+22.6*o,e+49.67*o,t+13.22*o,e+41.61*o,t+8.68*o,"Z"]},eia_logo4:function(e,t,o){return["M",e+20.43*o,t+17.17*o,"C",e+20.43*o,t+19.1946*o,e+22.6217*o,t+20.4599*o,e+24.375*o,t+19.4476*o,"C",e+25.1887*o,t+18.9778*o,e+25.69*o,t+18.1096*o,e+25.69*o,t+17.17*o,"C",e+25.69*o,t+15.1454*o,e+23.4983*o,t+13.8801*o,e+21.745*o,t+14.8924*o,"C",e+20.9313*o,t+15.3622*o,e+20.43*o,t+16.2304*o,e+20.43*o,t+17.17*o]},eia_logo5:function(e,t,o){return["M",e+17.69*o,t+29.88*o,"C",e+17.75*o,t+24.43*o,e+14.74*o,t+20.56*o,e+9.3*o,t+20.58*o,"C",e+3.97*o,t+20.52*o,e+.73*o,t+24.64*o,e+.81*o,t+29.89*o,"C",e+.81*o,t+32.7*o,e+1.61*o,t+34.96*o,e+3.2*o,t+36.66*o,"C",e+5.2*o,t+38.96*o,e+9.01*o,t+39.67*o,e+12.07*o,t+38.9*o,"C",e+14.28*o,t+38.37*o,e+16.01*o,t+36.87*o,e+17.27*o,t+34.96*o,"L",e+13.8*o,t+33.05*o,"C",e+11.22*o,t+37.35*o,e+5.28*o,t+35.86*o,e+5.05*o,t+30.83*o,"H",e+17.67*o,"L",e+17.69*o,t+29.87*o,"Z","M",e+5.32*o,t+27.51*o,"C",e+6.28*o,t+23.27*o,e+12.61*o,t+23.07*o,e+13.5*o,t+27.51*o,"H",e+5.31*o,"Z","M",e+21.02*o,t+22.35*o,"V",t+39.04*o,"H",e+25.1*o,"V",t+22.35*o,"H",e+21.02*o,"Z","M",e+44.23*o,t+28.13*o,"C",e+44.25*o,t+21.79*o,e+40.9*o,t+20.58*o,e+38.04*o,t+20.37*o,"C",e+33.32*o,t+20.02*o,e+29.84*o,t+22.91*o,e+29.84*o,t+22.91*o,"L",e+32.43*o,t+25.56*o,"C",e+35.19*o,t+23.35*o,e+39.85*o,t+23.81*o,e+40.22*o,t+26.69*o,"C",e+40.22*o,t+26.69*o,e+36.14*o,t+27.61*o,e+35.24*o,t+27.77*o,"C",e+32.4*o,t+28.37*o,e+30.54*o,t+28.62*o,e+29.05*o,t+30.72*o,"C",e+27.76*o,t+32.7
5405*o,e+28.1*o,t+35.86*o,e+30*o,t+37.54*o,"C",e+32.63*o,t+39.87*o,e+38.07*o,t+39.87*o,e+40.8*o,t+36.72*o,"C",e+40.8*o,t+36.72*o,e+41.14*o,t+38.49*o,e+41.38*o,t+39.04*o,"H",e+45.49*o,"C",e+43.76*o,t+35.07*o,e+44.22*o,t+30.81*o,e+44.23*o,t+28.13*o,"Z","M",e+40.22*o,t+30.98*o,"C",e+39.99*o,t+32.84*o,e+38.74*o,t+35.09*o,e+35.33*o,t+35.53*o,"C",e+33.23*o,t+35.8*o,e+31.23*o,t+34.43*o,e+32.28*o,t+32.5*o,"C",e+32.61*o,t+31.9*o,e+33.36*o,t+31.43*o,e+34.34*o,t+31.29*o,"C",e+34.94*o,t+31.2*o,e+35.61*o,t+31.13*o,e+36.31*o,t+31.01*o,"C",e+37.85*o,t+30.76*o,e+39.34*o,t+30.47*o,e+40.22*o,t+30.13*o,"C",e+40.22*o,t+30.13*o,e+40.25*o,t+30.76*o,e+40.22*o,t+30.98*o,"Z"]},eia_logo6:function(e,t,o){return["M",e+5.32*o,t+27.51*o,"C",e+6.28*o,t+23.27*o,e+12.61*o,t+23.07*o,e+13.5*o,t+27.51*o,"H",e+5.31*o,"Z","M",e+40.22*o,t+30.98*o,"C",e+39.99*o,t+32.84*o,e+38.74*o,t+35.09*o,e+35.33*o,t+35.53*o,"C",e+33.23*o,t+35.8*o,e+31.23*o,t+34.43*o,e+32.28*o,t+32.5*o,"C",e+32.61*o,t+31.9*o,e+33.36*o,t+31.43*o,e+34.34*o,t+31.29*o,"C",e+34.94*o,t+31.2*o,e+35.61*o,t+31.13*o,e+36.31*o,t+31.01*o,"C",e+37.85*o,t+30.76*o,e+39.34*o,t+30.47*o,e+40.22*o,t+30.13*o,"C",e+40.22*o,t+30.13*o,e+40.25*o,t+30.76*o,e+40.22*o,t+30.98*o,"Z"]}};Array.isArray(this.logoElement)||(this.logoElement=[]);for(e in i)i.hasOwnProperty(e)&&(this.renderer.symbols[e]=i[e],t=this.renderer.symbol(e,0,0,u).attr({stroke:"none",fill:o[e],class:"highcharts-eia-logo"}).add().align({verticalAlign:"bottom",align:"left",y:-(x+m),x:m}),this.logoElement.push(t))}.call(this);break;case I.logos.reuters:!function(){Array.isArray(this.logoElement)||(this.logoElement=[]);this.logoElement.push(this.renderer.image(f,0,0,v,b).align({verticalAlign:"bottom",align:"left",y:-(b+C),x:C}).add())}.call(this);break;case I.logos.bloomberg:!function(){return!1}.call(this);break;case I.logos.none:}}function h(e,t){var o="",i=new Date(t);switch(e){case I.xTypes.annual:o=i.getUTCFullYear().toString();break;case I.xTypes.monthly:o=i.getUTCFullYear().toString()+(i.getUTCMonth()+1<10?"0":"")+(i.getUTCMonth()+1).toString();break;case I.xTypes.weekly:case I.xTypes.daily:o=i.getUTCFullYear().toString()+(i.getUTCMonth()+1<10?"0":"")+(i.getUTCMonth()+1).toString()+(i.getUTCDate()<10?"0":"")+i.getUTCDate().toString();break;case I.xTypes.quarterly:o=i.getUTCFullYear().toString()+"Q"+Math.ceil((i.getUTCMonth()+1)/3).toString();break;case I.xTypes.hourly:o=i.getUTCFullYear().toString()+(i.getUTCMonth()+1<10?"0":"")+(i.getUTCMonth()+1).toString()+(i.getUTCDate()<10?"0":"")+i.getUTCDate().toString()+"T"+(i.getUTCHours()<10?"0":"")+i.getUTCHours()+"Z"}return o}var I,t,o,z,d,s,n,c,g,l,u,x,m,f,b,v,C;e=(I=e).Chart,I.StockChart,t=I.extend,I.Axis,I.pick,I.PREFIX,I.Tick,(o=Math).round,o.floor,o.ceil,o.max,o.min,o.abs,o.cos,o.sin,o.PI,z=I.splat||function(e){return e=Array.isArray(e)?e:[e]},d=I.merge,s=Math.max,n=Math.min,Math.pow,Math.abs,document,window,o=null!=navigator.userAgent.match(/MSIE/),t(I,{eia_theme_version:"1.1.3",logos:{none:0,eia:1,reuters:2,bloomberg:3},eia_projections_line:{color:"#888",dashStyle:"Dash",width:1,zIndex:3},eia_projections_label:{color:"#888",fontWeight:"bold"},eia_zero_axis_line:{color:"#333",dashStyle:"Solid",zIndex:1,width:1,value:0}}),t(I,{eiaColors:{extraLightGreen:"#d7e5cc",lightGreen:"#a6c68e",green:"#5d9732",darkGreen:"#416a23",extraLightBlue:"#bfe5f5",lightBlue:"#73c5e9",blue:"#0096d7",darkBlue:"#006997",extraLightBrown:"#efdcca",lightBrown:"#dbb28a",brown:"#bd732a",darkBrown:"#84511d",extraLightYellow:"#fff1c0",lightYellow:"#ffe381",yellow:"#ffc702",darkYellow:"#cc9900",extraLightRed:"#e8cccf",lightRed:"#cc8f96",red:"#a33340",darkRed:"#72242d",extraLightPurple:"#e5e2eb",lightPurple:"#c2bbd0",purple:"#7d6d9b",darkPurple:"#49366e",extraLightOrange:"#ffe2d2",lightOrange:"#ffb084",orange:"#ff6f1f",darkOrange:"#b34e16",extraLightGrey:"#e0e0e0",lightGrey:"#adadad",grey:"#707070",darkGrey:"#333333"},eia_blue:"#0096d7",eia_tan:"#bd732a",eia_green:"#5D9732",eia_yellow:"#ffc702",eia_red:"#a33340",eia_brown:"#bd732a",eia_lt_blue:"#73c5e9",eia_lt_green:"#a6c68e",eia_dk_red:"#72242d",eia_grey:"#707070",eia_dk_blue:"#006997",eia_dk_green:"#416a23",eia_dk_grey:"#333333",eia_mut_purple:"#746395",eia_mut_red:"#b55c66",eia_mut_blue:"#66a0b9",eia_mut_brown:"#a27d33",eia_mut_green:"#92a753",eia_mut_blue_sub_sh1:"#99c0d0",eia_mut_blue_sub_sh2:"#66a0b9",eia_mut_blue_sub_sh3:"#3380a2",eia_mut_blue_sub_sh4:"#003953"}),t(I,{eiaColorPalettes:{default:[I.eiaColors.blue,I.eiaColors.brown,I.eiaColors.green,I.eiaColors.purple,I.eiaColors.orange,I.eiaColors.yellow,I.eiaColors.red,I.eiaColors.grey,I.eiaColors.lightBlue,I.eiaColors.lightBrown,I.eiaColors.lightGreen,I.eiaColors.lightPurple,I.eiaColors.lightOrange,I.eiaColors.lightYellow,I.eiaColors.lightRed,I.eiaColors.lightGrey,I.eiaColors.extraLightBlue,I.eiaColors.extraLightBrown,I.eiaColors.extraLightGreen,I.eiaColors.extraLightPurple,I.eiaColors.extraLightOrange,I.eiaColors.extraLightYellow,I.eiaColors.extraLightRed,I.eiaColors.extraLightGrey,I.eiaColors.darkBlue,I.eiaColors.darkBrown,I.eiaColors.darkGreen,I.eiaColors.darkPurple,I.eiaColors.darkOrange,I.eiaColors.darkYellow,I.eiaColors.darkRed,I.eiaColors.darkGrey],green:[I.eiaColors.green,I.eiaColors.lightGreen,I.eiaColors.extraLightGreen,I.eiaColors.darkGreen],blue:[I.eiaColors.blue,I.eiaColors.lightBlue,I.eiaColors.extraLightBlue,I.eiaColors.darkBlue],brown:[I.eiaColors.brown,I.eiaColors.lightBrown,I.eiaColors.extraLightBrown,I.eiaColors.darkBrown],yellow:[I.eiaColors.yellow,I.eiaColors.lightYellow,I.eiaColors.extraLightYellow,I.eiaColors.darkYellow],red:[I.eiaColors.red,I.eiaColors.lightRed,I.eiaColors.extraLightRed,I.eiaColors.darkRed],purple:[I.eiaColors.purple,I.eiaColors.lightPurple,I.eiaColors.extraLightPurple,I.eiaColors.darkPurple],orange:[I.eiaColors.orange,I.eiaColors.lightOrange,I.eiaColors.extraLightOrange,I.eiaColors.darkOrange],grey:[I.eiaColors.grey,I.eiaColors.lightGrey,I.eiaColors.extraLightGrey,I.eiaColors.darkGrey]}}
540),t(I,{eiaTheme:{chart:{animation:!o,plotBackgroundColor:"rgba(255, 255, 255, .1)",spacingBottom:20,logo:I.logos.eia,events:{redraw:function(){!function(){var e,t,o;for(o=0;o<this.series.length;o++)(e=this.series[o]).options.hasOwnProperty("xType")||(t=i.call(this,e),e.options.xType=t.xType,t.yType===I.yTypes.mixed&&(t=e.yAxis.getExtremes(),e.yAxis.setExtremes(t.min||null,t.max,!1)));a.apply(this)}.apply(this,arguments)},load:function(){!function(){this.options.originalSeriesOptions||(this.options.originalSeriesOptions=this.series.map(function(e){return d({color:e.color},e.options)}));a.apply(this)}.apply(this,arguments)}},style:{fontFamily:"Arial, Verdana, Helvetica, sans-serif"},lineUpYAxisZeros:!1,borderColor:"#ffffff",breakLines:!0},colors:I.eiaColorPalettes.default,title:{align:"left",margin:35,style:{color:"#333",fontSize:"16px",fontWeight:"bold",fontFamily:"Arial, Verdana, Helvetica, sans-serif",wordWrap:"break-word"}},subtitle:{style:{color:"#333",fontSize:"12px",fontFamily:"Arial, Verdana, Helvetica, sans-serif"},align:"left",floating:!1},credits:{style:{color:"#888",fontSize:"11px"},text:"Data source: U.S. Energy Information Administration",href:"http://www.eia.gov",position:{align:"left",verticalAlign:"bottom",x:42,y:-5}},labels:{style:{fontSize:"12px",color:"#333"}},xAxis:{labels:{style:{fontSize:"12px",color:"#333"}},endOnTick:!1,startOnTick:!1,tickColor:"#333",lineColor:"#333",title:{style:{color:"#888",fontWeight:"bold",fontSize:"12px",fontFamily:"Arial, Verdana, Helvetica, sans-serif"}},dateTimeLabelFormats:{day:"%e %b. %Y",week:"%e %b. %Y",month:"%b '%y",year:"%Y"}},yAxis:{labels:{style:{fontSize:"12px",color:"#333",fontFamily:"Arial, Verdana, Helvetica, sans-serif"}},lineColor:"#A0A0A0",minorTickInterval:null,tickColor:"#A0A0A0",tickWidth:0,title:{align:"above",style:{color:"#888",fontWeight:"bold",fontSize:"12px"}}},tooltip:{backgroundColor:"rgba(255, 255, 255, 0.75)",style:{fontSize:"12px",color:"#333333",padding:5},formatter:function(){return I.universalTooltipFormatter.apply(this,arguments)}},plotOptions:{series:{animation:!o,tooltip:{showName:!0}},line:{shadow:0,lineWidth:2,borderWidth:0,dataLabels:{color:"#333"},marker:{enabled:!1,states:{hover:{enabled:!0,radius:5}}}},area:{borderWidth:0,shadow:!1,lineWidth:0,marker:{enabled:!1,states:{hover:{enabled:!0,radius:4}}}},spline:{marker:{lineColor:"#333"}},column:{borderWidth:0,borderRadius:0,shadow:!1,lineWidth:0},bar:{borderRadius:0,shadow:!1},pie:{allowPointSelect:!0,borderRadius:0,shadow:!1,dataLabels:{style:{fontSize:"12px",color:"red"}}},scatter:{marker:{radius:3,symbol:"circle",states:{hover:{enabled:!0,lineColor:"rgb(100,100,100)"}}},states:{hover:{marker:{radius:3,enabled:!0}}}}},legend:{floating:!1,borderWidth:1,borderColor:"#e4e4e4",backgroundColor:"#f1f1f1",borderRadius:0,symbolPadding:5,itemMarginTop:0,itemMarginBottom:0,itemStyle:{fontWeight:"bold",fontSize:"12px",textDecoration:"none"},itemHoverStyle:{color:"#189bd7",textDecoration:"underline"},itemHiddenStyle:{color:"#CCC"}},lang:{exportButtonTitle:"Export an image or data"},exporting:{menuItemDefinitions:{downloadPDF:{onclick:function(){var e={url:"//wwwdev.eia.gov/global/scripts/jquery/highcharts/exporting-server/index.php",width:this.chartWidth,type:"application/pdf"};"function"==typeof this.exportChartLocal?this.exportChartLocal(e):this.exportChart(e)},text:"Download PDF"},downloadImage:{onclick:function(){var e={url:"//wwwdev.eia.gov/global/scripts/jquery/highcharts/exporting-server/index.php",width:this.chartWidth,type:"image/png"};"function"==typeof this.exportChartLocal?this.exportChartLocal(e):this.exportChart(e)},text:"Download image"}
540,downloadData:{onclick:function(){this.generateCSV()},text:"Download data"}},buttons:{contextButton:{menuItems:["printChart","separator","downloadImage","downloadPDF","downloadData"]}},csv:{dateFormat:null},combineLinkedSeriesInExport:!0},time:{useUTC:!0}},yTypes:{mixed:0,positive:1,negative:-1},xTypes:{category:0,annual:1,quarterly:2,monthly:3,weekly:4,daily:5,hourly:6},csvXLabels:["Category","Year","Quarter","Month","Week of","Day"],tooltipXLabels:["","Year","Quarter","Month","Week of","Day"],xMinRanges:[0,126144e6,31536e6,107136e5,24192e5,6048e5,864e5],parseXValue:function(e,t,o,i){var r,a,s;if(""!==i&&null!=i)r=I.dateFormat(i,t);else switch(e){case I.xTypes.annual:r=I.dateFormat("%Y",t);break;case I.xTypes.monthly:r=I.dateFormat("%b %Y",t);break;case I.xTypes.weekly:case I.xTypes.daily:r=I.dateFormat("%m/%e/%Y",t);break;case I.xTypes.quarterly:a=I.dateFormat("%m",t),s=I.dateFormat("%Y",t),r="Q"+Math.ceil(a/3)+" "+s;break;case I.xTypes.hourly:r=I.dateFormat("%m/%e/%Y %HH",t)+(void 0!==o?" "+o:"");break;default:r=t}return r},universalTooltipFormatter:function(){var e="";if(null!=this.point){var t=this.series,o=this.series.chart,i=t.options.tooltip,r=o.options,a=((c="pie"==r.chart.type)||r.xAxis.type,t.name),r=t.options.xType,s=!c&&(t.xAxis.options.categoryTitle||t.xAxis.options.title.text||I.tooltipXLabels[r])||"",n=!c&&t.yAxis.options.title.text||"";g=c?(p=this.point.name,l=s,this.y):(p=a,l=(0<s.length?s+" : ":"")+I.parseXValue(r,this.point.options&&void 0!==this.point.options.tooltipX?this.point.options.tooltipX:this.x,o.userOptions.timezone),this.series.userOptions&&this.series.userOptions.projection&&0<this.series.data.indexOf(this.point)&&(l+=" (Projected)"),null!=t.options.compare?I.numberFormat(this.point.change,i.precision||void 0)+" "+n:I.numberFormat(this.y,i.precision||void 0)+" "+n),e=(t.legendLine?'<span style="font-size:18pt;color:'+this.point.color+'">– </span>':'<span style="font-size:18pt;color:'+this.point.color+'">● </span>')+(t.options.tooltip.showName?"<b>"+p+"</b><br/>":"")+l+(""!=l?"<br/>":"")+g}else{var l,p,h,d,c,g="",y=this.points,r=((c="pie"==(o=y[0].series.chart).options.chart.type)||o.options.xAxis.type,o.options.maxXType),s=I.tooltipXLabels[r];if(c)for(h=0;h<y.length;h++)p=(d=y[h]).point.name,g=I.numberFormat(d.y,void 0),e+=(d.series.legendLine?'<span style="font-size:18pt;color:'+d.color+'">– </span>':'<span style="font-size:18pt;color:'+d.color+'">● </span>')+"<b>"+p+"</b> "+g,h<y.length&&(e+="</br>");else for(e+=(l="<b>"+(void 0!==s&&""!=s?s+" : ":"")+I.parseXValue(r,this.x,o.userOptions.timezone)+"</b>")+"<br/>",h=0;h<y.length;h++)d=y[h],i=(t=y[h].series).options.tooltip,p=a=t.name,n=t.yAxis.options.title.text||"",g=I.numberFormat(d.y,i.precision||void 0)+" "+n,e+=(t.legendLine?'<span style="font-size:18pt;color:'+d.color+'">– </span>':'<span style="font-size:18pt;color:'+d.color+'">● </span>')+"<b>"+p+"</b> "+g,h<y.length&&(e+="<br/>")}return e},numberFormat:function(e,t,o,i){var r,a;return null==e||""===e||isNaN(e)||Math.abs(e)===1/0?"":(r=I.getOptions().lang,e=e,t=isNaN(t=Math.abs(t))?Math.min(e.toString().match(/\d+\.?(\d*)/)[1].length,20):t,o=void 0===o?r.decimalPoint:o,r=void 0===i?r.thousandsSep:i,(e<0?"-":"")+((a=3<(i=String(parseInt(e=Math.abs(+e||0).toFixed(t)))).length?i.length%3:0)?i.substr(0,a)+r:"")+i.substr(a).replace(/(\d{3})(?=\d)/g,"$1"+r)+(t?o+Math.abs(e-i).toFixed(t).slice(2):""))}}),I.setOptions(d(!1,I.eiaTheme,{exporting:{csvOptions:{overrideURL:null,postURL:"//wwwdev.eia.gov/global/scripts/jquery/highcharts/exporting-server/csv_exporter.php"}}})),t(e.prototype,{resetZoom:function(){this.xAxis.forEach(function(e){e.setExtremes(null,null,!1)})},resetSeries:function(e){var t,o=this;for(o.removeAllSeries(e=void 0===e?!0:e),t=0;t<o.options.originalSeriesOptions.length;t++)o.addSeries(o.options.originalSeriesOptions[t],!1);e&&o.redraw()},removeAllSeries:function(e){var t,o=this,i=[];for(void 0===e&&(e=!0),t=0;t<o.series.length;t++)o.scroller&&o.scroller.series===o.series[t]||i.push(o.series[t]);for(t=0;t<i.length;t++)i[t].remove(!1);o.scroller&&o.scroller.series&&(o.scroller.series=null),e&&o.redraw()},generateCSV:function(){function e(e){if(!S.hasOwnProperty(e)){if(k){for(o=w.length-1;
5400<=o&&!(e<w[o]);o--);w.splice(o+1,0,e)}else w.push(e);S[e]=1}}var t,o,i,r,a,s,n,l,p,h,d,c,g,y,u,x,m,f,b=this,v=b.options.exporting.csvOptions.overrideURL,R=/,/g,Y=/\n/g,C=/<[\/\w\s]+>/g,T=z(b.options.xAxis)[0],B=!0,k=!1,w=[],A={},_={},S={},L=!1,M=!1,H=this.cleanTitleForCSVExport();if(v)return window.location=v;try{k="datetime"==T.type}catch(e){}try{void 0!==T.title.text&&0<T.title.text.length&&(s=T.title.text)}catch(e){}for(F=0;F<b.series.length;F++)if(a=b.series[F],b.options.navigator){if(!(b.options.navigator.enabled&&"Navigator"==a.name||!1===a.visible||null!=a.linkedParent&&b.options.exporting.combineLinkedSeriesInExport)){var O,U=A[O=a.name+(a.yAxis&&a.yAxis.axisTitle?" "+a.yAxis.axisTitle.textStr:"")]={};if("pie"==a.type)for(t=0;t<a.points.length;t++)U[i=(r=a.points[t]).name]=I.numberFormat(r.y,a.options.tooltip.precision||void 0,".",""),e(i);else{E=a.points;if(b.options.exporting.combineLinkedSeriesInExport)for(var D=0;D<a.linkedSeries.length;D++)E=E.concat(a.linkedSeries[D].points);else if(null!=a.linkedParent){for(var P=[],F=0;F<a.linkedParent.points.length;F++)a.linkedParent.points[F].y&&P.push(a.linkedParent.points[F].y);P[P.length-1]===E[0].y&&E.splice(0,1)}for(t=0;t<E.length;t++)U[i="string"==typeof(i=void 0!==(r=E[t]).category?r.category:r.x)?'"'+i.replace(C," ")+'"':i]=I.numberFormat(a.options.compare?r.change:r.y,a.options.tooltip.precision||void 0,".",""),e(i)}}}else if("range"==a.options.type||"arearange"==a.options.type){for(m=a.name+" Low "+(a.yAxis&&a.yAxis.axisTitle?" "+a.yAxis.axisTitle.textStr:""),f=a.name+" High "+(a.yAxis&&a.yAxis.axisTitle?" "+a.yAxis.axisTitle.textStr:""),u=A[m]={},x=A[f]={},_[m]={sourceKey:a.options.sourceKey,sourceLink:a.options.sourceLink},_[f]={sourceKey:a.options.sourceKey,sourceLink:a.options.sourceLink},L|=void 0!==_[m].sourceLink,M|=void 0!==_[m].sourceKey,t=0;t<a.data.length;t++)if(!1!==a.data[t].export&&(u[i=void 0!==(r=a.data[t]).category?r.category:r.name]=I.numberFormat(a.options.compare?r.change:r.low,a.options.tooltip.precision||void 0,".",""),x[i]=I.numberFormat(a.options.compare?r.change:r.high,a.options.tooltip.precision||void 0,".",""),!S.hasOwnProperty(i))){if(k){for(o=w.length-1;0<=o&&!(i<w[o]);o--);w.splice(o+1,0,i)}else w.push(i);S[i]=1}}else if(null==a.linkedParent){U=A[O=a.name+(a.yAxis&&a.yAxis.axisTitle?" "+a.yAxis.axisTitle.textStr:"")]={},_[O]={sourceKey:a.options.sourceKey,sourceLink:a.options.sourceLink},L|=void 0!==_[O].sourceLink,M|=void 0!==_[O].sourceKey;var E=a.data;for(D=0;D<a.linkedSeries.length;D++)E=E.concat(a.linkedSeries[D].data);for(t=0;t<E.length;t++)if(!1!==E[t].export&&(U[i=void 0!==(r=E[t]).category?r.category:r.name]=I.numberFormat(a.options.compare?r.change:r.y,a.options.tooltip.precision||void 0,".",""),!S.hasOwnProperty(i))){if(k){for(o=w.length-1;0<=o&&!(i<w[o]);o--);w.splice(o+1,0,i)}else w.push(i);S[i]=1}}for(g=b.options.maxXType,void 0===s&&(s=I.csvXLabels[g]||I.csvXLabels[I.xTypes.category]),p=(p=[[H]]).concat(this.generateCSVHeaders()),L&&p.push(l=["Series Link"]),M&&p.push(y=["Series Key"]),p.push(h=[s]),c=p.length,F=0;F<w.length;F++){for(o in t=w[F],d=p[F+c]=[I.parseXValue(g,t,b.userOptions.timezone,b.options.exporting.csv.dateFormat)],A)A.hasOwnProperty(o)&&(U=A[o],n=_[o],B&&(h.push(o.replace(R,"").replace(Y," ").replace(C," ")),L&&l.push(void 0!==n.sourceLink?n.sourceLink:""),M)&&y.push(void 0!==n.sourceKey?n.sourceKey:""),U.hasOwnProperty(t)?null==U[t]?d.push("--"):d.push(U[t]):d.push(""));B=!1}this.postCSVData(p,H.replace(/\s+/g,"_"))},cleanTitleForCSVExport:function(){var e=this,t="chartData",o=/[\?%\*:\|"\<\>\\,]/g,i=/\//g,r=/\s+/g,a=/<[\/\w]+>/gi;try{void 0!==e.options.title.text&&0<e.options.title.text.length&&(t=e.options.title.text.replace(a," ").replace(o,"").replace(i," per ").replace(r," ")),void 0!==e.options.subtitle.text&&0<e.options.subtitle.text.length&&(t+=" ("+e.options.subtitle.text.replace(a," ").replace(o,"").replace(i," per ").replace(r," ")+")")}catch(e){}return t},generateCSVHeaders:function(){var e=[];return e.push([window.location.href.toString()]),e.push([(new Date).toTimeString()]),e.push([this.options.credits.text]),e},postCSVData:function(e,t){var o=this.options.exporting.csvOptions.postURL,i=document.createElement("input");i.setAttribute("type","hidden"),i.setAttribute("name","csvArr"),i.setAttribute("value",JSON.stringify(e)),(e=document.createElement("input")).setAttribute("type","hidden"),e.setAttribute("name","fileName"),e.setAttribute("value",t),jQuery('<form style="display:none;" action="'+o+'" method="post"></form>').append(i).append(e).appendTo("body").submit().remove()}}),c=I.eiaTheme.yAxis,g=I.eiaTheme.xAxis,I.setOptions(I.eiaTheme),u=.6,x=23,f="/global/images/logos/Thomson_Reuters_logo.png",b=30,v=135,C=m=5,e.prototype.callbacks.push(p),I.Chart.prototype.openAPIEmbed=function(){window.open("/opendata/embed.php?"+this.getEmbedParams())},I.Chart.prototype.getEmbedOptions=function(){var e=this.options;return void 0!==e.exporting&&void 0!==e.exporting.embedOptions?e.exporting.embedOptions:null},I.Chart.prototype.setEmbedOptions=function(e){var t=this.options;void 0!==t.exporting?void 0!==t.exporting.embedOptions?d(t.exporting.embedOptions,e):t.exporting.embedOptions=e:t.exporting={embedOptions:e}},I.Chart.prototype.getEmbedParams=function(){var e,t,o,i,r,a,s,n=this,l=this.options.exporting.embedOptions,p=["type=chart"];for(e in l)l.hasOwnProperty(e)&&"start"!=e&&"end"!=e&&"date_mode"!=e&&p.push(e+"="+l[e]);return"datetime"==this.xAxis[0].options.type&&(t=this.xAxis[0].dataMin,o=this.xAxis[0].dataMax,i=this.xAxis[0].min,r=this.xAxis[0].max,a=Math.max(n.xAxis[0].min,n.xAxis[0].dataMin),s=Math.min(n.xAxis[0].max,n.xAxis[0].dataMax),t<i&&o<=r?(p.push("date_mode=periods"),p.push("start="+h(n.options.minXType,a)),p.push("end="+h(n.options.minXType,s))):t<i&&r<o?(p.push("date_mode=range"),p.push("start="+h(n.options.minXType,a)),p.push("end="+h(n.options.minXType,s))):l.hasOwnProperty("date_mode")?(p.push("date_mode="+l.date_mode),"range"!=l.date_mode&&"start"!=l.date_mode||(l.hasOwnProperty("start")?p.push("start="+l.start):p.push("start="+h(n.options.minXType,a))),"range"==l.date_mode&&(l.hasOwnProperty("end")?p.push("end="+l.end):p.push("end="+h(n.options.minXType,s))),"periods"==l.date_mode&&l.hasOwnProperty("periods")&&p.push("periods="+l.periods)):p.push("date_mode=all")),p.join("&")},I.wrap(I.Chart.prototype,"init",function(e,t,o){var i=t,r=t||{},t=(null!=i.chart&&null!=i.chart.type&&i.chart.type,this.axisZerosAligned=0,I.getOptions());if(void 0!==i.exporting&&void 0!==i.exporting.embedOptions){i.exporting=d(!1,t.exp
540orting,i.exporting);for(var a=i.exporting.buttons.contextButton.menuItems,s=!1,n={text:"Embed Chart",onclick:function(){this.openAPIEmbed()}},l=0;l<a.length;l++)if(null==a[l]){a[l]=n,s=!0;break}s||a.push(n)}return i.xAxis=z(i.xAxis||{}).map(function(e){return d(!1,d(!1,g,e),r.xAxis||{})}),i.yAxis=z(i.yAxis||{}).map(function(e){return d(!1,d(!1,c,e),r.yAxis||{})}),e.call(this,i,o)}),I.wrap(I.Series.prototype,"remove",function(e,t,o){var i=this.chart,r=i.options;if(this.linkedSeries)for(var a=this.linkedSeries.length-1;0<=a;a--)this.linkedSeries[a].remove();for(var e=e.call(this,t,o),s=(O.call(i,r),-1/0),a=0;a<i.series.length;a++)i.scroller&&i.series[a]===i.scroller.series||(s=Math.max(s,i.options.colors.indexOf(i.series[a].color)));return function(){if(this.options.chart&&this.options.chart.lineUpYAxisZeros)for(var e=0;e<this.yAxis.length;e++){var t=this.yAxis[e];null==t.userMin&&null==t.userMax||t.setExtremes(null,null,!1)}}.call(i),e}),I.wrap(I.Chart.prototype,"getSVG",function(e,t){return e.call(this,t).replace(/></g,">\r\n<")}),I.wrap(I.Axis.prototype,"init",function(e,t,o,i){return o.isX||void 0!==i&&"yAxis"!==i||void 0!==this.coll&&"yAxis"!==this.coll||t.options.chart&&"map"===t.options.chart.type||(o.softMin=void 0===o.softMin?0:o.softMin,o.softMax=void 0===o.softMax?0:o.softMax),e.call(this,t,o,i)}),I.wrap(I.Axis.prototype,"addTitle",function(e,t){var o,i=e.call(this,t);return null!==this.options.title.text&&("above"===this.options.title.align||"above"===this.options.title.originalAlign)&&!0!==this.horiz&&(o=this.axisTitle.element.getBBox(),void 0!==(o="above"===this.options.title.align?{originalAlign:"above",reserveSpace:!1,align:"high",rotation:0,x:this.options.opposite?-1*o.width:o.width,y:-15,offset:0}:{x:this.options.opposite?-1*o.width:o.width}).align&&o.align!==this.options.title.align||void 0!==o.reserveSpace&&o.reserveSpace!==this.options.title.reserveSpace||void 0!==o.x&&o.x!==this.options.title.x||void 0!==o.y&&o.y!==this.options.title.y||void 0!==o.rotation&&o.rotation!==this.options.title.rotation)&&(d(!0,this.options.title,o),this.axisTitle.destroy(),delete this.axisTitle,i=e.call(this,t)),i}),I.wrap(I.Axis.prototype,"setTitle",function(e,t,o){return e.call(this,t,o)}),I.wrap(I.Series.prototype,"setData",function(e,t,o,i,r){t=e.call(this,t,o,i,r);if("heatmap"!==this.type&&"mapline"!==this.type){for(var a,s,n,l,p,h,d,c,g,y,u,x,m=this,f=m.chart,b="datetime"==z(f.options.xAxis)[0].type,v=!1,C=!1,T=!0,k=a=s=n=!0,w=l=p=h=null,A=!0,_=m.xData||m.data,S=m.yData||m.data,L=0;L<_.length;L++){T=!1,b&&(M=(x=new Date(void 0!==_[L]&&void 0!==_[L].x?_[L].x:_[L])).getUTCMonth(),c=x.getUTCDate(),g=x.getUTCDay(),y=x.getUTCHours(),x=x.getHours(),null!==w&&null!==l&&null!==p&&null!==h&&(k&=M==w,s&=g==p,n&=y==h||x==d,a&=c==l)&&n&&!k&&((M-w)%3==0?A&=!0:A=!1),w=M,l=c,p=g,h=y,d=x);var M=S[L]&&void 0!==S[L].y?S[L].y:S[L];v|=M<0,C|=0<M}T||(u=b?k&&a&&n?I.xTypes.annual:a&&n&&A?I.xTypes.quarterly:a&&n?I.xTypes.monthly:s&&n?I.xTypes.weekly:n?I.xTypes.daily:I.xTypes.hourly:I.xTypes.category),m.options.xType=u,m.options.yType=v&&C||"value"==m.options.compare||"percent"==m.options.compare?I.yTypes.mixed:v?I.yTypes.negative:I.yTypes.positive,O.call(this.chart,this.chart.options),1<=this.options.xType&&this.chart.options.chart.breakLines&&(!function(e){var t=0,o=0,i=0,r=0;switch(e.xType){case I.xTypes.hourly:r=1;break;case I.xTypes.daily:o=1;break;case I.xTypes.weekly:o=7;break;case I.xTypes.monthly:t=1;break;case I.xTypes.quarterly:t=3;break;case I.xTypes.annual:i=1;break;default:return}var a=void 0,s=void 0,n=void 0,l=void 0,p=!1;if(Array.isArray(e.data))for(var h=0;h<e.data.length;h++){var d,c,g,y,u,x,m,f,b,n=new Date(Array.isArray(e.data[h])?e.data[h][0]:e.data[h].x),v=Array.isArray(e.data[h])?e.data[h][1]:e.data[h].y;void 0!==a&&(d=n.getUTCHours(),f=n.getUTCMonth(),b=n.getUTCDate(),m=n.getUTCFullYear(),c=a.getUTCHours(),g=a.getUTCMonth(),y=a.getUTCDate(),u=a.getUTCFullYear(),x=n.getTimezoneOffset()/60-a.getTimezoneOffset()/60,m=Date.UTC(m,f,b,d),f=Date.UTC(u+i,g+t,y+o,c+r),b=Date.UTC(u+i,g+t,y+o,c+r+x),f!==m)&&(e.xType>=I.xTypes.hourly||0!=x&&b!==m)&&null!==s&&null!==v&&(null==l&&(e.data[h-1]={marker:{enabled:!0,lineWidth:1},y:Array.isArray(e.data[h-1])?e.data[h-1][1]:e.data[h-1].y,x:Array.isArray(e.data[h-1])?e.data[h-1][0]:e.data[h-1].x},p|=!0),e.data.splice(h++,0,{x:f,y:null,export:!1}),a=null),l=a,a=n,s=v}a&&!l&&null!==s&&(e.data[e.data.length-1]={marker:{enabled:!0,lineWidth:1},y:Array.isArray(e.data[e.data.length-1])?e.data[e.data.length-1][1]:e.data[e.data.length-1].y,x:Array.isArray(e.data[e.data.length-1])?e.data[e.data.length-1][0]:e.data[e.data.length-1].x},p|=!0),p&&(e.turboThreshold=0)}(this.options),t=e.call(this,this.options.data,o,i,r))}return t}),I.wrap(I.Chart.prototype,"update",function(e,t,o,i,r){e=e.call(this,t,o,i,!1),t.chart&&void 0!==t.chart.spacingBottom&&(this.legend.update({},!0),this.redraw()),o=this.options;if(null!=o.chart&&null!=o.chart.type&&o.chart.type,void 0!==o.exporting&&void 0!==o.exporting.embedOptions){for(var a=o.exporting.buttons.contextButton.menuItems,s=!1,n={text:"Embed Chart",onclick:function(){this.openAPIEmbed()}},l=0;l<a.length;l++)if(null==a[l]){a[l]=n,s=!0;break}s||a.push(n)}return p.call(this),e})},"object"==typeof module&&module.exports?module.exports=e:"function"==typeof define&&define.amd?define(function(){return e}
540):e(Highcharts);
541
542},{}],18:[function(require,module,exports){
543module.exports={
544    "title": "United States of America, small",
545    "version": "1.1.2",
546    "type": "FeatureCollection",
547    "copyright": "Copyright (c) 2015 Highsoft AS, Based on data from Natural Earth",
548    "copyrightShort": "Natural Earth",
549    "copyrightUrl": "http://www.naturalearthdata.com",
550    "crs": {
551        "type": "name",
552        "properties": {
553            "name": "urn:ogc:def:crs:EPSG:102004"
554        }
555    },
556    "hc-transform": {
557        "default": {
558            "crs": "+proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs",
559            "scale": 0.000151481324748,
560            "jsonres": 15.5,
561            "jsonmarginX": -999,
562            "jsonmarginY": 9851,
563            "xoffset": -2361356.09818,
564            "yoffset": 1398996.77886
565        },
566        "us-all-hawaii": {
567            "xpan": 190,
568            "ypan": 417,
569            "hitZone": {
570                "type": "Polygon",
571                "coordinates": [
572                    [
573                        [
574                            1747,
575                            3920
576                        ],
577                        [
578                            3651,
579                            2950
580                        ],
581                        [
582                            3651,
583                            -999
584                        ],
585                        [
586                            1747,
587                            -999
588                        ],
589                        [
590                            1747,
591                            3920
592                        ]
593                    ]
594                ]
595            },
596            "crs": "+proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs",
597            "scale": 0.000123090941806,
598            "jsonres": 15.5,
599            "jsonmarginX": -999,
600            "jsonmarginY": 9851,
601            "xoffset": -338610.47557,
602            "yoffset": 1022754.31736
603        },
604        "us-all-alaska": {
605            "rotation": -0.0174532925199,
606            "xpan": 5,
607            "ypan": 357,
608            "hitZone": {
609                "type": "Polygon",
610                "coordinates": [
611                    [
612                        [
613                            -999,
614                            5188
615                        ],
616                        [
617                            -707,
618                            5188
619                        ],
620                        [
621                            1747,
622                            3920
623                        ],
624                        [
625                            1747,
626                            -999
627                        ],
628                        [
629                            -999,
630                            -999
631                        ],
632                        [
633                            -999,
634                            5188
635                        ]
636                    ]
637                ]
638            },
639            "crs": "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
640            "scale": 0.0000584397059179,
641            "jsonres": 15.5,
642            "jsonmarginX": -999,
643            "jsonmarginY": 9851,
644            "xoffset": -1566154.00853,
645            "yoffset": 1992671.14918
646        }
647    },
648    "features": [
649        {
650            "type": "Feature",
651            "id": "US.MA",
652            "properties": {
653                "hc-group": "admin1",
654                "hc-middle-x": 0.75,
655                "hc-middle-y": 0.76,
656                "hc-key": "us-ma",
657                "hc-a2": "MA",
658                "labelrank": "0",
659                "hasc": "US.MA",
660                "woe-id": "2347580",
661                "state-fips": "25",
662                "fips": "US25",
663                "postal-code": "MA",
664                "name": "Massachusetts",
665                "country": "United States of America",
666                "region": "Northeast",
667                "longitude": "-71.99930000000001",
668                "woe-name": "Massachusetts",
669                "latitude": "42.3739",
670                "woe-label": "Massachusetts, US, United States",
671                "type": "State"
672            },
673            "geometry": {
674                "type": "MultiPolygon",
675                "coordinates": [
676                    [
677                        [
678                            [
679                                9727,
680                                7650
681                            ],
682                            [
683                                10595,
684                                7650
685                            ],
686                            [
687                                10595,
688                                7123
689                            ],
690                            [
691                                9727,
692                                7123
693                            ],
694                            [
695                                9727,
696                                7650
697                            ]
698                        ]
699                    ],
700                    [
701                        [
702                            [
703                                9430,
704                                7889
705                            ],
706                            [
707                                9476,
708                                7878
709                            ],
710                            [
711                                9436,
712                                7864
713                            ],
714                            [
715                                9417,
716                                7844
717                            ],
718                            [
719                                9430,
720                                7889
721                            ]
722                        ]
723                    ],
724                    [
725                        [
726                            [
727                                9314,
728                                7915
729                            ],
730                            [
731                                9312,
732                                7927
733                            ],
734                            [
735                                9304,
736                                7921
737                            ],
738                            [
739                                9278,
740                                7938
741                            ],
742                            [
743                                9254,
744                                7990
745                            ],
746                            [
747                                9177,
748                                7968
749                            ],
750                            [
751                                8997,
752                                7925
753                            ],
754                            [
755                                8860,
756                                7896
757                            ],
758                            [
759                                8853,
760                                7901
761                            ],
762                            [
763                                8856,
764                                8080
765                            ],
766                            [
767                                8922,
768                                8096
769                            ],
770                            [
771                                9005,
772                                8115
773                            ],
774                            [
775                                9005,
776                                8115
777                            ],
778                            [
779                                9222,
780                                8166
781                            ],
782                            [
783                                9242,
784                                8201
785                            ],
786                            [
787                                9300,
788                                8236
789                            ],
790                            [
791                                9318,
792                                8197
793                            ],
794                            [
795                                9357,
796                                8186
797                            ],
798                            [
799                                9312,
800                                8147
801                            ],
802                            [
803                                9299,
804                                8081
805                            ],
806                            [
807                                9324,
808                                8091
809                            ],
810                            [
811                                9365,
812                                8074
813                            ],
814                            [
815                                9428,
816                                7985
817                            ],
818                            [
819                                9483,
820                                7974
821                            ],
822                            [
823                                9525,
824                                8007
825                            ],
826                            [
827                                9501,
828                                8067
829                            ],
830                            [
831                                9535,
832                                8028
833                            ],
834                            [
835                                9549,
836                                7982
837                            ],
838                            [
839                                9504,
840                                7965
841                            ],
842                            [
843                                9420,
844                                7906
845                            ],
846                            [
847                                9411,
848                                7955
849                            ],
850                            [
851                                9371,
852                                7921
853                            ],
854                            [
855                                9373,
856                                7898
857                            ],
858                            [
859                                9339,
860                                7878
861                            ],
862                            [
863                                9327,
864                                7915
865                            ],
866                            [
867                                9314,
868                                7915
869                            ]
870                        ]
871                    ]
872                ]
873            }
874        },
875        {
876            "type": "Feature",
877            "id": "US.WA",
878            "properties": {
879                "hc-group": "admin1",
880                "hc-middle-x": 0.56,
881                "hc-middle-y": 0.52,
882                "hc-key": "us-wa",
883                "hc-a2": "WA",
884                "labelrank": "0",
885                "hasc": "US.WA",
886                "woe-id": "2347606",
887                "state-fips": "53",
888                "fips": "US53",
889                "postal-code": "WA",
890                "name": "Washington",
891                "country": "United States of America",
892                "region": "West",
893                "longitude": "-120.361",
894                "woe-name": "Washington",
895                "latitude": "47.4865",
896                "woe-label": "Washington, US, United States",
897                "type": "State"
898            },
899            "geometry": {
900                "type": "MultiPolygon",
901                "coordinates": [
902                    [
903                        [
904                            [
905                                -77,
906                                9797
907                            ],
908                            [
909                                -56,
910                                9768
911                            ],
912                            [
913                                -91,
914                                9757
915                            ],
916                            [
917                                -86,
918                                9712
919                            ],
920                            [
921                                -136,
922                                9751
923                            ],
924                            [
925                                -111,
926                                9756
927                            ],
928                            [
929                                -77,
930                                9797
931                            ]
932                        ]
933                    ],
934                    [
935                        [
936                            [
937                                -52,
938                                9689
939                            ],
940                            [
941                                -85,
942                                9658
943                            ],
944                            [
945                                -66,
946                                9645
947                            ],
948                            [
949                                -43,
950                                9568
951                            ],
952                            [
953                                -77,
954                                9588
955                            ],
956                            [
957                                -74,
958                                9635
959                            ],
960                            [
961                                -89,
962                                9664
963                            ],
964                            [
965                                -52,
966                                9690
967                            ],
968                            [
969                                -60,
970                                9697
971                            ],
972                            [
973                                -61,
974                                9737
975                            ],
976                            [
977                                -31,
978                                9701
979                            ],
980                            [
981                                -12,
982                                9731
983                            ],
984                            [
985                                -9,
986                                9774
987                            ],
988                            [
989                                -33,
990                                9788
991                            ],
992                            [
993                                -46,
994                                9839
995                            ],
996                            [
997                                -32,
998                                9851
999                            ],
1000                            [
1001                                926,
1002                                9593
1003                            ],
1004                            [
1005                                767,
1006                                8925
1007                            ],
1008                            [
1009                                779,
1010                                8870
1011                            ],
1012                            [
1013                                774,
1014                                8822
1015                            ],
1016                            [
1017                                398,
1018                                8914
1019                            ],
1020                            [
1021                                378,
1022                                8905
1023                            ],
1024                            [
1025                                289,
1026                                8922
1027                            ],
1028                            [
1029                                163,
1030                                8905
1031                            ],
1032                            [
1033                                94,
1034                                8923
1035                            ],
1036                            [
1037                                38,
1038                                8914
1039                            ],
1040                            [
1041                                -10,
1042                                8925
1043                            ],
1044                            [
1045                                -22,
1046                                8950
1047                            ],
1048                            [
1049                                -113,
1050                                8979
1051                            ],
1052                            [
1053                                -207,
1054                                8965
1055                            ],
1056                            [
1057                                -283,
1058                                9014
1059                            ],
1060                            [
1061                                -271,
1062                                9096
1063                            ],
1064                            [
1065                                -280,
1066                                9134
1067                            ],
1068                            [
1069                                -321,
1070                                9167
1071                            ],
1072                            [
1073                                -357,
1074                                9171
1075                            ],
1076                            [
1077                                -365,
1078                                9207
1079                            ],
1080                            [
1081                                -400,
1082                                9226
1083                            ],
1084                            [
1085                                -436,
1086                                9219
1087                            ],
1088                            [
1089                                -460,
1090                                9259
1091                            ],
1092                            [
1093                                -436,
1094                                9333
1095                            ],
1096                            [
1097                                -441,
1098                                9279
1099                            ],
1100                            [
1101                                -416,
1102                                9297
1103                            ],
1104                            [
1105                                -401,
1106                                9347
1107                            ],
1108                            [
1109                                -434,
1110                                9357
1111                            ],
1112                            [
1113                                -429,
1114                                9395
1115                            ],
1116                            [
1117                                -369,
1118                                9396
1119                            ],
1120                            [
1121                                -424,
1122                                9436
1123                            ],
1124                            [
1125                                -424,
1126                                9523
1127                            ],
1128                            [
1129                                -410,
1130                                9624
1131                            ],
1132                            [
1133                                -433,
1134                                9678
1135                            ],
1136                            [
1137                                -428,
1138                                9749
1139                            ],
1140                            [
1141                                -385,
1142                                9790
1143                            ],
1144                            [
1145                                -313,
1146                                9713
1147                            ],
1148                            [
1149                                -183,
1150                                9655
1151                            ],
1152                            [
1153                                -161,
1154                                9666
1155                            ],
1156                            [
1157                                -146,
1158                                9623
1159                            ],
1160                            [
1161                                -100,
1162                                9637
1163                            ],
1164                            [
1165                                -95,
1166                                9567
1167                            ],
1168                            [
1169                                -135,
1170                                9518
1171                            ],
1172                            [
1173                                -77,
1174                                9566
1175                            ],
1176                            [
1177                                -112,
1178                                9491
1179                            ],
1180                            [
1181                                -89,
1182                                9426
1183                            ],
1184                            [
1185                                -154,
1186                                9433
1187                            ],
1188                            [
1189                                -175,
1190                                9394
1191                            ],
1192                            [
1193                                -167,
1194                                9449
1195                            ],
1196                            [
1197                                -222,
1198                                9394
1199                            ],
1200                            [
1201                                -157,
1202                                9376
1203                            ],
1204                            [
1205                                -124,
1206                                9418
1207                            ],
1208                            [
1209                                -82,
1210                                9426
1211                            ],
1212                            [
1213                                -82,
1214                                9476
1215                            ],
1216                            [
1217                                -66,
1218                                9527
1219                            ],
1220                            [
1221                                -18,
1222                                9570
1223                            ],
1224                            [
1225                                -37,
1226                                9644
1227                            ],
1228                            [
1229                                -24,
1230                                9661
1231                            ],
1232                            [
1233                                -52,
1234                                9689
1235                            ]
1236                        ]
1237                    ]
1238                ]
1239            }
1240        },
1241        {
1242            "type": "Feature",
1243            "id": "US.CA",
1244            "properties": {
1245                "hc-group": "admin1",
1246                "hc-middle-x": 0.51,
1247                "hc-middle-y": 0.67,
1248                "hc-key": "us-ca",
1249                "hc-a2": "CA",
1250                "labelrank": "0",
1251                "hasc": "US.CA",
1252                "woe-id": "2347563",
1253                "state-fips": "6",
1254                "fips": "US06",
1255                "postal-code": "CA",
1256                "name": "California",
1257                "country": "United States of America",
1258                "region": "West",
1259                "longitude": "-119.591",
1260                "woe-name": "California",
1261                "latitude": "36.7496",
1262                "woe-label": "California, US, United States",
1263                "type": "State"
1264            },
1265            "geometry": {
1266                "type": "Polygon",
1267                "coordinates": [
1268                    [
1269                        [
1270                            -833,
1271                            8186
1272                        ],
1273                        [
1274                            -50,
1275                            7955
1276                        ],
1277                        [
1278                            -253,
1279                            7203
1280                        ],
1281                        [
1282                            32,
1283                            6779
1284                        ],
1285                        [
1286                            261,
1287                            6430
1288                        ],
1289                        [
1290                            593,
1291                            5936
1292                        ],
1293                        [
1294                            620,
1295                            5788
1296                        ],
1297                        [
1298                            660,
1299                            5730
1300                        ],
1301                        [
1302                            598,
1303                            5702
1304                        ],
1305                        [
1306                            559,
1307                            5661
1308                        ],
1309                        [
1310                            555,
1311                            5605
1312                        ],
1313                        [
1314                            510,
1315                            5537
1316                        ],
1317                        [
1318                            489,
1319                            5536
1320                        ],
1321                        [
1322                            476,
1323                            5452
1324                        ],
1325                        [
1326                            519,
1327                            5416
1328                        ],
1329                        [
1330                            492,
1331                            5355
1332                        ],
1333                        [
1334                            451,
1335                            5357
1336                        ],
1337                        [
1338                            -76,
1339                            5426
1340                        ],
1341                        [
1342                            -69,
1343                            5467
1344                        ],
1345                        [
1346                            -95,
1347                            5476
1348                        ],
1349                        [
1350                            -84,
1351                            5583
1352                        ],
1353                        [
1354                            -110,
1355                            5649
1356                        ],
1357                        [
1358                            -224,
1359                            5792
1360                        ],
1361                        [
1362                            -276,
1363                            5799
1364                        ],
1365                        [
1366                            -265,
1367                            5822
1368                        ],
1369                        [
1370                            -284,
1371                            5881
1372                        ],
1373                        [
1374                            -342,
1375                            5885
1376                        ],
1377                        [
1378                            -417,
1379                            5946
1380                        ],
1381                        [
1382                            -422,
1383                            5975
1384                        ],
1385                        [
1386                            -484,
1387                            6035
1388                        ],
1389                        [
1390                            -539,
1391                            6046
1392                        ],
1393                        [
1394                            -588,
1395                            6077
1396                        ],
1397                        [
1398                            -659,
1399                            6091
1400                        ],
1401                        [
1402                            -686,
1403                            6135
1404                        ],
1405                        [
1406                            -647,
1407                            6273
1408                        ],
1409                        [
1410                            -691,
1411                            6316
1412                        ],
1413                        [
1414                            -672,
1415                            6333
1416                        ],
1417                        [
1418                            -720,
1419                            6428
1420                        ],
1421                        [
1422                            -742,
1423                            6442
1424                        ],
1425                        [
1426                            -793,
1427                            6601
1428                        ],
1429                        [
1430                            -820,
1431                            6637
1432                        ],
1433                        [
1434                            -816,
1435                            6709
1436                        ],
1437                        [
1438                            -775,
1439                            6726
1440                        ],
1441                        [
1442                            -761,
1443                            6756
1444                        ],
1445                        [
1446                            -778,
1447                            6807
1448                        ],
1449                        [
1450                            -821,
1451                            6819
1452                        ],
1453                        [
1454                            -855,
1455                            6888
1456                        ],
1457                        [
1458                            -842,
1459                            6929
1460                        ],
1461                        [
1462                            -853,
1463                            6979
1464                        ],
1465                        [
1466                            -833,
1467                            7041
1468                        ],
1469                        [
1470                            -810,
1471                            7042
1472                        ],
1473                        [
1474                            -816,
1475                            6985
1476                        ],
1477                        [
1478                            -764,
1479                            6931
1480                        ],
1481                        [
1482                            -772,
1483                            6991
1484                        ],
1485                        [
1486                            -797,
1487                            7030
1488                        ],
1489                        [
1490                            -787,
1491                            7089
1492                        ],
1493                        [
1494                            -738,
1495                            7083
1496                        ],
1497                        [
1498                            -782,
1499                            7126
1500                        ],
1501                        [
1502                            -806,
1503                            7122
1504                        ],
1505                        [
1506                            -833,
1507                            7050
1508                        ],
1509                        [
1510                            -892,
1511                            7126
1512                        ],
1513                        [
1514                            -903,
1515                            7243
1516                        ],
1517                        [
1518                            -983,
1519                            7395
1520                        ],
1521                        [
1522                            -967,
1523                            7420
1524                        ],
1525                        [
1526                            -969,
1527                            7507
1528                        ],
1529                        [
1530                            -943,
1531                            7553
1532                        ],
1533                        [
1534                            -936,
1535                            7629
1536                        ],
1537                        [
1538                            -964,
1539                            7712
1540                        ],
1541                        [
1542                            -999,
1543                            7766
1544                        ],
1545                        [
1546                            -993,
1547                            7813
1548                        ],
1549                        [
1550                            -890,
1551                            7943
1552                        ],
1553                        [
1554                            -849,
1555                            8038
1556                        ],
1557                        [
1558                            -844,
1559                            8118
1560                        ],
1561                        [
1562                            -860,
1563                            8134
1564                        ],
1565                        [
1566                            -833,
1567                            8186
1568                        ]
1569                    ]
1570                ]
1571            }
1572        },
1573        {
1574            "type": "Feature",
1575            "id": "US.OR",
1576            "properties": {
1577                "hc-group": "admin1",
1578                "hc-middle-x": 0.47,
1579                "hc-middle-y": 0.52,
1580                "hc-key": "us-or",
1581                "hc-a2": "OR",
1582                "labelrank": "0",
1583                "hasc": "US.OR",
1584                "woe-id": "2347596",
1585                "state-fips": "41",
1586                "fips": "US41",
1587                "postal-code": "OR",
1588                "name": "Oregon",
1589                "country": "United States of America",
1590                "region": "West",
1591                "longitude": "-120.386",
1592                "woe-name": "Oregon",
1593                "latitude": "43.8333",
1594                "woe-label": "Oregon, US, United States",
1595                "type": "State"
1596            },
1597            "geometry": {
1598                "type": "Polygon",
1599                "coordinates": [
1600                    [
1601                        [
1602                            -50,
1603                            7955
1604                        ],
1605                        [
1606                            -833,
1607                            8186
1608                        ],
1609                        [
1610                            -851,
1611                            8223
1612                        ],
1613                        [
1614                            -847,
1615                            8281
1616                        ],
1617                        [
1618                            -817,
1619                            8362
1620                        ],
1621                        [
1622                            -827,
1623                            8415
1624                        ],
1625                        [
1626                            -793,
1627                            8455
1628                        ],
1629                        [
1630                            -756,
1631                            8527
1632                        ],
1633                        [
1634                            -714,
1635                            8570
1636                        ],
1637                        [
1638                            -672,
1639                            8648
1640                        ],
1641                        [
1642                            -594,
1643                            8829
1644                        ],
1645                        [
1646                            -582,
1647                            8877
1648                        ],
1649                        [
1650                            -494,
1651                            9051
1652                        ],
1653                        [
1654                            -493,
1655                            9108
1656                        ],
1657                        [
1658                            -468,
1659                            9158
1660                        ],
1661                        [
1662                            -460,
1663                            9216
1664                        ],
1665                        [
1666                            -396,
1667                            9192
1668                        ],
1669                        [
1670                            -367,
1671                            9202
1672                        ],
1673                        [
1674                            -359,
1675                            9169
1676                        ],
1677                        [
1678                            -321,
1679                            9167
1680                        ],
1681                        [
1682                            -280,
1683                            9134
1684                        ],
1685                        [
1686                            -271,
1687                            9096
1688                        ],
1689                        [
1690                            -283,
1691                            9014
1692                        ],
1693                        [
1694                            -207,
1695                            8965
1696                        ],
1697                        [
1698                            -113,
1699                            8979
1700                        ],
1701                        [
1702                            -22,
1703                            8950
1704                        ],
1705                        [
1706                            -10,
1707                            8925
1708                        ],
1709                        [
1710                            38,
1711                            8914
1712                        ],
1713                        [
1714                            94,
1715                            8923
1716                        ],
1717                        [
1718                            163,
1719                            8905
1720                        ],
1721                        [
1722                            289,
1723                            8922
1724                        ],
1725                        [
1726                            378,
1727                            8905
1728                        ],
1729                        [
1730                            398,
1731                            8914
1732                        ],
1733                        [
1734                            774,
1735                            8822
1736                        ],
1737                        [
1738                            785,
1739                            8775
1740                        ],
1741                        [
1742                            821,
1743                            8744
1744                        ],
1745                        [
1746                            823,
1747                            8698
1748                        ],
1749                        [
1750                            776,
1751                            8646
1752                        ],
1753                        [
1754                            718,
1755                            8545
1756                        ],
1757                        [
1758                            624,
1759                            8450
1760                        ],
1761                        [
1762                            615,
1763                            8403
1764                        ],
1765                        [
1766                            662,
1767                            8361
1768                        ],
1769                        [
1770                            616,
1771                            8265
1772                        ],
1773                        [
1774                            510,
1775                            7813
1776                        ],
1777                        [
1778                            -50,
1779                            7955
1780                        ]
1781                    ]
1782                ]
1783            }
1784        },
1785        {
1786            "type": "Feature",
1787            "id": "US.WI",
1788            "properties": {
1789                "hc-group": "admin1",
1790                "hc-middle-x": 0.41,
1791                "hc-middle-y": 0.38,
1792                "hc-key": "us-wi",
1793                "hc-a2": "WI",
1794                "labelrank": "0",
1795                "hasc": "US.WI",
1796                "woe-id": "2347608",
1797                "state-fips": "55",
1798                "fips": "US55",
1799                "postal-code": "WI",
1800                "name": "Wisconsin",
1801                "country": "United States of America",
1802                "region": "Midwest",
1803                "longitude": "-89.5831",
1804                "woe-name": "Wisconsin",
1805                "latitude": "44.3709",
1806                "woe-label": "Wisconsin, US, United States",
1807                "type": "State"
1808            },
1809            "geometry": {
1810                "type": "MultiPolygon",
1811                "coordinates": [
1812                    [
1813                        [
1814                            [
1815                                6206,
1816                                8297
1817                            ],
1818                            [
1819                                6197,
1820                                8237
1821                            ],
1822                            [
1823                                6159,
1824                                8156
1825                            ],
1826                            [
1827                                6136,
1828                                8180
1829                            ],
1830                            [
1831                                6161,
1832                                8249
1833                            ],
1834                            [
1835                                6206,
1836                                8297
1837                            ]
1838                        ]
1839                    ],
1840                    [
1841                        [
1842                            [
1843                                5575,
1844                                7508
1845                            ],
1846                            [
1847                                5561,
1848                                7544
1849                            ],
1850                            [
1851                                5494,
1852                                7563
1853                            ],
1854                            [
1855                                5465,
1856                                7670
1857                            ],
1858                            [
1859                                5479,
1860                                7702
1861                            ],
1862                            [
1863                                5445,
1864                                7758
1865                            ],
1866                            [
1867                                5431,
1868                                7866
1869                            ],
1870                            [
1871                                5405,
1872                                7892
1873                            ],
1874                            [
1875                                5360,
1876                                7903
1877                            ],
1878                            [
1879                                5273,
1880                                7994
1881                            ],
1882                            [
1883                                5217,
1884                                8029
1885                            ],
1886                            [
1887                                5181,
1888                                8035
1889                            ],
1890                            [
1891                                5136,
1892                                8072
1893                            ],
1894                            [
1895                                5146,
1896                                8117
1897                            ],
1898                            [
1899                                5144,
1900                                8214
1901                            ],
1902                            [
1903                                5158,
1904                                8253
1905                            ],
1906                            [
1907                                5117,
1908                                8285
1909                            ],
1910                            [
1911                                5116,
1912                                8322
1913                            ],
1914                            [
1915                                5147,
1916                                8375
1917                            ],
1918                            [
1919                                5220,
1920                                8422
1921                            ],
1922                            [
1923                                5214,
1924                                8573
1925                            ],
1926                            [
1927                                5245,
1928                                8603
1929                            ],
1930                            [
1931                                5303,
1932                                8589
1933                            ],
1934                            [
1935                                5410,
1936                                8635
1937                            ],
1938                            [
1939                                5449,
1940                                8660
1941                            ],
1942                            [
1943                                5489,
1944                                8656
1945                            ],
1946                            [
1947                                5481,
1948                                8617
1949                            ],
1950                            [
1951                                5508,
1952                                8583
1953                            ],
1954                            [
1955                                5554,
1956                                8572
1957                            ],
1958                            [
1959                                5588,
1960                                8553
1961                            ],
1962                            [
1963                                5611,
1964                                8510
1965                            ],
1966                            [
1967                                5795,
1968                                8473
1969                            ],
1970                            [
1971                                5849,
1972                                8447
1973                            ],
1974                            [
1975                                5968,
1976                                8437
1977                            ],
1978                            [
1979                                5993,
1980                                8394
1981                            ],
1982                            [
1983                                6045,
1984                                8372
1985                            ],
1986                            [
1987                                6042,
1988                                8286
1989                            ],
1990                            [
1991                                6080,
1992                                8287
1993                            ],
1994                            [
1995                                6071,
1996                                8242
1997                            ],
1998                            [
1999                                6096,
2000                                8224
2001                            ],
2002                            [
2003                                6058,
2004                                8180
2005                            ],
2006                            [
2007                                6028,
2008                                8078
2009                            ],
2010                            [
2011                                6049,
2012                                8076
2013                            ],
2014                            [
2015                                6099,
2016                                8156
2017                            ],
2018                            [
2019                                6129,
2020                                8170
2021                            ],
2022                            [
2023                                6153,
2024                                8151
2025                            ],
2026                            [
2027                                6124,
2028                                8019
2029                            ],
2030                            [
2031                                6136,
2032                                7996
2033                            ],
2034                            [
2035                                6101,
2036                                7916
2037                            ],
2038                            [
2039                                6110,
2040                                7860
2041                            ],
2042                            [
2043                                6082,
2044                                7742
2045                            ],
2046                            [
2047                                6089,
2048                                7679
2049                            ],
2050                            [
2051                                6116,
2052                                7626
2053                            ],
2054                            [
2055                                6119,
2056                                7543
2057                            ],
2058                            [
2059                                5780,
2060                                7519
2061                            ],
2062                            [
2063                                5606,
2064                                7509
2065                            ],
2066                            [
2067                                5575,
2068                                7508
2069                            ]
2070                        ]
2071                    ]
2072                ]
2073            }
2074        },
2075        {
2076            "type": "Feature",
2077            "id": "US.ME",
2078            "properties": {
2079                "hc-group": "admin1",
2080                "hc-middle-x": 0.43,
2081                "hc-middle-y": 0.4,
2082                "hc-key": "us-me",
2083                "hc-a2": "ME",
2084                "labelrank": "0",
2085                "hasc": "US.ME",
2086                "woe-id": "2347578",
2087                "state-fips": "23",
2088                "fips": "US23",
2089                "postal-code": "ME",
2090                "name": "Maine",
2091                "country": "United States of America",
2092                "region": "Northeast",
2093                "longitude": "-69.1973",
2094                "woe-name": "Maine",
2095                "latitude": "45.148",
2096                "woe-label": "Maine, US, United States",
2097                "type": "State"
2098            },
2099            "geometry": {
2100                "type": "MultiPolygon",
2101                "coordinates": [
2102                    [
2103                        [
2104                            [
2105                                9623,
2106                                8727
2107                            ],
2108                            [
2109                                9643,
2110                                8763
2111                            ],
2112                            [
2113                                9665,
2114                                8747
2115                            ],
2116                            [
2117                                9641,
2118                                8690
2119                            ],
2120                            [
2121                                9623,
2122                                8727
2123                            ]
2124                        ]
2125                    ],
2126                    [
2127                        [
2128                            [
2129                                9225,
2130                                8399
2131                            ],
2132                            [
2133                                9079,
2134                                8830
2135                            ],
2136                            [
2137                                9115,
2138                                8824
2139                            ],
2140                            [
2141                                9130,
2142                                8917
2143                            ],
2144                            [
2145                                9168,
2146                                8971
2147                            ],
2148                            [
2149                                9177,
2150                                9035
2151                            ],
2152                            [
2153                                9160,
2154                                9062
2155                            ],
2156                            [
2157                                9160,
2158                                9140
2159                            ],
2160                            [
2161                                9176,
2162                                9161
2163                            ],
2164                            [
2165                                9166,
2166                                9236
2167                            ],
2168                            [
2169                                9238,
2170                                9459
2171                            ],
2172                            [
2173                                9272,
2174                                9467
2175                            ],
2176                            [
2177                                9292,
2178                                9423
2179                            ],
2180                            [
2181                                9319,
2182                                9415
2183                            ],
2184                            [
2185                                9428,
2186                                9491
2187                            ],
2188                            [
2189                                9519,
2190                                9435
2191                            ],
2192                            [
2193                                9630,
2194                                9097
2195                            ],
2196                            [
2197                                9697,
2198                                9099
2199                            ],
2200                            [
2201                                9717,
2202                                9017
2203                            ],
2204                            [
2205                                9747,
2206                                8995
2207                            ],
2208                            [
2209                                9778,
2210                                9009
2211                            ],
2212                            [
2213                                9851,
2214                                8939
2215                            ],
2216                            [
2217                                9818,
2218                                8875
2219                            ],
2220                            [
2221                                9789,
2222                                8883
2223                            ],
2224                            [
2225                                9784,
2226                                8851
2227                            ],
2228                            [
2229                                9706,
2230                                8811
2231                            ],
2232                            [
2233                                9712,
2234                                8773
2235                            ],
2236                            [
2237                                9690,
2238                                8747
2239                            ],
2240                            [
2241                                9669,
2242                                8782
2243                            ],
2244                            [
2245                                9611,
2246                                8766
2247                            ],
2248                            [
2249                                9590,
2250                                8707
2251                            ],
2252                            [
2253                                9615,
2254                                8647
2255                            ],
2256                            [
2257                                9554,
2258                                8716
2259                            ],
2260                            [
2261                                9552,
2262                                8761
2263                            ],
2264                            [
2265                                9517,
2266                                8719
2267                            ],
2268                            [
2269                                9529,
2270                                8622
2271                            ],
2272                            [
2273                                9505,
2274                                8581
2275                            ],
2276                            [
2277                                9483,
2278                                8586
2279                            ],
2280                            [
2281                                9467,
2282                                8544
2283                            ],
2284                            [
2285                                9433,
2286                                8531
2287                            ],
2288                            [
2289                                9420,
2290                                8493
2291                            ],
2292                            [
2293                                9387,
2294                                8524
2295                            ],
2296                            [
2297                                9346,
2298                                8471
2299                            ],
2300                            [
2301                                9362,
2302                                8439
2303                            ],
2304                            [
2305                                9314,
2306                                8347
2307                            ],
2308                            [
2309                                9298,
2310                                8291
2311                            ],
2312                            [
2313                                9235,
2314                                8354
2315                            ],
2316                            [
2317                                9225,
2318                                8399
2319                            ]
2320                        ]
2321                    ]
2322                ]
2323            }
2324        },
2325        {
2326            "type": "Feature",
2327            "id": "US.MI",
2328            "properties": {
2329                "hc-group": "admin1",
2330                "hc-middle-x": 0.71,
2331                "hc-middle-y": 0.67,
2332                "hc-key": "us-mi",
2333                "hc-a2": "MI",
2334                "labelrank": "0",
2335                "hasc": "US.MI",
2336                "woe-id": "2347581",
2337                "state-fips": "26",
2338                "fips": "US26",
2339                "postal-code": "MI",
2340                "name": "Michigan",
2341                "country": "United States of America",
2342                "region": "Midwest",
2343                "longitude": "-84.9479",
2344                "woe-name": "Michigan",
2345                "latitude": "43.4343",
2346                "woe-label": "Michigan, US, United States",
2347                "type": "State"
2348            },
2349            "geometry": {
2350                "type": "MultiPolygon",
2351                "coordinates": [
2352                    [
2353                        [
2354                            [
2355                                6802,
2356                                8561
2357                            ],
2358                            [
2359                                6808,
2360                                8523
2361                            ],
2362                            [
2363                                6764,
2364                                8521
2365                            ],
2366                            [
2367                                6774,
2368                                8565
2369                            ],
2370                            [
2371                                6802,
2372                                8561
2373                            ]
2374                        ]
2375                    ],
2376                    [
2377                        [
2378                            [
2379                                5863,
2380                                9010
2381                            ],
2382                            [
2383                                5834,
2384                                8966
2385                            ],
2386                            [
2387                                5759,
2388                                8913
2389                            ],
2390                            [
2391                                5758,
2392                                8947
2393                            ],
2394                            [
2395                                5863,
2396                                9010
2397                            ]
2398                        ]
2399                    ],
2400                    [
2401                        [
2402                            [
2403                                6976,
2404                                7443
2405                            ],
2406                            [
2407                                6815,
2408                                7415
2409                            ],
2410                            [
2411                                6718,
2412                                7400
2413                            ],
2414                            [
2415                                6716,
2416                                7416
2417                            ],
2418                            [
2419                                6323,
2420                                7372
2421                            ],
2422                            [
2423                                6364,
2424                                7423
2425                            ],
2426                            [
2427                                6399,
2428                                7509
2429                            ],
2430                            [
2431                                6417,
2432                                7630
2433                            ],
2434                            [
2435                                6409,
2436                                7695
2437                            ],
2438                            [
2439                                6330,
2440                                7861
2441                            ],
2442                            [
2443                                6345,
2444                                7903
2445                            ],
2446                            [
2447                                6322,
2448                                7979
2449                            ],
2450                            [
2451                                6361,
2452                                8059
2453                            ],
2454                            [
2455                                6352,
2456                                8141
2457                            ],
2458                            [
2459                                6381,
2460                                8159
2461                            ],
2462                            [
2463                                6381,
2464                                8204
2465                            ],
2466                            [
2467                                6423,
2468                                8217
2469                            ],
2470                            [
2471                                6453,
2472                                8283
2473                            ],
2474                            [
2475                                6469,
2476                                8252
2477                            ],
2478                            [
2479                                6460,
2480                                8196
2481                            ],
2482                            [
2483                                6479,
2484                                8180
2485                            ],
2486                            [
2487                                6501,
2488                                8221
2489                            ],
2490                            [
2491                                6497,
2492                                8298
2493                            ],
2494                            [
2495                                6533,
2496                                8342
2497                            ],
2498                            [
2499                                6567,
2500                                8348
2501                            ],
2502                            [
2503                                6542,
2504                                8410
2505                            ],
2506                            [
2507                                6593,
2508                                8461
2509                            ],
2510                            [
2511                                6646,
2512                                8436
2513                            ],
2514                            [
2515                                6627,
2516                                8469
2517                            ],
2518                            [
2519                                6669,
2520                                8467
2521                            ],
2522                            [
2523                                6654,
2524                                8434
2525                            ],
2526                            [
2527                                6698,
2528                                8433
2529                            ],
2530                            [
2531                                6726,
2532                                8400
2533                            ],
2534                            [
2535                                6837,
2536                                8377
2537                            ],
2538                            [
2539                                6863,
2540                                8359
2541                            ],
2542                            [
2543                                6884,
2544                                8307
2545                            ],
2546                            [
2547                                6860,
2548                                8285
2549                            ],
2550                            [
2551                                6902,
2552                                8213
2553                            ],
2554                            [
2555                                6903,
2556                                8115
2557                            ],
2558                            [
2559                                6872,
2560                                8094
2561                            ],
2562                            [
2563                                6868,
2564                                8040
2565                            ],
2566                            [
2567                                6821,
2568                                8014
2569                            ],
2570                            [
2571                                6824,
2572                                7934
2573                            ],
2574                            [
2575                                6868,
2576                                7920
2577                            ],
2578                            [
2579                                6900,
2580                                7950
2581                            ],
2582                            [
2583                                6937,
2584                                8030
2585                            ],
2586                            [
2587                                6993,
2588                                8059
2589                            ],
2590                            [
2591                                7042,
2592                                8027
2593                            ],
2594                            [
2595                                7097,
2596                                7866
2597                            ],
2598                            [
2599                                7128,
2600                                7802
2601                            ],
2602                            [
2603                                7124,
2604                                7704
2605                            ],
2606                            [
2607                                7066,
2608                                7697
2609                            ],
2610                            [
2611                                7061,
2612                                7631
2613                            ],
2614                            [
2615                                7021,
2616                                7590
2617                            ],
2618                            [
2619                                7008,
2620                                7500
2621                            ],
2622                            [
2623                                6976,
2624                                7443
2625                            ]
2626                        ]
2627                    ],
2628                    [
2629                        [
2630                            [
2631                                5874,
2632                                8741
2633                            ],
2634                            [
2635                                5900,
2636                                8700
2637                            ],
2638                            [
2639                                5901,
2640                                8651
2641                            ],
2642                            [
2643                                5938,
2644                                8693
2645                            ],
2646                            [
2647                                6017,
2648                                8689
2649                            ],
2650                            [
2651                                6049,
2652                                8673
2653                            ],
2654                            [
2655                                6107,
2656                                8596
2657                            ],
2658                            [
2659                                6174,
2660                                8609
2661                            ],
2662                            [
2663                                6192,
2664                                8589
2665                            ],
2666                            [
2667                                6244,
2668                                8596
2669                            ],
2670                            [
2671                                6318,
2672                                8663
2673                            ],
2674                            [
2675                                6430,
2676                                8674
2677                            ],
2678                            [
2679                                6485,
2680                                8705
2681                            ],
2682                            [
2683                                6529,
2684                                8713
2685                            ],
2686                            [
2687                                6518,
2688                                8645
2689                            ],
2690                            [
2691                                6560,
2692                                8631
2693                            ],
2694                            [
2695                                6591,
2696                                8646
2697                            ],
2698                            [
2699                                6609,
2700                                8627
2701                            ],
2702                            [
2703                                6633,
2704                                8653
2705                            ],
2706                            [
2707                                6688,
2708                                8665
2709                            ],
2710                            [
2711                                6692,
2712                                8589
2713                            ],
2714                            [
2715                                6745,
2716                                8536
2717                            ],
2718                            [
2719                                6723,
2720                                8521
2721                            ],
2722                            [
2723                                6631,
2724                                8516
2725                            ],
2726                            [
2727                                6606,
2728                                8530
2729                            ],
2730                            [
2731                                6598,
2732                                8476
2733                            ],
2734                            [
2735                                6541,
2736                                8514
2737                            ],
2738                            [
2739                                6480,
2740                                8
2740529
2741                            ],
2742                            [
2743                                6444,
2744                                8521
2745                            ],
2746                            [
2747                                6426,
2748                                8490
2749                            ],
2750                            [
2751                                6320,
2752                                8470
2753                            ],
2754                            [
2755                                6302,
2756                                8429
2757                            ],
2758                            [
2759                                6244,
2760                                8388
2761                            ],
2762                            [
2763                                6264,
2764                                8448
2765                            ],
2766                            [
2767                                6227,
2768                                8437
2769                            ],
2770                            [
2771                                6192,
2772                                8395
2773                            ],
2774                            [
2775                                6185,
2776                                8444
2777                            ],
2778                            [
2779                                6096,
2780                                8224
2781                            ],
2782                            [
2783                                6071,
2784                                8242
2785                            ],
2786                            [
2787                                6080,
2788                                8287
2789                            ],
2790                            [
2791                                6042,
2792                                8286
2793                            ],
2794                            [
2795                                6045,
2796                                8372
2797                            ],
2798                            [
2799                                5993,
2800                                8394
2801                            ],
2802                            [
2803                                5968,
2804                                8437
2805                            ],
2806                            [
2807                                5849,
2808                                8447
2809                            ],
2810                            [
2811                                5795,
2812                                8473
2813                            ],
2814                            [
2815                                5611,
2816                                8510
2817                            ],
2818                            [
2819                                5588,
2820                                8553
2821                            ],
2822                            [
2823                                5554,
2824                                8572
2825                            ],
2826                            [
2827                                5623,
2828                                8604
2829                            ],
2830                            [
2831                                5661,
2832                                8642
2833                            ],
2834                            [
2835                                5731,
2836                                8656
2837                            ],
2838                            [
2839                                5776,
2840                                8696
2841                            ],
2842                            [
2843                                5805,
2844                                8702
2845                            ],
2846                            [
2847                                5860,
2848                                8764
2849                            ],
2850                            [
2851                                5868,
2852                                8750
2853                            ],
2854                            [
2855                                5893,
2856                                8802
2857                            ],
2858                            [
2859                                5958,
2860                                8837
2861                            ],
2862                            [
2863                                6017,
2864                                8829
2865                            ],
2866                            [
2867                                5931,
2868                                8757
2869                            ],
2870                            [
2871                                5903,
2872                                8703
2873                            ],
2874                            [
2875                                5900,
2876                                8738
2877                            ],
2878                            [
2879                                5874,
2880                                8741
2881                            ]
2882                        ]
2883                    ]
2884                ]
2885            }
2886        },
2887        {
2888            "type": "Feature",
2889            "id": "US.NV",
2890            "properties": {
2891                "hc-group": "admin1",
2892                "hc-middle-x": 0.46,
2893                "hc-middle-y": 0.38,
2894                "hc-key": "us-nv",
2895                "hc-a2": "NV",
2896                "labelrank": "0",
2897                "hasc": "US.NV",
2898                "woe-id": "2347587",
2899                "state-fips": "32",
2900                "fips": "US32",
2901                "postal-code": "NV",
2902                "name": "Nevada",
2903                "country": "United States of America",
2904                "region": "West",
2905                "longitude": "-117.02",
2906                "woe-name": "Nevada",
2907                "latitude": "39.4299",
2908                "woe-label": "Nevada, US, United States",
2909                "type": "State"
2910            },
2911            "geometry": {
2912                "type": "Polygon",
2913                "coordinates": [
2914                    [
2915                        [
2916                            -50,
2917                            7955
2918                        ],
2919                        [
2920                            510,
2921                            7813
2922                        ],
2923                        [
2924                            897,
2925                            7727
2926                        ],
2927                        [
2928                            1073,
2929                            7690
2930                        ],
2931                        [
2932                            929,
2933                            6975
2934                        ],
2935                        [
2936                            818,
2937                            6420
2938                        ],
2939                        [
2940                            777,
2941                            6221
2942                        ],
2943                        [
2944                            752,
2945                            6180
2946                        ],
2947                        [
2948                            669,
2949                            6227
2950                        ],
2951                        [
2952                            631,
2953                            6217
2954                        ],
2955                        [
2956                            631,
2957                            6159
2958                        ],
2959                        [
2960                            611,
2961                            6068
2962                        ],
2963                        [
2964                            614,
2965                            5982
2966                        ],
2967                        [
2968                            593,
2969                            5936
2970                        ],
2971                        [
2972                            261,
2973                            6430
2974                        ],
2975                        [
2976                            32,
2977                            6779
2978                        ],
2979                        [
2980                            -253,
2981                            7203
2982                        ],
2983                        [
2984                            -50,
2985                            7955
2986                        ]
2987                    ]
2988                ]
2989            }
2990        },
2991        {
2992            "type": "Feature",
2993            "id": "US.NM",
2994            "properties": {
2995                "hc-group": "admin1",
2996                "hc-middle-x": 0.51,
2997                "hc-middle-y": 0.5,
2998                "hc-key": "us-nm",
2999                "hc-a2": "NM",
3000                "labelrank": "0",
3001                "hasc": "US.NM",
3002                "woe-id": "2347590",
3003                "state-fips": "35",
3004                "fips": "US35",
3005                "postal-code": "NM",
3006                "name": "New Mexico",
3007                "country": "United States of America",
3008                "region": "West",
3009                "longitude": "-106.024",
3010                "woe-name": "New Mexico",
3011                "latitude": "34.5002",
3012                "woe-label": "New Mexico, US, United States",
3013                "type": "State"
3014            },
3015            "geometry": {
3016                "type": "Polygon",
3017                "coordinates": [
3018                    [
3019                        [
3020                            1841,
3021                            6242
3022                        ],
3023                        [
3024                            3091,
3025                            6104
3026                        ],
3027                        [
3028                            3083,
3029                            6007
3030                        ],
3031                        [
3032                            3081,
3033                            5975
3034                        ],
3035                        [
3036                            3072,
3037                            5970
3038                        ],
3039                        [
3040                            2976,
3041                            4810
3042                        ],
3043                        [
3044                            2181,
3045                            4887
3046                        ],
3047                        [
3048                            2208,
3049                            4823
3050                        ],
3051                        [
3052                            1830,
3053                            4873
3054                        ],
3055                        [
3056                            1815,
3057                            4756
3058                        ],
3059                        [
3060                            1630,
3061                            4782
3062                        ],
3063                        [
3064                            1736,
3065                            5514
3066                        ],
3067                        [
3068                            1841,
3069                            6242
3070                        ]
3071                    ]
3072                ]
3073            }
3074        },
3075        {
3076            "type": "Feature",
3077            "id": "US.CO",
3078            "properties": {
3079                "hc-group": "admin1",
3080                "hc-middle-x": 0.51,
3081                "hc-middle-y": 0.5,
3082                "hc-key": "us-co",
3083                "hc-a2": "CO",
3084                "labelrank": "0",
3085                "hasc": "US.CO",
3086                "woe-id": "2347564",
3087                "state-fips": "8",
3088                "fips": "US08",
3089                "postal-code": "CO",
3090                "name": "Colorado",
3091                "country": "United States of America",
3092                "region": "West",
3093                "longitude": "-105.543",
3094                "woe-name": "Colorado",
3095                "latitude": "38.9998",
3096                "woe-label": "Colorado, US, United States",
3097                "type": "State"
3098            },
3099            "geometry": {
3100                "type": "Polygon",
3101                "coordinates": [
3102                    [
3103                        [
3104                            3091,
3105                            6104
3106                        ],
3107                        [
3108                            1841,
3109                            6242
3110                        ],
3111                        [
3112                            1966,
3113                            7108
3114                        ],
3115                        [
3116                            1990,
3117                            7269
3118                        ],
3119                        [
3120                            2964,
3121                            7155
3122                        ],
3123                        [
3124                            3357,
3125                            7124
3126                        ],
3127                        [
3128                            3339,
3129                            6866
3130                        ],
3131                        [
3132                            3329,
3133                            6696
3134                        ],
3135                        [
3136                            3290,
3137                            6089
3138                        ],
3139                        [
3140                            3091,
3141                            6104
3142                        ]
3143                    ]
3144                ]
3145            }
3146        },
3147        {
3148            "type": "Feature",
3149            "id": "US.WY",
3150            "properties": {
3151                "hc-group": "admin1",
3152                "hc-middle-x": 0.51,
3153                "hc-middle-y": 0.5,
3154                "hc-key": "us-wy",
3155                "hc-a2": "WY",
3156                "labelrank": "0",
3157                "hasc": "US.WY",
3158                "woe-id": "2347609",
3159                "state-fips": "56",
3160                "fips": "US56",
3161                "postal-code": "WY",
3162                "name": "Wyoming",
3163                "country": "United States of America",
3164                "region": "West",
3165                "longitude": "-107.552",
3166                "woe-name": "Wyoming",
3167                "latitude": "42.9999",
3168                "woe-label": "Wyoming, US, United States",
3169                "type": "State"
3170            },
3171            "geometry": {
3172                "type": "Polygon",
3173                "coordinates": [
3174                    [
3175                        [
3176                            2964,
3177                            7155
3178                        ],
3179                        [
3180                            1990,
3181                            7269
3182                        ],
3183                        [
3184                            1600,
3185                            7329
3186                        ],
3187                        [
3188                            1643,
3189                            7585
3190                        ],
3191                        [
3192                            1677,
3193                            7785
3194                        ],
3195                        [
3196                            1750,
3197                            8226
3198                        ],
3199                        [
3200                            1772,
3201                            8355
3202                        ],
3203                        [
3204                            3056,
3205                            8191
3206                        ],
3207                        [
3208                            3019,
3209                            7770
3210                        ],
3211                        [
3212                            3010,
3213                            7672
3214                        ],
3215                        [
3216                            3002,
3217                            7575
3218                        ],
3219                        [
3220                            2964,
3221                            7155
3222                        ]
3223                    ]
3224                ]
3225            }
3226        },
3227        {
3228            "type": "Feature",
3229            "id": "US.KS",
3230            "properties": {
3231                "hc-group": "admin1",
3232                "hc-middle-x": 0.3,
3233                "hc-middle-y": 0.49,
3234                "hc-key": "us-ks",
3235                "hc-a2": "KS",
3236                "labelrank": "0",
3237                "hasc": "US.KS",
3238                "woe-id": "2347575",
3239                "state-fips": "20",
3240                "fips": "US20",
3241                "postal-code": "KS",
3242                "name": "Kansas",
3243                "country": "United States of America",
3244                "region": "Midwest",
3245                "longitude": "-98.3309",
3246                "woe-name": "Kansas",
3247                "latitude": "38.5",
3248                "woe-label": "Kansas, US, United States",
3249                "type": "State"
3250            },
3251            "geometry": {
3252                "type": "Polygon",
3253                "coordinates": [
3254                    [
3255                        [
3256                            3339,
3257                            6866
3258                        ],
3259                        [
3260                            4682,
3261                            6826
3262                        ],
3263                        [
3264                            4769,
3265                            6780
3266                        ],
3267                        [
3268                            4726,
3269                            6705
3270                        ],
3271                        [
3272                            4767,
3273                            6667
3274                        ],
3275                        [
3276                            4781,
3277                            6624
3278                        ],
3279                        [
3280                            4824,
3281                            6600
3282                        ],
3283                        [
3284                            4833,
3285                            6050
3286                        ],
3287                        [
3288                            3290,
3289                            6089
3290                        ],
3291                        [
3292                            3329,
3293                            6696
3294                        ],
3295                        [
3296                            3339,
3297                            6866
3298                        ]
3299                    ]
3300                ]
3301            }
3302        },
3303        {
3304            "type": "Feature",
3305            "id": "US.NE",
3306            "properties": {
3307                "hc-group": "admin1",
3308                "hc-middle-x": 0.43,
3309                "hc-middle-y": 0.5,
3310                "hc-key": "us-ne",
3311                "hc-a2": "NE",
3312                "labelrank": "0",
3313                "hasc": "US.NE",
3314                "woe-id": "2347586",
3315                "state-fips": "31",
3316                "fips": "US31",
3317                "postal-code": "NE",
3318                "name": "Nebraska",
3319                "country": "United States of America",
3320                "region": "Midwest",
3321                "longitude": "-99.68550000000001",
3322                "woe-name": "Nebraska",
3323                "latitude": "41.5002",
3324                "woe-label": "Nebraska, US, United States",
3325                "type": "State"
3326            },
3327            "geometry": {
3328                "type": "Polygon",
3329                "coordinates": [
3330                    [
3331                        [
3332                            4682,
3333                            6826
3334                        ],
3335                        [
3336                            3339,
3337                            6866
3338                        ],
3339                        [
3340                            3357,
3341                            7124
3342                        ],
3343                        [
3344                            2964,
3345                            7155
3346                        ],
3347                        [
3348                            3002,
3349                            7575
3350                        ],
3351                        [
3352                            3010,
3353                            7672
3354                        ],
3355                        [
3356                            4071,
3357                            7611
3358                        ],
3359                        [
3360                            4148,
3361                            7558
3362                        ],
3363                        [
3364                            4194,
3365                            7574
3366                        ],
3367                        [
3368                            4297,
3369                            7577
3370                        ],
3371                        [
3372                            4330,
3373                            7551
3374                        ],
3375                        [
3376                            4409,
3377                            7521
3378                        ],
3379                        [
3380                            4453,
3381                            7479
3382                        ],
3383                        [
3384                            4469,
3385                            7474
3386                        ],
3387                        [
3388                            4478,
3389                            7398
3390                        ],
3391                        [
3392                            4515,
3393                            7341
3394                        ],
3395                        [
3396                            4533,
3397                            7291
3398                        ],
3399                        [
3400                            4529,
3401                            7228
3402                        ],
3403                        [
3404                            4559,
3405                            7206
3406                        ],
3407                        [
3408                            4571,
3409                            7165
3410                        ],
3411                        [
3412                            4579,
3413                            7031
3414                        ],
3415                        [
3416                            4592,
3417                            6986
3418                        ],
3419                        [
3420                            4592,
3421                            6981
3422                        ],
3423                        [
3424                            4592,
3425                            6981
3426                        ],
3427                        [
3428                            4591,
3429                            6981
3430                        ],
3431                        [
3432                            4591,
3433                            6981
3434                        ],
3435                        [
3436                            4619,
3437                            6915
3438                        ],
3439                        [
3440                            4682,
3441                            6826
3442                        ]
3443                    ]
3444                ]
3445            }
3446        },
3447        {
3448            "type": "Feature",
3449            "id": "US.OK",
3450            "properties": {
3451                "hc-group": "admin1",
3452                "hc-middle-x": 0.78,
3453                "hc-middle-y": 0.52,
3454                "hc-key": "us-ok",
3455                "hc-a2": "OK",
3456                "labelrank": "0",
3457                "hasc": "US.OK",
3458                "woe-id": "2347595",
3459                "state-fips": "40",
3460                "fips": "US40",
3461                "postal-code": "OK",
3462                "name": "Oklahoma",
3463                "country": "United States of America",
3464                "region": "South",
3465                "longitude": "-97.1309",
3466                "woe-name": "Oklahoma",
3467                "latitude": "35.452",
3468                "woe-label": "Oklahoma, US, United States",
3469                "type": "State"
3470            },
3471            "geometry": {
3472                "type": "Polygon",
3473                "coordinates": [
3474                    [
3475                        [
3476                            3290,
3477                            6089
3478                        ],
3479                        [
3480                            4833,
3481                            6050
3482                        ],
3483                        [
3484                            4833,
3485                            6017
3486                        ],
3487                        [
3488                            4835,
3489                            5920
3490                        ],
3491                        [
3492                            4877,
3493                            5632
3494                        ],
3495                        [
3496                            4875,
3497                            5180
3498                        ],
3499                        [
3500                            4790,
3501                            5207
3502                        ],
3503                        [
3504                            4714,
3505                            5260
3506                        ],
3507                        [
3508                            4685,
3509                            5235
3510                        ],
3511                        [
3512                            4632,
3513                            5257
3514                        ],
3515                        [
3516                            4595,
3517                            5233
3518                        ],
3519                        [
3520                            4559,
3521                            5242
3522                        ],
3523                        [
3524                            4474,
3525                            5191
3526                        ],
3527                        [
3528                            4405,
3529                            5248
3530                        ],
3531                        [
3532                            4360,
3533                            5237
3534                        ],
3535                        [
3536                            4347,
3537                            5258
3538                        ],
3539                        [
3540                            4312,
3541                            5234
3542                        ],
3543                        [
3544                            4304,
3545                            5199
3546                        ],
3547                        [
3548                            4283,
3549                            5247
3550                        ],
3551                        [
3552                            4248,
3553                            5227
3554                        ],
3555                        [
3556                            4181,
3557                            5268
3558                        ],
3559                        [
3560                            4121,
3561                            5246
3562                        ],
3563                        [
3564                            4093,
3565                            5310
3566                        ],
3567                        [
3568                            4007,
3569                            5296
3570                        ],
3571                        [
3572                            3908,
3573                            5334
3574                        ],
3575                        [
3576                            3856,
3577                            5341
3578                        ],
3579                        [
3580                            3842,
3581                            5388
3582                        ],
3583                        [
3584                            3753,
3585                            5388
3586                        ],
3587                        [
3588                            3686,
3589                            5437
3590                        ],
3591                        [
3592                            3707,
3593                            5936
3594                        ],
3595                        [
3596                            3081,
3597                            5975
3598                        ],
3599                        [
3600                            3083,
3601                            6007
3602                        ],
3603                        [
3604                            3091,
3605                            6104
3606                        ],
3607                        [
3608                            3290,
3609                            6089
3610                        ]
3611                    ]
3612                ]
3613            }
3614        },
3615        {
3616            "type": "Feature",
3617            "id": "US.MO",
3618            "properties": {
3619                "hc-group": "admin1",
3620                "hc-middle-x": 0.48,
3621                "hc-middle-y": 0.51,
3622                "hc-key": "us-mo",
3623                "hc-a2": "MO",
3624                "labelrank": "0",
3625                "hasc": "US.MO",
3626                "woe-id": "2347584",
3627                "state-fips": "29",
3628                "fips": "US29",
3629                "postal-code": "MO",
3630                "name": "Missouri",
3631                "country": "United States of America",
3632                "region": "Midwest",
3633                "longitude": "-92.446",
3634                "woe-name": "Missouri",
3635                "latitude": "38.5487",
3636                "woe-label": "Missouri, US, United States",
3637                "type": "State"
3638            },
3639            "geometry": {
3640                "type": "Polygon",
3641                "coordinates": [
3642                    [
3643                        [
3644                            4835,
3645                            5920
3646                        ],
3647                        [
3648                            4833,
3649                            6017
3650                        ],
3651                        [
3652                            4833,
3653                            6050
3654                        ],
3655                        [
3656                            4824,
3657                            6600
3658                        ],
3659                        [
3660                            4781,
3661                            6624
3662                        ],
3663                        [
3664                            4767,
3665                            6667
3666                        ],
3667                        [
3668                            4726,
3669                            6705
3670                        ],
3671                        [
3672                            4769,
3673                            6780
3674                        ],
3675                        [
3676                            4682,
3677                            6826
3678                        ],
3679                        [
3680                            4619,
3681                            6915
3682                        ],
3683                        [
3684                            4591,
3685                            6981
3686                        ],
3687                        [
3688                            4591,
3689                            6981
3690                        ],
3691                        [
3692                            4592,
3693                            6981
3694                        ],
3695                        [
3696                            4846,
3697                            6977
3698                        ],
3699                        [
3700                            5120,
3701                            6985
3702                        ],
3703                        [
3704                            5389,
3705                            7006
3706                        ],
3707                        [
3708                            5449,
3709                            6947
3710                        ],
3711                        [
3712                            5449,
3713                            6947
3714                        ],
3715                        [
3716                            5449,
3717                            6947
3718                        ],
3719                        [
3720                            5436,
3721                            6893
3722                        ],
3723                        [
3724                            5454,
3725                            6813
3726                        ],
3727                        [
3728                            5475,
3729                            6774
3730                        ],
3731                        [
3732                            5540,
3733                            6711
3734                        ],
3735                        [
3736                            5588,
3737                            6679
3738                        ],
3739                        [
3740                            5616,
3741                            6596
3742                        ],
3743                        [
3744                            5642,
3745                            6567
3746                        ],
3747                        [
3748                            5672,
3749                            6592
3750                        ],
3751                        [
3752                            5735,
3753                            6561
3754                        ],
3755                        [
3756                            5692,
3757                            6420
3758                        ],
3759                        [
3760                            5752,
3761                            6350
3762                        ],
3763                        [
3764                            5792,
3765                            6336
3766                        ],
3767                        [
3768                            5873,
3769                            6276
3770                        ],
3771                        [
3772                            5898,
3773                            6211
3774                        ],
3775                        [
3776                            5886,
3777                            6165
3778                        ],
3779                        [
3780                            5918,
3781                            6121
3782                        ],
3783                        [
3784                            5975,
3785                            6097
3786                        ],
3787                        [
3788                            5976,
3789                            6033
3790                        ],
3791                        [
3792                            5956,
3793                            5988
3794                        ],
3795                        [
3796                            5932,
3797                            6005
3798                        ],
3799                        [
3800                            5921,
3801                            5968
3802                        ],
3803                        [
3804                            5911,
3805                            5955
3806                        ],
3807                        [
3808                            5907,
3809                            5967
3810                        ],
3811                        [
3812                            5890,
3813                            5980
3814                        ],
3815                        [
3816                            5893,
3817                            5966
3818                        ],
3819                        [
3820                            5901,
3821                            5936
3822                        ],
3823                        [
3824                            5869,
3825                            5898
3826                        ],
3827                        [
3828                            5888,
3829                            5872
3830                        ],
3831                        [
3832                            5868,
3833                            5834
3834                        ],
3835                        [
3836                            5731,
3837                            5821
3838                        ],
3839                        [
3840                            5790,
3841                            5904
3842                        ],
3843                        [
3844                            5767,
3845                            5957
3846                        ],
3847                        [
3848                            4835,
3849                            5920
3850                        ]
3851                    ]
3852                ]
3853            }
3854        },
3855        {
3856            "type": "Feature",
3857            "id": "US.IL",
3858            "properties": {
3859                "hc-group": "admin1",
3860                "hc-middle-x": 0.56,
3861                "hc-middle-y": 0.45,
3862                "hc-key": "us-il",
3863                "hc-a2": "IL",
3864                "labelrank": "0",
3865                "hasc": "US.IL",
3866                "woe-id": "2347572",
3867                "state-fips": "17",
3868                "fips": "US17",
3869                "postal-code": "IL",
3870                "name": "Illinois",
3871                "country": "United States of America",
3872                "region": "Midwest",
3873                "longitude": "-89.1991",
3874                "woe-name": "Illinois",
3875                "latitude": "39.946",
3876                "woe-label": "Illinois, US, United States",
3877                "type": "State"
3878            },
3879            "geometry": {
3880                "type": "Polygon",
3881                "coordinates": [
3882                    [
3883                        [
3884                            6119,
3885                            7543
3886                        ],
3887                        [
3888                            6121,
3889                            7488
3890                        ],
3891                        [
3892                            6192,
3893                            7351
3894                        ],
3895                        [
3896                            6247,
3897                            6739
3898                        ],
3899                        [
3900                            6226,
3901                            6674
3902                        ],
3903                        [
3904                            6254,
3905                            6638
3906                        ],
3907                        [
3908                            6266,
3909                            6585
3910                        ],
3911                        [
3912                            6244,
3913                            6520
3914                        ],
3915                        [
3916                            6222,
3917                            6503
3918                        ],
3919                        [
3920                            6194,
3921                            6422
3922                        ],
3923                        [
3924                            6176,
3925                            6404
3926                        ],
3927                        [
3928                            6179,
3929                            6328
3930                        ],
3931                        [
3932                            6159,
3933                            6283
3934                        ],
3935                        [
3936                            6171,
3937                            6241
3938                        ],
3939                        [
3940                            6102,
3941                            6218
3942                        ],
3943                        [
3944                            6105,
3945                            6131
3946                        ],
3947                        [
3948                            6015,
3949                            6162
3950                        ],
3951                        [
3952                            5987,
3953                            6157
3954                        ],
3955                        [
3956                            5962,
3957                            6117
3958                        ],
3959                        [
3960                            5975,
3961                            6097
3962                        ],
3963                        [
3964                            5918,
3965                            6121
3966                        ],
3967                        [
3968                            5886,
3969                            6165
3970                        ],
3971                        [
3972                            5898,
3973                            6211
3974                        ],
3975                        [
3976                            5873,
3977                            6276
3978                        ],
3979                        [
3980                            5792,
3981                            6336
3982                        ],
3983                        [
3984                            5752,
3985                            6350
3986                        ],
3987                        [
3988                            5692,
3989                            6420
3990                        ],
3991                        [
3992                            5735,
3993                            6561
3994                        ],
3995                        [
3996                            5672,
3997                            6592
3998                        ],
3999                        [
4000                            5642,
4001                            6567
4002                        ],
4003                        [
4004                            5616,
4005                            6596
4006                        ],
4007                        [
4008                            5588,
4009                            6679
4010                        ],
4011                        [
4012                            5540,
4013                            6711
4014                        ],
4015                        [
4016                            5475,
4017                            6774
4018                        ],
4019                        [
4020                            5454,
4021                            6813
4022                        ],
4023                        [
4024                            5436,
4025                            6893
4026                        ],
4027                        [
4028                            5449,
4029                            6947
4030                        ],
4031                        [
4032                            5449,
4033                            6947
4034                        ],
4035                        [
4036                            5449,
4037                            6947
4038                        ],
4039                        [
4040                            5458,
4041                            7004
4042                        ],
4043                        [
4044                            5496,
4045                            7020
4046                        ],
4047                        [
4048                            5535,
4049                            7098
4050                        ],
4051                        [
4052                            5536,
4053                            7132
4054                        ],
4055                        [
4056                            5509,
4057                            7160
4058                        ],
4059                        [
4060                            5523,
4061                            7224
4062                        ],
4063                        [
4064                            5579,
4065                            7232
4066                        ],
4067                        [
4068                            5646,
4069                            7276
4070                        ],
4071                        [
4072                            5671,
4073                            7332
4074                        ],
4075                        [
4076                            5672,
4077                            7411
4078                        ],
4079                        [
4080                            5625,
4081                            7441
4082                        ],
4083                        [
4084                            5575,
4085                            7508
4086                        ],
4087                        [
4088                            5575,
4089                            7508
4090                        ],
4091                        [
4092                            5606,
4093                            7509
4094                        ],
4095                        [
4096                            5848,
4097                            7523
4098                        ],
4099                        [
4100                            6119,
4101                            7543
4102                        ]
4103                    ]
4104                ]
4105            }
4106        },
4107        {
4108            "type": "Feature",
4109            "id": "US.IN",
4110            "properties": {
4111                "hc-group": "admin1",
4112                "hc-middle-x": 0.49,
4113                "hc-middle-y": 0.43,
4114                "hc-key": "us-in",
4115                "hc-a2": "IN",
4116                "labelrank": "0",
4117                "hasc": "US.IN",
4118                "woe-id": "2347573",
4119                "state-fips": "18",
4120                "fips": "US18",
4121                "postal-code": "IN",
4122                "name": "Indiana",
4123                "country": "United States of America",
4124                "region": "Midwest",
4125                "longitude": "-86.1396",
4126                "woe-name": "Indiana",
4127                "latitude": "39.8874",
4128                "woe-label": "Indiana, US, United States",
4129                "type": "State"
4130            },
4131            "geometry": {
4132                "type": "Polygon",
4133                "coordinates": [
4134                    [
4135                        [
4136                            6192,
4137                            7351
4138                        ],
4139                        [
4140                            6239,
4141                            7329
4142                        ],
4143                        [
4144                            6323,
4145                            7372
4146                        ],
4147                        [
4148                            6716,
4149                            7416
4150                        ],
4151                        [
4152                            6718,
4153                            7400
4154                        ],
4155                        [
4156                            6732,
4157                            7296
4158                        ],
4159                        [
4160                            6797,
4161                            6730
4162                        ],
4163                        [
4164                            6792,
4165                            6683
4166                        ],
4167                        [
4168                            6808,
4169                            6651
4170                        ],
4171                        [
4172                            6737,
4173                            6617
4174                        ],
4175                        [
4176                            6682,
4177                            6619
4178                        ],
4179                        [
4180                            6693,
4181                            6572
4182                        ],
4183                        [
4184                            6657,
4185                            6540
4186                        ],
4187                        [
4188                            6652,
4189                            6507
4190                        ],
4191                        [
4192                            6622,
4193                            6498
4194                        ],
4195                        [
4196                            6608,
4197                            6438
4198                        ],
4199                        [
4200                            6583,
4201                            6411
4202                        ],
4203                        [
4204                            6531,
4205                            6450
4206                        ],
4207                        [
4208                            6485,
4209                            6413
4210                        ],
4211                        [
4212                            6485,
4213                            6390
4214                        ],
4215                        [
4216                            6444,
4217                            6379
4218                        ],
4219                        [
4220                            6426,
4221                            6401
4222                        ],
4223                        [
4224                            6359,
4225                            6356
4226                        ],
4227                        [
4228                            6303,
4229                            6376
4230                        ],
4231                        [
4232                            6269,
4233                            6350
4234                        ],
4235                        [
4236                            6209,
4237                            6363
4238                        ],
4239                        [
4240                            6179,
4241                            6328
4242                        ],
4243                        [
4244                            6176,
4245                            6404
4246                        ],
4247                        [
4248                            6194,
4249                            6422
4250                        ],
4251                        [
4252                            6222,
4253                            6503
4254                        ],
4255                        [
4256                            6244,
4257                            6520
4258                        ],
4259                        [
4260                            6266,
4261                            6585
4262                        ],
4263                        [
4264                            6254,
4265                            6638
4266                        ],
4267                        [
4268                            6226,
4269                            6674
4270                        ],
4271                        [
4272                            6247,
4273                            6739
4274                        ],
4275                        [
4276                            6192,
4277                            7351
4278                        ]
4279                    ]
4280                ]
4281            }
4282        },
4283        {
4284            "type": "Feature",
4285            "id": "US.VT",
4286            "properties": {
4287                "hc-group": "admin1",
4288                "hc-middle-x": 0.77,
4289                "hc-middle-y": 0.38,
4290                "hc-key": "us-vt",
4291                "hc-a2": "VT",
4292                "labelrank": "0",
4293                "hasc": "US.VT",
4294                "woe-id": "2347604",
4295                "state-fips": "50",
4296                "fips": "US50",
4297                "postal-code": "VT",
4298                "name": "Vermont",
4299                "country": "United States of America",
4300                "region": "Northeast",
4301                "longitude": "-72.7317",
4302                "woe-name": "Vermont",
4303                "latitude": "44.0886",
4304                "woe-label": "Vermont, US, United States",
4305                "type": "State"
4306            },
4307            "geometry": {
4308                "type": "MultiPolygon",
4309                "coordinates": [
4310                    [
4311                        [
4312                            [
4313                                9727,
4314                                8766
4315                            ],
4316                            [
4317                                10595,
4318                                8766
4319                            ],
4320                            [
4321                                10595,
4322                                8239
4323                            ],
4324                            [
4325                                9727,
4326                                8239
4327                            ],
4328                            [
4329                                9727,
4330                                8766
4331                            ]
4332                        ]
4333                    ],
4334                    [
4335                        [
4336                            [
4337                                8922,
4338                                8096
4339                            ],
4340                            [
4341                                8856,
4342                                8080
4343                            ],
4344                            [
4345                                8807,
4346                                8284
4347                            ],
4348                            [
4349                                8772,
4350                                8287
4351                            ],
4352                            [
4353                                8772,
4354                                8328
4355                            ],
4356                            [
4357                                8740,
4358                                8402
4359                            ],
4360                            [
4361                                8748,
4362                                8453
4363                            ],
4364                            [
4365                                8739,
4366                                8514
4367                            ],
4368                            [
4369                                8720,
4370                                8537
4371                            ],
4372                            [
4373                                8695,
4374                                8646
4375                            ],
4376                            [
4377                                8811,
4378                                8677
4379                            ],
4380                            [
4381                                9024,
4382                                8736
4383                            ],
4384                            [
4385                                9020,
4386                                8661
4387                            ],
4388                            [
4389                                9045,
4390                                8629
4391                            ],
4392                            [
4393                                9033,
4394                                8585
4395                            ],
4396                            [
4397                                8978,
4398                                8526
4399                            ],
4400                            [
4401                                8986,
4402                                8490
4403                            ],
4404                            [
4405                                8981,
4406                                8392
4407                            ],
4408                            [
4409                                8964,
4410                                8320
4411                            ],
4412                            [
4413                                8979,
4414                                8261
4415                            ],
4416                            [
4417                                8979,
4418                                8148
4419                            ],
4420                            [
4421                                9005,
4422                                8115
4423                            ],
4424                            [
4425                                9005,
4426                                8115
4427                            ],
4428                            [
4429                                8922,
4430                                8096
4431                            ]
4432                        ]
4433                    ]
4434                ]
4435            }
4436        },
4437        {
4438            "type": "Feature",
4439            "id": "US.AR",
4440            "properties": {
4441                "hc-group": "admin1",
4442                "hc-middle-x": 0.47,
4443                "hc-middle-y": 0.43,
4444                "hc-key": "us-ar",
4445                "hc-a2": "AR",
4446                "labelrank": "0",
4447                "hasc": "US.AR",
4448                "woe-id": "2347562",
4449                "state-fips": "5",
4450                "fips": "US05",
4451                "postal-code": "AR",
4452                "name": "Arkansas",
4453                "country": "United States of America",
4454                "region": "South",
4455                "longitude": "-92.14279999999999",
4456                "woe-name": "Arkansas",
4457                "latitude": "34.7563",
4458                "woe-label": "Arkansas, US, United States",
4459                "type": "State"
4460            },
4461            "geometry": {
4462                "type": "Polygon",
4463                "coordinates": [
4464                    [
4465                        [
4466                            4975,
4467                            5016
4468                        ],
4469                        [
4470                            4971,
4471                            5157
4472                        ],
4473                        [
4474                            4910,
4475                            5157
4476                        ],
4477                        [
4478                            4875,
4479                            5180
4480                        ],
4481                        [
4482                            4877,
4483                            5632
4484                        ],
4485                        [
4486                            4835,
4487                            5920
4488                        ],
4489                        [
4490                            5767,
4491                            5957
4492                        ],
4493                        [
4494                            5790,
4495                            5904
4496                        ],
4497                        [
4498                            5731,
4499                            5821
4500                        ],
4501                        [
4502                            5868,
4503                            5834
4504                        ],
4505                        [
4506                            5871,
4507                            5791
4508                        ],
4509                        [
4510                            5827,
4511                            5763
4512                        ],
4513                        [
4514                            5835,
4515                            5714
4516                        ],
4517                        [
4518                            5798,
4519                            5670
4520                        ],
4521                        [
4522                            5802,
4523                            5602
4524                        ],
4525                        [
4526                            5762,
4527                            5567
4528                        ],
4529                        [
4530                            5770,
4531                            5547
4532                        ],
4533                        [
4534                            5730,
4535                            5520
4536                        ],
4537                        [
4538                            5706,
4539                            5470
4540                        ],
4541                        [
4542                            5709,
4543                            5414
4544                        ],
4545                        [
4546                            5635,
4547                            5340
4548                        ],
4549                        [
4550                            5647,
4551                            5309
4552                        ],
4553                        [
4554                            5609,
4555                            5297
4556                        ],
4557                        [
4558                            5620,
4559                            5250
4560                        ],
4561                        [
4562                            5583,
4563                            5215
4564                        ],
4565                        [
4566                            5607,
4567                            5162
4568                        ],
4569                        [
4570                            5598,
4571                            5120
4572                        ],
4573                        [
4574                            5618,
4575                            5077
4576                        ],
4577                        [
4578                            5605,
4579                            5041
4580                        ],
4581                        [
4582                            5563,
4583                            5038
4584                        ],
4585                        [
4586                            4975,
4587                            5016
4588                        ]
4589                    ]
4590                ]
4591            }
4592        },
4593        {
4594            "type": "Feature",
4595            "id": "US.TX",
4596            "properties": {
4597                "hc-group": "admin1",
4598                "hc-middle-x": 0.69,
4599                "hc-middle-y": 0.52,
4600                "hc-key": "us-tx",
4601                "hc-a2": "TX",
4602                "labelrank": "0",
4603                "hasc": "US.TX",
4604                "woe-id": "2347602",
4605                "state-fips": "48",
4606                "fips": "US48",
4607                "postal-code": "TX",
4608                "name": "Texas",
4609                "country": "United States of America",
4610                "region": "South",
4611                "longitude": "-98.7607",
4612                "woe-name": "Texas",
4613                "latitude": "31.131",
4614                "woe-label": "Texas, US, United States",
4615                "type": "State"
4616            },
4617            "geometry": {
4618                "type": "MultiPolygon",
4619                "coordinates": [
4620                    [
4621                        [
4622                            [
4623                                4875,
4624                                5180
4625                            ],
4626                            [
4627                                4910,
4628                                5157
4629                            ],
4630                            [
4631                                4971,
4632                                5157
4633                            ],
4634                            [
4635                                4975,
4636                                5016
4637                            ],
4638                            [
4639                                4980,
4640                                4752
4641                            ],
4642                            [
4643                                5033,
4644                                4679
4645                            ],
4646                            [
4647                                5031,
4648                                4646
4649                            ],
4650                            [
4651                                5105,
4652                                4506
4653                            ],
4654                            [
4655                                5093,
4656                                4447
4657                            ],
4658                            [
4659                                5059,
4660                                4380
4661                            ],
4662                            [
4663                                5065,
4664                                4253
4665                            ],
4666                            [
4667                                5047,
4668                                4228
4669                            ],
4670                            [
4671                                5018,
4672                                4172
4673                            ],
4674                            [
4675                                5032,
4676                                4146
4677                            ],
4678                            [
4679                                4989,
4680                                4147
4681                            ],
4682                            [
4683                                4854,
4684                                4084
4685                            ],
4686                            [
4687                                4875,
4688                                4116
4689                            ],
4690                            [
4691                                4831,
4692                                4102
4693                            ],
4694                            [
4695                                4842,
4696                                4162
4697                            ],
4698                            [
4699                                4778,
4700                                4141
4701                            ],
4702                            [
4703                                4769,
4704                                4106
4705                            ],
4706                            [
4707                                4839,
4708                                4052
4709                            ],
4710                            [
4711                                4789,
4712                                4023
4713                            ],
4714                            [
4715                                4801,
4716                                4063
4717                            ],
4718                            [
4719                                4739,
4720                                3976
4721                            ],
4722                            [
4723                                4638,
4724                                3901
4725                            ],
4726                            [
4727                                4557,
4728                                3881
4729                            ],
4730                            [
4731                                4544,
4732                                3857
4733                            ],
4734                            [
4735                                4451,
4736                                3804
4737                            ],
4738                            [
4739                                4448,
4740                                3787
4741                            ],
4742                            [
4743                                4381,
4744                                3749
4745                            ],
4746                            [
4747                                4308,
4748                                3672
4749                            ],
4750                            [
4751                                4340,
4752                                3735
4753                            ],
4754                            [
4755                                4307,
4756                                3756
4757                            ],
4758                            [
4759                                4261,
4760                                3721
4761                            ],
4762                            [
4763                                4306,
4764                                3712
4765                            ],
4766                            [
4767                                4263,
4768                                3655
4769                            ],
4770                            [
4771                                4221,
4772                                3658
4773                            ],
4774                            [
4775                                4249,
4776                                3617
4777                            ],
4778                            [
4779                                4213,
4780                                3527
4781                            ],
4782                            [
4783                                4195,
4784                                3545
4785                            ],
4786                            [
4787                                4141,
4788                                3510
4789                            ],
4790                            [
4791                                4206,
4792                                3511
4793                            ],
4794                            [
4795                                4178,
4796                                3442
4797                            ],
4798                            [
4799                                4232,
4800                                3206
4801                            ],
4802                            [
4803                                4272,
4804                                3164
4805                            ],
4806                            [
4807                                4203,
4808                                3135
4809                            ],
4810                            [
4811                                4114,
4812                                3192
4813                            ],
4814                            [
4815                                4013,
4816                                3198
4817                            ],
4818                            [
4819                                3979,
4820                                3230
4821                            ],
4822                            [
4823                                3915,
4824                                3245
4825                            ],
4826                            [
4827                                3878,
4828                                3279
4829                            ],
4830                            [
4831                                3810,
4832                                3292
4833                            ],
4834                            [
4835                                3795,
4836                                3375
4837                            ],
4838                            [
4839                                3727,
4840                                3467
4841                            ],
4842                            [
4843                                3715,
4844                                3534
4845                            ],
4846                            [
4847                                3721,
4848                                3603
4849                            ],
4850                            [
4851                                3677,
4852                                3628
4853                            ],
4854                            [
4855                                3595,
4856                                3762
4857                            ],
4858                            [
4859                                3548,
4860                                3801
4861                            ],
4862                            [
4863                                3525,
4864                                3881
4865                            ],
4866                            [
4867                                3477,
4868                                3970
4869                            ],
4870                            [
4871                                3469,
4872                                4021
4873                            ],
4874                            [
4875                                3393,
4876                                4097
4877                            ],
4878                            [
4879                                3411,
4880                                4119
4881                            ],
4882                            [
4883                                3365,
4884                                4132
4885                            ],
4886                            [
4887                                3310,
4888                                4204
4889                            ],
4890                            [
4891                                3150,
4892                                4220
4893                            ],
4894                            [
4895                                3103,
4896                                4248
4897                            ],
4898                            [
4899                                3082,
4900                                4218
4901                            ],
4902                            [
4903                                3018,
4904                                4214
4905                            ],
4906                            [
4907                                2959,
4908                                4096
4909                            ],
4910                            [
4911                                2967,
4912                                4083
4913                            ],
4914                            [
4915                                2896,
4916                                4024
4917                            ],
4918                            [
4919                                2861,
4920                                4031
4921                            ],
4922                            [
4923                                2754,
4924                                4113
4925                            ],
4926                            [
4927                                2695,
4928                                4134
4929                            ],
4930                            [
4931                                2651,
4932                                4187
4933                            ],
4934                            [
4935                                2595,
4936                                4230
4937                            ],
4938                            [
4939                                2567,
4940                                4305
4941                            ],
4942                            [
4943                                2573,
4944                                4370
4945                            ],
4946                            [
4947                                2512,
4948                                4503
4949                            ],
4950                            [
4951                                2437,
4952                                4557
4953                            ],
4954                            [
4955                                2309,
4956                                4714
4957                            ],
4958                            [
4959                                2275,
4960                                4731
4961                            ],
4962                            [
4963                                2239,
4964                                4806
4965                            ],
4966                            [
4967                                2208,
4968                                4823
4969                            ],
4970                            [
4971                                2181,
4972                                4887
4973                            ],
4974                            [
4975                                2976,
4976                                4810
4977                            ],
4978                            [
4979                                3072,
4980                                5970
4981                            ],
4982                            [
4983                                3081,
4984                                5975
4985                            ],
4986                            [
4987                                3707,
4988                                5936
4989                            ],
4990                            [
4991                                3686,
4992                                5437
4993                            ],
4994                            [
4995                                3753,
4996                                5388
4997                            ],
4998                            [
4999                                3842,
5000                                5388
5001                            ],
5002                            [
5003                                3856,
5004                                5341
5005                            ],
5006                            [
5007                                3908,
5008                                5334
5009                            ],
5010                            [
5011                                4007,
5012                                5296
5013                            ],
5014                            [
5015                                4093,
5016                                5310
5017                            ],
5018                            [
5019                                4121,
5020                                5246
5021                            ],
5022                            [
5023                                4181,
5024                                5268
5025                            ],
5026                            [
5027                                4248,
5028                                5227
5029                            ],
5030                            [
5031                                4283,
5032                                5247
5033                            ],
5034                            [
5035                                4304,
5036                                5199
5037                            ],
5038                            [
5039                                4312,
5040                                5234
5041                            ],
5042                            [
5043                                4347,
5044                                5258
5045                            ],
5046                            [
5047                                4360,
5048                                5237
5049                            ],
5050                            [
5051                                4405,
5052                                5248
5053                            ],
5054                            [
5055                                4474,
5056                                5191
5057                            ],
5058                            [
5059                                4559,
5060                                5242
5061                            ],
5062                            [
5063                                4595,
5064                                5233
5065                            ],
5066                            [
5067                                4632,
5068                                5257
5069                            ],
5070                            [
5071                                4685,
5072                                5235
5073                            ],
5074                            [
5075                                4714,
5076                                5260
5077                            ],
5078          
5078                  [
5079                                4790,
5080                                5207
5081                            ],
5082                            [
5083                                4875,
5084                                5180
5085                            ]
5086                        ]
5087                    ],
5088                    [
5089                        [
5090                            [
5091                                4269,
5092                                3610
5093                            ],
5094                            [
5095                                4220,
5096                                3493
5097                            ],
5098                            [
5099                                4219,
5100                                3420
5101                            ],
5102                            [
5103                                4245,
5104                                3297
5105                            ],
5106                            [
5107                                4214,
5108                                3394
5109                            ],
5110                            [
5111                                4222,
5112                                3530
5113                            ],
5114                            [
5115                                4269,
5116                                3610
5117                            ]
5118                        ]
5119                    ]
5120                ]
5121            }
5122        },
5123        {
5124            "type": "Feature",
5125            "id": "US.RI",
5126            "properties": {
5127                "hc-group": "admin1",
5128                "hc-middle-x": 0.69,
5129                "hc-middle-y": 0.82,
5130                "hc-key": "us-ri",
5131                "hc-a2": "RI",
5132                "labelrank": "0",
5133                "hasc": "US.RI",
5134                "woe-id": "2347598",
5135                "state-fips": "44",
5136                "fips": "US44",
5137                "postal-code": "RI",
5138                "name": "Rhode Island",
5139                "country": "United States of America",
5140                "region": "Northeast",
5141                "longitude": "-71.5082",
5142                "woe-name": "Rhode Island",
5143                "latitude": "41.6242",
5144                "woe-label": "Rhode Island, US, United States",
5145                "type": "State"
5146            },
5147            "geometry": {
5148                "type": "MultiPolygon",
5149                "coordinates": [
5150                    [
5151                        [
5152                            [
5153                                9727,
5154                                7092
5155                            ],
5156                            [
5157                                10595,
5158                                7092
5159                            ],
5160                            [
5161                                10595,
5162                                6565
5163                            ],
5164                            [
5165                                9727,
5166                                6565
5167                            ],
5168                            [
5169                                9727,
5170                                7092
5171                            ]
5172                        ]
5173                    ],
5174                    [
5175                        [
5176                            [
5177                                9339,
5178                                7878
5179                            ],
5180                            [
5181                                9325,
5182                                7871
5183                            ],
5184                            [
5185                                9314,
5186                                7915
5187                            ],
5188                            [
5189                                9327,
5190                                7915
5191                            ],
5192                            [
5193                                9339,
5194                                7878
5195                            ]
5196                        ]
5197                    ],
5198                    [
5199                        [
5200                            [
5201                                9177,
5202                                7968
5203                            ],
5204                            [
5205                                9254,
5206                                7990
5207                            ],
5208                            [
5209                                9278,
5210                                7938
5211                            ],
5212                            [
5213                                9304,
5214                                7921
5215                            ],
5216                            [
5217                                9320,
5218                                7866
5219                            ],
5220                            [
5221                                9285,
5222                                7851
5223                            ],
5224                            [
5225                                9279,
5226                                7822
5227                            ],
5228                            [
5229                                9216,
5230                                7790
5231                            ],
5232                            [
5233                                9212,
5234                                7845
5235                            ],
5236                            [
5237                                9177,
5238                                7968
5239                            ]
5240                        ]
5241                    ]
5242                ]
5243            }
5244        },
5245        {
5246            "type": "Feature",
5247            "id": "US.AL",
5248            "properties": {
5249                "hc-group": "admin1",
5250                "hc-middle-x": 0.47,
5251                "hc-middle-y": 0.42,
5252                "hc-key": "us-al",
5253                "hc-a2": "AL",
5254                "labelrank": "0",
5255                "hasc": "US.AL",
5256                "woe-id": "2347559",
5257                "state-fips": "1",
5258                "fips": "US01",
5259                "postal-code": "AL",
5260                "name": "Alabama",
5261                "country": "United States of America",
5262                "region": "South",
5263                "longitude": "-86.7184",
5264                "woe-name": "Alabama",
5265                "latitude": "32.8551",
5266                "woe-label": "Alabama, US, United States",
5267                "type": "State"
5268            },
5269            "geometry": {
5270                "type": "Polygon",
5271                "coordinates": [
5272                    [
5273                        [
5274                            6487,
5275                            4443
5276                        ],
5277                        [
5278                            6440,
5279                            4378
5280                        ],
5281                        [
5282                            6291,
5283                            4361
5284                        ],
5285                        [
5286                            6336,
5287                            4375
5288                        ],
5289                        [
5290                            6317,
5291                            4398
5292                        ],
5293                        [
5294                            6267,
5295                            4399
5296                        ],
5297                        [
5298                            6216,
5299                            4788
5300                        ],
5301                        [
5302                            6236,
5303                            5574
5304                        ],
5305                        [
5306                            6215,
5307                            5600
5308                        ],
5309                        [
5310                            6213,
5311                            5603
5312                        ],
5313                        [
5314                            6762,
5315                            5652
5316                        ],
5317                        [
5318                            6912,
5319                            5135
5320                        ],
5321                        [
5322                            6947,
5323                            5053
5324                        ],
5325                        [
5326                            6998,
5327                            4970
5328                        ],
5329                        [
5330                            6970,
5331                            4930
5332                        ],
5333                        [
5334                            6958,
5335                            4846
5336                        ],
5337                        [
5338                            6990,
5339                            4774
5340                        ],
5341                        [
5342                            6983,
5343                            4704
5344                        ],
5345                        [
5346                            7015,
5347                            4637
5348                        ],
5349                        [
5350                            6436,
5351                            4574
5352                        ],
5353                        [
5354                            6431,
5355                            4541
5356                        ],
5357                        [
5358                            6487,
5359                            4486
5360                        ],
5361                        [
5362                            6487,
5363                            4443
5364                        ]
5365                    ]
5366                ]
5367            }
5368        },
5369        {
5370            "type": "Feature",
5371            "id": "US.MS",
5372            "properties": {
5373                "hc-group": "admin1",
5374                "hc-middle-x": 0.51,
5375                "hc-middle-y": 0.48,
5376                "hc-key": "us-ms",
5377                "hc-a2": "MS",
5378                "labelrank": "0",
5379                "hasc": "US.MS",
5380                "woe-id": "2347583",
5381                "state-fips": "28",
5382                "fips": "US28",
5383                "postal-code": "MS",
5384                "name": "Mississippi",
5385                "country": "United States of America",
5386                "region": "South",
5387                "longitude": "-89.71890000000001",
5388                "woe-name": "Mississippi",
5389                "latitude": "32.8657",
5390                "woe-label": "Mississippi, US, United States",
5391                "type": "State"
5392            },
5393            "geometry": {
5394                "type": "Polygon",
5395                "coordinates": [
5396                    [
5397                        [
5398                            6267,
5399                            4399
5400                        ],
5401                        [
5402                            6164,
5403                            4396
5404                        ],
5405                        [
5406                            6059,
5407                            4360
5408                        ],
5409                        [
5410                            6017,
5411                            4328
5412                        ],
5413                        [
5414                            5936,
5415                            4451
5416                        ],
5417                        [
5418                            5955,
5419                            4536
5420                        ],
5421                        [
5422                            5523,
5423                            4510
5424                        ],
5425                        [
5426                            5540,
5427                            4526
5428                        ],
5429                        [
5430                            5522,
5431                            4581
5432                        ],
5433                        [
5434                            5545,
5435                            4585
5436                        ],
5437                        [
5438                            5545,
5439                            4642
5440                        ],
5441                        [
5442                            5565,
5443                            4662
5444                        ],
5445                        [
5446                            5584,
5447                            4738
5448                        ],
5449                        [
5450                            5636,
5451                            4781
5452                        ],
5453                        [
5454                            5670,
5455                            4868
5456                        ],
5457                        [
5458                            5629,
5459                            4895
5460                        ],
5461                        [
5462                            5611,
5463                            4977
5464                        ],
5465                        [
5466                            5627,
5467                            5018
5468                        ],
5469                        [
5470                            5605,
5471                            5041
5472                        ],
5473                        [
5474                            5618,
5475                            5077
5476                        ],
5477                        [
5478                            5598,
5479                            5120
5480                        ],
5481                        [
5482                            5607,
5483                            5162
5484                        ],
5485                        [
5486                            5583,
5487                            5215
5488                        ],
5489                        [
5490                            5620,
5491                            5250
5492                        ],
5493                        [
5494                            5609,
5495                            5297
5496                        ],
5497                        [
5498                            5647,
5499                            5309
5500                        ],
5501                        [
5502                            5635,
5503                            5340
5504                        ],
5505                        [
5506                            5709,
5507                            5414
5508                        ],
5509                        [
5510                            5706,
5511                            5470
5512                        ],
5513                        [
5514                            5730,
5515                            5520
5516                        ],
5517                        [
5518                            5770,
5519                            5547
5520                        ],
5521                        [
5522                            5762,
5523                            5567
5524                        ],
5525                        [
5526                            6122,
5527                            5592
5528                        ],
5529                        [
5530                            6215,
5531                            5600
5532                        ],
5533                        [
5534                            6236,
5535                            5574
5536                        ],
5537                        [
5538                            6216,
5539                            4788
5540                        ],
5541                        [
5542                            6267,
5543                            4399
5544                        ]
5545                    ]
5546                ]
5547            }
5548        },
5549        {
5550            "type": "Feature",
5551            "id": "US.NC",
5552            "properties": {
5553                "hc-group": "admin1",
5554                "hc-middle-x": 0.62,
5555                "hc-middle-y": 0.5,
5556                "hc-key": "us-nc",
5557                "hc-a2": "NC",
5558                "labelrank": "0",
5559                "hasc": "US.NC",
5560                "woe-id": "2347592",
5561                "state-fips": "37",
5562                "fips": "US37",
5563                "postal-code": "NC",
5564                "name": "North Carolina",
5565                "country": "United States of America",
5566                "region": "South",
5567                "longitude": "-78.866",
5568                "woe-name": "North Carolina",
5569                "latitude": "35.6152",
5570                "woe-label": "North Carolina, US, United States",
5571                "type": "State"
5572            },
5573            "geometry": {
5574                "type": "MultiPolygon",
5575                "coordinates": [
5576                    [
5577                        [
5578                            [
5579                                8716,
5580                                6394
5581                            ],
5582                            [
5583                                8720,
5584                                6381
5585                            ],
5586                            [
5587                                8694,
5588                                6389
5589                            ],
5590                            [
5591                                8694,
5592                                6389
5593                            ],
5594                            [
5595                                8704,
5596                                6391
5597                            ],
5598                            [
5599                                8705,
5600                                6390
5601                            ],
5602                            [
5603                                8709,
5604                                6392
5605                            ],
5606                            [
5607                                8712,
5608                                6393
5609                            ],
5610                            [
5611                                8716,
5612                                6394
5613                            ]
5614                        ]
5615                    ],
5616                    [
5617                        [
5618                            [
5619                                8727,
5620                                6396
5621                            ],
5622                            [
5623                                8756,
5624                                6332
5625                            ],
5626                            [
5627                                8852,
5628                                6203
5629                            ],
5630                            [
5631                                8782,
5632                                6278
5633                            ],
5634                            [
5635                                8722,
5636                                6395
5637                            ],
5638                            [
5639                                8724,
5640                                6396
5641                            ],
5642                            [
5643                                8727,
5644                                6396
5645                            ]
5646                        ]
5647                    ],
5648                    [
5649                        [
5650                            [
5651                                7532,
5652                                6183
5653                            ],
5654                            [
5655                                7623,
5656                                6187
5657                            ],
5658                            [
5659                                7858,
5660                                6219
5661                            ],
5662                            [
5663                                8691,
5664                                6388
5665                            ],
5666                            [
5667                                8768,
5668                                6281
5669                            ],
5670                            [
5671                                8670,
5672                                6318
5673                            ],
5674                            [
5675                                8707,
5676                                6291
5677                            ],
5678                            [
5679                                8620,
5680                                6230
5681                            ],
5682                            [
5683                                8584,
5684                                6234
5685                            ],
5686                            [
5687                                8581,
5688                                6204
5689                            ],
5690                            [
5691                                8719,
5692                                6244
5693                            ],
5694                            [
5695                                8742,
5696                                6161
5697                            ],
5698                            [
5699                                8737,
5700                                6222
5701                            ],
5702                            [
5703                                8760,
5704                                6252
5705                            ],
5706                            [
5707                                8795,
5708                                6220
5709                            ],
5710                            [
5711                                8797,
5712                                6153
5713                            ],
5714                            [
5715                                8772,
5716                                6164
5717                            ],
5718                            [
5719                                8750,
5720                                6091
5721                            ],
5722                            [
5723                                8709,
5724                                6073
5725                            ],
5726                            [
5727                                8638,
5728                                6097
5729                            ],
5730                            [
5731                                8638,
5732                                6070
5733                            ],
5734                            [
5735                                8551,
5736                                6078
5737                            ],
5738                            [
5739                                8664,
5740                                6053
5741                            ],
5742                            [
5743                                8635,
5744                                6009
5745                            ],
5746                            [
5747                                8661,
5748                                6003
5749                            ],
5750                            [
5751                                8610,
5752                                5957
5753                            ],
5754                            [
5755                                8551,
5756                                5988
5757                            ],
5758                            [
5759                                8590,
5760                                5949
5761                            ],
5762                            [
5763                                8631,
5764                                5940
5765                            ],
5766                            [
5767                                8676,
5768                                5955
5769                            ],
5770                            [
5771                                8686,
5772                                5995
5773                            ],
5774                            [
5775                                8721,
5776                                5956
5777                            ],
5778                            [
5779                                8670,
5780                                5890
5781                            ],
5782                            [
5783                                8565,
5784                                5865
5785                            ],
5786                            [
5787                                8469,
5788                                5764
5789                            ],
5790                            [
5791                                8443,
5792                                5714
5793                            ],
5794                            [
5795                                8432,
5796                                5616
5797                            ],
5798                            [
5799                                8368,
5800                                5624
5801                            ],
5802                            [
5803                                8302,
5804                                5600
5805                            ],
5806                            [
5807                                8029,
5808                                5790
5809                            ],
5810                            [
5811                                7791,
5812                                5756
5813                            ],
5814                            [
5815                                7782,
5816                                5790
5817                            ],
5818                            [
5819                                7714,
5820                                5830
5821                            ],
5822                            [
5823                                7457,
5824                                5802
5825                            ],
5826                            [
5827                                7290,
5828                                5724
5829                            ],
5830                            [
5831                                7210,
5832                                5711
5833                            ],
5834                            [
5835                                7034,
5836                                5685
5837                            ],
5838                            [
5839                                7038,
5840                                5756
5841                            ],
5842                            [
5843                                7073,
5844                                5762
5845                            ],
5846                            [
5847                                7085,
5848                                5807
5849                            ],
5850                            [
5851                                7131,
5852                                5847
5853                            ],
5854                            [
5855                                7188,
5856                                5859
5857                            ],
5858                            [
5859                                7269,
5860                                5928
5861                            ],
5862                            [
5863                                7298,
5864                                5973
5865                            ],
5866                            [
5867                                7352,
5868                                6010
5869                            ],
5870                            [
5871                                7365,
5872                                5989
5873                            ],
5874                            [
5875                                7437,
5876                                6050
5877                            ],
5878                            [
5879                                7464,
5880                                6038
5881                            ],
5882                            [
5883                                7490,
5884                                6093
5885                            ],
5886                            [
5887                                7523,
5888                                6123
5889                            ],
5890                            [
5891                                7532,
5892                                6183
5893                            ]
5894                        ]
5895                    ]
5896                ]
5897            }
5898        },
5899        {
5900            "type": "Feature",
5901            "id": "US.VA",
5902            "properties": {
5903                "hc-group": "admin1",
5904                "hc-middle-x": 0.64,
5905                "hc-middle-y": 0.54,
5906                "hc-key": "us-va",
5907                "hc-a2": "VA",
5908                "labelrank": "0",
5909                "hasc": "US.VA",
5910                "woe-id": "2347605",
5911                "state-fips": "51",
5912                "fips": "US51",
5913                "postal-code": "VA",
5914                "name": "Virginia",
5915                "country": "United States of America",
5916                "region": "South",
5917                "longitude": "-78.2431",
5918                "woe-name": "Virginia",
5919                "latitude": "37.7403",
5920                "woe-label": "Virginia, US, United States",
5921                "type": "State"
5922            },
5923            "geometry": {
5924                "type": "MultiPolygon",
5925                "coordinates": [
5926                    [
5927                        [
5928                            [
5929                                8722,
5930                                6395
5931                            ],
5932                            [
5933                                8696,
5934                                6432
5935                            ],
5936                            [
5937                                8704,
5938                                6391
5939                            ],
5940                            [
5941                                8694,
5942                                6389
5943                            ],
5944                            [
5945                                8694,
5946                                6389
5947                            ],
5948                            [
5949                                8686,
5950                                6398
5951                            ],
5952                            [
5953                                8691,
5954                                6388
5955                            ],
5956                            [
5957                                7858,
5958                                6219
5959                            ],
5960                            [
5961                                7623,
5962                                6187
5963                            ],
5964                            [
5965                                7532,
5966                                6183
5967                            ],
5968                            [
5969                                7472,
5970                                6170
5971                            ],
5972                            [
5973                                7116,
5974                                6120
5975                            ],
5976                            [
5977                                7221,
5978                                6173
5979                            ],
5980                            [
5981                                7268,
5982                                6217
5983                            ],
5984                            [
5985                                7309,
5986                                6294
5987                            ],
5988                            [
5989                                7363,
5990                                6332
5991                            ],
5992                            [
5993                                7431,
5994                                6411
5995                            ],
5996                            [
5997                                7470,
5998                                6351
5999                            ],
6000                            [
6001                                7530,
6002                                6341
6003                            ],
6004                            [
6005                                7567,
6006                                6378
6007                            ],
6008                            [
6009                                7595,
6010                                6360
6011                            ],
6012                            [
6013                                7649,
6014                                6382
6015                            ],
6016                            [
6017                                7664,
6018                                6419
6019                            ],
6020                            [
6021                                7690,
6022                                6412
6023                            ],
6024                            [
6025                                7773,
6026                                6459
6027                            ],
6028                            [
6029                                7767,
6030                                6505
6031                            ],
6032                            [
6033                                7840,
6034                                6674
6035                            ],
6036                            [
6037                                7857,
6038                                6759
6039                            ],
6040                            [
6041                                7932,
6042                                6729
6043                            ],
6044                            [
6045                                7974,
6046                                6848
6047                            ],
6048                            [
6049                                7998,
6050                                6837
6051                            ],
6052                            [
6053                                8048,
6054                                6900
6055                            ],
6056                            [
6057                                8072,
6058                                6952
6059                            ],
6060                            [
6061                                8076,
6062                                7028
6063                            ],
6064                            [
6065                                8188,
6066                                6969
6067                            ],
6068                            [
6069                                8198,
6070                                7020
6071                            ],
6072                            [
6073                                8256,
6074                                7009
6075                            ],
6076                            [
6077                                8251,
6078                                6984
6079                            ],
6080                            [
6081                                8341,
6082                                6945
6083                            ],
6084                            [
6085                                8347,
6086                                6939
6087                            ],
6088                            [
6089                                8353,
6090                                6939
6091                            ],
6092                            [
6093                                8367,
6094                                6892
6095                            ],
6096                            [
6097                                8334,
6098                                6870
6099                            ],
6100                            [
6101                                8323,
6102                                6802
6103                            ],
6104                            [
6105                                8347,
6106                                6786
6107                            ],
6108                            [
6109                                8385,
6110                                6812
6111                            ],
6112                            [
6113                                8429,
6114                                6763
6115                            ],
6116                            [
6117                                8484,
6118                                6768
6119                            ],
6120                            [
6121                                8507,
6122                                6740
6123                            ],
6124                            [
6125                                8571,
6126                                6721
6127                            ],
6128                            [
6129                                8572,
6130                                6647
6131                            ],
6132                            [
6133                                8536,
6134                                6648
6135                            ],
6136                            [
6137                                8499,
6138                                6683
6139                            ],
6140                            [
6141                                8431,
6142                                6711
6143                            ],
6144                            [
6145                                8532,
6146                                6636
6147                            ],
6148                            [
6149                                8597,
6150                                6606
6151                            ],
6152                            [
6153                                8561,
6154                                6578
6155                            ],
6156                            [
6157                                8558,
6158                                6548
6159                            ],
6160                            [
6161                                8577,
6162                                6545
6163                            ],
6164                            [
6165                                8611,
6166                                6494
6167                            ],
6168                            [
6169                                8586,
6170                                6478
6171                            ],
6172                            [
6173                                8526,
6174                                6534
6175                            ],
6176                            [
6177                                8449,
6178                                6533
6179                            ],
6180                            [
6181                                8518,
6182                                6510
6183                            ],
6184                            [
6185                                8580,
6186                                6459
6187                            ],
6188                            [
6189                                8619,
6190                                6482
6191                            ],
6192                            [
6193                                8679,
6194                                6482
6195                            ],
6196                            [
6197                                8727,
6198                                6396
6199                            ],
6200                            [
6201                                8724,
6202                                6396
6203                            ],
6204                            [
6205                                8722,
6206                                6395
6207                            ]
6208                        ],
6209                        [
6210                            [
6211                                8558,
6212                                6548
6213                            ],
6214                            [
6215                                8552,
6216                                6548
6217                            ],
6218                            [
6219                                8552,
6220                                6548
6221                            ],
6222                            [
6223                                8552,
6224                                6548
6225                            ],
6226                            [
6227                                8484,
6228                                6605
6229                            ],
6230                            [
6231                                8532,
6232                                6551
6233                            ],
6234                            [
6235                                8552,
6236                                6548
6237                            ],
6238                            [
6239                                8552,
6240                                6548
6241                            ],
6242                            [
6243                                8552,
6244                                6548
6245                            ],
6246                            [
6247                                8557,
6248                                6544
6249                            ],
6250                            [
6251                                8558,
6252                                6548
6253                            ]
6254                        ]
6255                    ],
6256                    [
6257                        [
6258                            [
6259                                8709,
6260                                6392
6261                            ],
6262                            [
6263                                8713,
6264                                6400
6265                            ],
6266                            [
6267                                8716,
6268                                6394
6269                            ],
6270                            [
6271                                8712,
6272                                6393
6273                            ],
6274                            [
6275                                8709,
6276                                6392
6277                            ]
6278                        ]
6279                    ],
6280                    [
6281                        [
6282                            [
6283                                8765,
6284                                6797
6285                            ],
6286                            [
6287                                8756,
6288                                6760
6289                            ],
6290                            [
6291                                8761,
6292                                6796
6293                            ],
6294                            [
6295                                8765,
6296                                6797
6297                            ]
6298                        ]
6299                    ],
6300                    [
6301                        [
6302                            [
6303                                8688,
6304                                6764
6305                            ],
6306                            [
6307                                8691,
6308                                6772
6309                            ],
6310                            [
6311                                8739,
6312                                6789
6313                            ],
6314                            [
6315                                8726,
6316                                6737
6317                            ],
6318             
6318               [
6319                                8674,
6320                                6599
6321                            ],
6322                            [
6323                                8696,
6324                                6561
6325                            ],
6326                            [
6327                                8678,
6328                                6528
6329                            ],
6330                            [
6331                                8652,
6332                                6583
6333                            ],
6334                            [
6335                                8652,
6336                                6652
6337                            ],
6338                            [
6339                                8688,
6340                                6764
6341                            ]
6342                        ]
6343                    ]
6344                ]
6345            }
6346        },
6347        {
6348            "type": "Feature",
6349            "id": "US.IA",
6350            "properties": {
6351                "hc-group": "admin1",
6352                "hc-middle-x": 0.35,
6353                "hc-middle-y": 0.49,
6354                "hc-key": "us-ia",
6355                "hc-a2": "IA",
6356                "labelrank": "0",
6357                "hasc": "US.IA",
6358                "woe-id": "2347574",
6359                "state-fips": "19",
6360                "fips": "US19",
6361                "postal-code": "IA",
6362                "name": "Iowa",
6363                "country": "United States of America",
6364                "region": "Midwest",
6365                "longitude": "-93.3891",
6366                "woe-name": "Iowa",
6367                "latitude": "42.0423",
6368                "woe-label": "Iowa, US, United States",
6369                "type": "State"
6370            },
6371            "geometry": {
6372                "type": "Polygon",
6373                "coordinates": [
6374                    [
6375                        [
6376                            5575,
6377                            7508
6378                        ],
6379                        [
6380                            5625,
6381                            7441
6382                        ],
6383                        [
6384                            5672,
6385                            7411
6386                        ],
6387                        [
6388                            5671,
6389                            7332
6390                        ],
6391                        [
6392                            5646,
6393                            7276
6394                        ],
6395                        [
6396                            5579,
6397                            7232
6398                        ],
6399                        [
6400                            5523,
6401                            7224
6402                        ],
6403                        [
6404                            5509,
6405                            7160
6406                        ],
6407                        [
6408                            5536,
6409                            7132
6410                        ],
6411                        [
6412                            5535,
6413                            7098
6414                        ],
6415                        [
6416                            5496,
6417                            7020
6418                        ],
6419                        [
6420                            5458,
6421                            7004
6422                        ],
6423                        [
6424                            5449,
6425                            6947
6426                        ],
6427                        [
6428                            5449,
6429                            6947
6430                        ],
6431                        [
6432                            5449,
6433                            6947
6434                        ],
6435                        [
6436                            5389,
6437                            7006
6438                        ],
6439                        [
6440                            5120,
6441                            6985
6442                        ],
6443                        [
6444                            4846,
6445                            6977
6446                        ],
6447                        [
6448                            4592,
6449                            6981
6450                        ],
6451                        [
6452                            4591,
6453                            6981
6454                        ],
6455                        [
6456                            4579,
6457                            7031
6458                        ],
6459                        [
6460                            4571,
6461                            7165
6462                        ],
6463                        [
6464                            4559,
6465                            7206
6466                        ],
6467                        [
6468                            4529,
6469                            7228
6470                        ],
6471                        [
6472                            4533,
6473                            7291
6474                        ],
6475                        [
6476                            4515,
6477                            7341
6478                        ],
6479                        [
6480                            4478,
6481                            7398
6482                        ],
6483                        [
6484                            4469,
6485                            7474
6486                        ],
6487                        [
6488                            4453,
6489                            7479
6490                        ],
6491                        [
6492                            4423,
6493                            7540
6494                        ],
6495                        [
6496                            4459,
6497                            7636
6498                        ],
6499                        [
6500                            4438,
6501                            7663
6502                        ],
6503                        [
6504                            4433,
6505                            7734
6506                        ],
6507                        [
6508                            4459,
6509                            7735
6510                        ],
6511                        [
6512                            5137,
6513                            7745
6514                        ],
6515                        [
6516                            5445,
6517                            7758
6518                        ],
6519                        [
6520                            5479,
6521                            7702
6522                        ],
6523                        [
6524                            5465,
6525                            7670
6526                        ],
6527                        [
6528                            5494,
6529                            7563
6530                        ],
6531                        [
6532                            5561,
6533                            7544
6534                        ],
6535                        [
6536                            5577,
6537                            7513
6538                        ],
6539                        [
6540                            5575,
6541                            7508
6542                        ],
6543                        [
6544                            5575,
6545                            7508
6546                        ]
6547                    ]
6548                ]
6549            }
6550        },
6551        {
6552            "type": "Feature",
6553            "id": "US.MD",
6554            "properties": {
6555                "hc-group": "admin1",
6556                "hc-middle-x": 0.84,
6557                "hc-middle-y": 0.91,
6558                "hc-key": "us-md",
6559                "hc-a2": "MD",
6560                "labelrank": "0",
6561                "hasc": "US.MD",
6562                "woe-id": "2347579",
6563                "state-fips": "24",
6564                "fips": "US24",
6565                "postal-code": "MD",
6566                "name": "Maryland",
6567                "country": "United States of America",
6568                "region": "South",
6569                "longitude": "-77.0454",
6570                "woe-name": "Maryland",
6571                "latitude": "39.3874",
6572                "woe-label": "Maryland, US, United States",
6573                "type": "State"
6574            },
6575            "geometry": {
6576                "type": "MultiPolygon",
6577                "coordinates": [
6578                    [
6579                        [
6580                            [
6581                                9727,
6582                                4860
6583                            ],
6584                            [
6585                                10595,
6586                                4860
6587                            ],
6588                            [
6589                                10595,
6590                                4333
6591                            ],
6592                            [
6593                                9727,
6594                                4333
6595                            ],
6596                            [
6597                                9727,
6598                                4860
6599                            ]
6600                        ]
6601                    ],
6602                    [
6603                        [
6604                            [
6605                                8761,
6606                                6796
6607                            ],
6608                            [
6609                                8769,
6610                                6819
6611                            ],
6612                            [
6613                                8765,
6614                                6797
6615                            ],
6616                            [
6617                                8761,
6618                                6796
6619                            ]
6620                        ]
6621                    ],
6622                    [
6623                        [
6624                            [
6625                                8779,
6626                                6915
6627                            ],
6628                            [
6629                                8779,
6630                                6884
6631                            ],
6632                            [
6633                                8777,
6634                                6914
6635                            ],
6636                            [
6637                                8777,
6638                                6914
6639                            ],
6640                            [
6641                                8779,
6642                                6915
6643                            ]
6644                        ]
6645                    ],
6646                    [
6647                        [
6648                            [
6649                                8739,
6650                                6789
6651                            ],
6652                            [
6653                                8691,
6654                                6772
6655                            ],
6656                            [
6657                                8688,
6658                                6764
6659                            ],
6660                            [
6661                                8647,
6662                                6746
6663                            ],
6664                            [
6665                                8650,
6666                                6806
6667                            ],
6668                            [
6669                                8590,
6670                                6833
6671                            ],
6672                            [
6673                                8592,
6674                                6815
6675                            ],
6676                            [
6677                                8525,
6678                                6862
6679                            ],
6680                            [
6681                                8581,
6682                                6899
6683                            ],
6684                            [
6685                                8555,
6686                                6926
6687                            ],
6688                            [
6689                                8511,
6690                                6936
6691                            ],
6692                            [
6693                                8544,
6694                                6974
6695                            ],
6696                            [
6697                                8512,
6698                                6986
6699                            ],
6700                            [
6701                                8496,
6702                                7036
6703                            ],
6704                            [
6705                                8530,
6706                                7108
6707                            ],
6708                            [
6709                                8537,
6710                                7165
6711                            ],
6712                            [
6713                                8497,
6714                                7093
6715                            ],
6716                            [
6717                                8472,
6718                                7099
6719                            ],
6720                            [
6721                                8469,
6722                                7056
6723                            ],
6724                            [
6725                                8432,
6726                                7052
6727                            ],
6728                            [
6729                                8471,
6730                                7014
6731                            ],
6732                            [
6733                                8458,
6734                                6959
6735                            ],
6736                            [
6737                                8483,
6738                                6868
6739                            ],
6740                            [
6741                                8513,
6742                                6820
6743                            ],
6744                            [
6745                                8462,
6746                                6849
6747                            ],
6748                            [
6749                                8543,
6750                                6778
6751                            ],
6752                            [
6753                                8548,
6754                                6753
6755                            ],
6756                            [
6757                                8491,
6758                                6782
6759                            ],
6760                            [
6761                                8433,
6762                                6785
6763                            ],
6764                            [
6765                                8382,
6766                                6834
6767                            ],
6768                            [
6769                                8354,
6770                                6797
6771                            ],
6772                            [
6773                                8335,
6774                                6827
6775                            ],
6776                            [
6777                                8370,
6778                                6891
6779                            ],
6780                            [
6781                                8367,
6782                                6916
6783                            ],
6784                            [
6785                                8385,
6786                                6943
6787                            ],
6788                            [
6789                                8341,
6790                                6945
6791                            ],
6792                            [
6793                                8251,
6794                                6984
6795                            ],
6796                            [
6797                                8256,
6798                                7009
6799                            ],
6800                            [
6801                                8198,
6802                                7020
6803                            ],
6804                            [
6805                                8162,
6806                                7087
6807                            ],
6808                            [
6809                                8101,
6810                                7099
6811                            ],
6812                            [
6813                                8046,
6814                                7067
6815                            ],
6816                            [
6817                                8043,
6818                                7043
6819                            ],
6820                            [
6821                                8000,
6822                                7038
6823                            ],
6824                            [
6825                                7977,
6826                                7057
6827                            ],
6828                            [
6829                                7949,
6830                                7003
6831                            ],
6832                            [
6833                                7928,
6834                                7007
6835                            ],
6836                            [
6837                                7857,
6838                                6922
6839                            ],
6840                            [
6841                                7835,
6842                                7053
6843                            ],
6844                            [
6845                                8176,
6846                                7119
6847                            ],
6848                            [
6849                                8559,
6850                                7201
6851                            ],
6852                            [
6853                                8650,
6854                                6887
6855                            ],
6856                            [
6857                                8771,
6858                                6913
6859                            ],
6860                            [
6861                                8770,
6862                                6856
6863                            ],
6864                            [
6865                                8753,
6866                                6848
6867                            ],
6868                            [
6869                                8739,
6870                                6789
6871                            ]
6872                        ]
6873                    ]
6874                ]
6875            }
6876        },
6877        {
6878            "type": "Feature",
6879            "id": "US.DE",
6880            "properties": {
6881                "hc-group": "admin1",
6882                "hc-middle-x": 0.79,
6883                "hc-middle-y": 0.89,
6884                "hc-key": "us-de",
6885                "hc-a2": "DE",
6886                "labelrank": "0",
6887                "hasc": "US.DE",
6888                "woe-id": "2347566",
6889                "state-fips": "10",
6890                "fips": "US10",
6891                "postal-code": "DE",
6892                "name": "Delaware",
6893                "country": "United States of America",
6894                "region": "South",
6895                "longitude": "-75.41119999999999",
6896                "woe-name": "Delaware",
6897                "latitude": "38.8657",
6898                "woe-label": "Delaware, US, United States",
6899                "type": "State"
6900            },
6901            "geometry": {
6902                "type": "MultiPolygon",
6903                "coordinates": [
6904                    [
6905                        [
6906                            [
6907                                9727,
6908                                5418
6909                            ],
6910                            [
6911                                10595,
6912                                5418
6913                            ],
6914                            [
6915                                10595,
6916                                4891
6917                            ],
6918                            [
6919                                9727,
6920                                4891
6921                            ],
6922                            [
6923                                9727,
6924                                5418
6925                            ]
6926                        ]
6927                    ],
6928                    [
6929                        [
6930                            [
6931                                8777,
6932                                6914
6933                            ],
6934                            [
6935                                8771,
6936                                6915
6937                            ],
6938                            [
6939                                8771,
6940                                6913
6941                            ],
6942                            [
6943                                8650,
6944                                6887
6945                            ],
6946                            [
6947                                8559,
6948                                7201
6949                            ],
6950                            [
6951                                8589,
6952                                7239
6953                            ],
6954                            [
6955                                8625,
6956                                7239
6957                            ],
6958                            [
6959                                8601,
6960                                7183
6961                            ],
6962                            [
6963                                8613,
6964                                7145
6965                            ],
6966                            [
6967                                8652,
6968                                7114
6969                            ],
6970                            [
6971                                8675,
6972                                7051
6973                            ],
6974                            [
6975                                8735,
6976                                6995
6977                            ],
6978                            [
6979                                8751,
6980                                6999
6981                            ],
6982                            [
6983                                8779,
6984                                6915
6985                            ],
6986                            [
6987                                8777,
6988                                6914
6989                            ],
6990                            [
6991                                8777,
6992                                6914
6993                            ]
6994                        ]
6995                    ]
6996                ]
6997            }
6998        },
6999        {
7000            "type": "Feature",
7001            "id": "US.PA",
7002            "properties": {
7003                "hc-group": "admin1",
7004                "hc-middle-x": 0.5,
7005                "hc-middle-y": 0.49,
7006                "hc-key": "us-pa",
7007                "hc-a2": "PA",
7008                "labelrank": "0",
7009                "hasc": "US.PA",
7010                "woe-id": "2347597",
7011                "state-fips": "42",
7012                "fips": "US42",
7013                "postal-code": "PA",
7014                "name": "Pennsylvania",
7015                "country": "United States of America",
7016                "region": "Northeast",
7017                "longitude": "-77.60939999999999",
7018                "woe-name": "Pennsylvania",
7019                "latitude": "40.8601",
7020                "woe-label": "Pennsylvania, US, United States",
7021                "type": "State"
7022            },
7023            "geometry": {
7024                "type": "Polygon",
7025                "coordinates": [
7026                    [
7027                        [
7028                            8611,
7029                            7549
7030                        ],
7031                        [
7032                            8632,
7033                            7530
7034                        ],
7035                        [
7036                            8615,
7037                            7490
7038                        ],
7039                        [
7040                            8627,
7041                            7443
7042                        ],
7043                        [
7044                            8646,
7045                            7444
7046                        ],
7047                        [
7048                            8739,
7049                            7361
7050                        ],
7051                        [
7052                            8691,
7053                            7310
7054                        ],
7055                        [
7056                            8673,
7057                            7276
7058                        ],
7059                        [
7060                            8625,
7061                            7239
7062                        ],
7063                        [
7064                            8589,
7065                            7239
7066                        ],
7067                        [
7068                            8559,
7069                            7201
7070                        ],
7071                        [
7072                            8176,
7073                            7119
7074                        ],
7075                        [
7076                            7835,
7077                            7053
7078                        ],
7079                        [
7080                            7630,
7081                            7017
7082                        ],
7083                        [
7084                            7589,
7085                            7253
7086                        ],
7087                        [
7088                            7589,
7089                            7253
7090                        ],
7091                        [
7092                            7530,
7093                            7595
7094                        ],
7095                        [
7096                            7556,
7097                            7610
7098                        ],
7099                        [
7100                            7662,
7101                            7693
7102                        ],
7103                        [
7104                            7674,
7105                            7625
7106                        ],
7107                        [
7108                            8514,
7109                            7797
7110                        ],
7111                        [
7112                            8573,
7113                            7765
7114                        ],
7115                        [
7116                            8588,
7117                            7712
7118                        ],
7119                        [
7120                            8673,
7121                            7663
7122                        ],
7123                        [
7124                            8673,
7125                            7663
7126                        ],
7127                        [
7128                            8611,
7129                            7549
7130                        ]
7131                    ]
7132                ]
7133            }
7134        },
7135        {
7136            "type": "Feature",
7137            "id": "US.NJ",
7138            "properties": {
7139                "hc-group": "admin1",
7140                "hc-middle-x": 0.78,
7141                "hc-middle-y": 0.88,
7142                "hc-key": "us-nj",
7143                "hc-a2": "NJ",
7144                "labelrank": "0",
7145                "hasc": "US.NJ",
7146                "woe-id": "2347589",
7147                "state-fips": "34",
7148                "fips": "US34",
7149                "postal-code": "NJ",
7150                "name": "New Jersey",
7151                "country": "United States of America",
7152                "region": "Northeast",
7153                "longitude": "-74.4653",
7154                "woe-name": "New Jersey",
7155                "latitude": "40.0449",
7156                "woe-label": "New Jersey, US, United States",
7157                "type": "State"
7158            },
7159            "geometry": {
7160                "type": "MultiPolygon",
7161                "coordinates": [
7162                    [
7163                        [
7164                            [
7165                                9727,
7166                                5976
7167                            ],
7168                            [
7169                                10595,
7170                                5976
7171                            ],
7172                            [
7173                                10595,
7174                                5449
7175                            ],
7176                            [
7177                                9727,
7178                                5449
7179                            ],
7180                            [
7181                                9727,
7182                                5976
7183                            ]
7184                        ]
7185                    ],
7186                    [
7187                        [
7188                            [
7189                                8611,
7190                                7549
7191                            ],
7192                            [
7193                                8673,
7194                                7663
7195                            ],
7196                            [
7197                                8759,
7198                                7635
7199                            ],
7200                            [
7201                                8846,
7202                                7608
7203                            ],
7204                            [
7205                                8840,
7206                                7532
7207                            ],
7208                            [
7209                                8810,
7210                                7504
7211                            ],
7212                            [
7213                                8805,
7214                                7466
7215                            ],
7216                            [
7217                                8866,
7218                                7456
7219                            ],
7220                            [
7221                                8875,
7222                                7438
7223                            ],
7224                            [
7225                                8886,
7226                                7281
7227                            ],
7228                            [
7229                                8853,
7230                                7228
7231                            ],
7232                            [
7233                                8849,
7234                                7172
7235                            ],
7236                            [
7237                                8812,
7238                                7122
7239                            ],
7240                            [
7241                                8784,
7242                                7047
7243                            ],
7244                            [
7245                                8766,
7246                                7040
7247                            ],
7248                            [
7249                                8769,
7250                                7097
7251                            ],
7252                            [
7253                                8716,
7254                                7095
7255                            ],
7256                            [
7257                                8623,
7258                                7151
7259                            ],
7260                            [
7261                                8610,
7262                                7186
7263                            ],
7264                            [
7265                                8624,
7266                                7231
7267                            ],
7268                            [
7269                                8676,
7270                                7269
7271                            ],
7272                            [
7273                                8691,
7274                                7310
7275                            ],
7276                            [
7277                                8739,
7278                                7361
7279                            ],
7280                            [
7281                                8646,
7282                                7444
7283                            ],
7284                            [
7285                                8627,
7286                                7443
7287                            ],
7288                            [
7289                                8615,
7290                                7490
7291                            ],
7292                            [
7293                                8632,
7294                                7530
7295                            ],
7296                            [
7297                                8611,
7298                                7549
7299                            ]
7300                        ]
7301                    ]
7302                ]
7303            }
7304        },
7305        {
7306            "type": "Feature",
7307            "id": "US.NY",
7308            "properties": {
7309                "hc-group": "admin1",
7310                "hc-middle-x": 0.54,
7311                "hc-middle-y": 0.49,
7312                "hc-key": "us-ny",
7313                "hc-a2": "NY",
7314                "labelrank": "0",
7315                "hasc": "US.NY",
7316                "woe-id": "2347591",
7317                "state-fips": "36",
7318                "fips": "US36",
7319                "postal-code": "NY",
7320                "name": "New York",
7321                "country": "United States of America",
7322                "region": "Northeast",
7323                "longitude": "-75.32420000000001",
7324                "woe-name": "New York",
7325                "latitude": "43.1988",
7326                "woe-label": "New York, US, United States",
7327                "type": "State"
7328            },
7329            "geometry": {
7330                "type": "Polygon",
7331                "coordinates": [
7332                    [
7333                        [
7334                            8673,
7335                            7663
7336                        ],
7337                        [
7338                            8588,
7339                            7712
7340                        ],
7341                        [
7342                            8573,
7343                            7765
7344                        ],
7345                        [
7346                            8514,
7347                            7797
7348                        ],
7349                        [
7350                            7674,
7351                            7625
7352                        ],
7353                        [
7354                            7662,
7355                            7693
7356                        ],
7357                        [
7358                            7763,
7359                            7795
7360                        ],
7361                        [
7362                            7803,
7363                            7872
7364                        ],
7365                        [
7366                            7754,
7367                            7932
7368                        ],
7369                        [
7370                            7747,
7371                            7976
7372                        ],
7373                        [
7374                            7812,
7375                            8010
7376                        ],
7377                        [
7378                            7918,
7379                            8040
7380                        ],
7381                        [
7382                            7988,
7383                            8041
7384                        ],
7385                        [
7386                            8031,
7387            
7387                8026
7388                        ],
7389                        [
7390                            8061,
7391                            8043
7392                        ],
7393                        [
7394                            8133,
7395                            8055
7396                        ],
7397                        [
7398                            8180,
7399                            8080
7400                        ],
7401                        [
7402                            8224,
7403                            8141
7404                        ],
7405                        [
7406                            8264,
7407                            8164
7408                        ],
7409                        [
7410                            8243,
7411                            8232
7412                        ],
7413                        [
7414                            8257,
7415                            8274
7416                        ],
7417                        [
7418                            8225,
7419                            8259
7420                        ],
7421                        [
7422                            8202,
7423                            8296
7424                        ],
7425                        [
7426                            8230,
7427                            8345
7428                        ],
7429                        [
7430                            8280,
7431                            8379
7432                        ],
7433                        [
7434                            8297,
7435                            8437
7436                        ],
7437                        [
7438                            8358,
7439                            8526
7440                        ],
7441                        [
7442                            8422,
7443                            8581
7444                        ],
7445                        [
7446                            8453,
7447                            8585
7448                        ],
7449                        [
7450                            8695,
7451                            8646
7452                        ],
7453                        [
7454                            8720,
7455                            8537
7456                        ],
7457                        [
7458                            8739,
7459                            8514
7460                        ],
7461                        [
7462                            8748,
7463                            8453
7464                        ],
7465                        [
7466                            8740,
7467                            8402
7468                        ],
7469                        [
7470                            8772,
7471                            8328
7472                        ],
7473                        [
7474                            8772,
7475                            8287
7476                        ],
7477                        [
7478                            8807,
7479                            8284
7480                        ],
7481                        [
7482                            8856,
7483                            8080
7484                        ],
7485                        [
7486                            8853,
7487                            7901
7488                        ],
7489                        [
7490                            8860,
7491                            7896
7492                        ],
7493                        [
7494                            8896,
7495                            7702
7496                        ],
7497                        [
7498                            8912,
7499                            7685
7500                        ],
7501                        [
7502                            8874,
7503                            7645
7504                        ],
7505                        [
7506                            8896,
7507                            7623
7508                        ],
7509                        [
7510                            8881,
7511                            7575
7512                        ],
7513                        [
7514                            8930,
7515                            7617
7516                        ],
7517                        [
7518                            8982,
7519                            7620
7520                        ],
7521                        [
7522                            9002,
7523                            7641
7524                        ],
7525                        [
7526                            9094,
7527                            7671
7528                        ],
7529                        [
7530                            9134,
7531                            7722
7532                        ],
7533                        [
7534                            9173,
7535                            7697
7536                        ],
7537                        [
7538                            9177,
7539                            7721
7540                        ],
7541                        [
7542                            9184,
7543                            7702
7544                        ],
7545                        [
7546                            9231,
7547                            7730
7548                        ],
7549                        [
7550                            9141,
7551                            7649
7552                        ],
7553                        [
7554                            9083,
7555                            7619
7556                        ],
7557                        [
7558                            9032,
7559                            7570
7560                        ],
7561                        [
7562                            8936,
7563                            7519
7564                        ],
7565                        [
7566                            8857,
7567                            7498
7568                        ],
7569                        [
7570                            8812,
7571                            7468
7572                        ],
7573                        [
7574                            8814,
7575                            7503
7576                        ],
7577                        [
7578                            8840,
7579                            7506
7580                        ],
7581                        [
7582                            8858,
7583                            7554
7584                        ],
7585                        [
7586                            8843,
7587                            7544
7588                        ],
7589                        [
7590                            8846,
7591                            7608
7592                        ],
7593                        [
7594                            8759,
7595                            7635
7596                        ],
7597                        [
7598                            8695,
7599                            7656
7600                        ],
7601                        [
7602                            8673,
7603                            7663
7604                        ],
7605                        [
7606                            8673,
7607                            7663
7608                        ]
7609                    ]
7610                ]
7611            }
7612        },
7613        {
7614            "type": "Feature",
7615            "id": "US.ID",
7616            "properties": {
7617                "hc-group": "admin1",
7618                "hc-middle-x": 0.51,
7619                "hc-middle-y": 0.75,
7620                "hc-key": "us-id",
7621                "hc-a2": "ID",
7622                "labelrank": "0",
7623                "hasc": "US.ID",
7624                "woe-id": "2347571",
7625                "state-fips": "16",
7626                "fips": "US16",
7627                "postal-code": "ID",
7628                "name": "Idaho",
7629                "country": "United States of America",
7630                "region": "West",
7631                "longitude": "-114.133",
7632                "woe-name": "Idaho",
7633                "latitude": "43.7825",
7634                "woe-label": "Idaho, US, United States",
7635                "type": "State"
7636            },
7637            "geometry": {
7638                "type": "Polygon",
7639                "coordinates": [
7640                    [
7641                        [
7642                            926,
7643                            9593
7644                        ],
7645                        [
7646                            1093,
7647                            9555
7648                        ],
7649                        [
7650                            1036,
7651                            9301
7652                        ],
7653                        [
7654                            1076,
7655                            9210
7656                        ],
7657                        [
7658                            1061,
7659                            9142
7660                        ],
7661                        [
7662                            1117,
7663                            9085
7664                        ],
7665                        [
7666                            1172,
7667                            8979
7668                        ],
7669                        [
7670                            1170,
7671                            8959
7672                        ],
7673                        [
7674                            1219,
7675                            8896
7676                        ],
7677                        [
7678                            1258,
7679                            8897
7680                        ],
7681                        [
7682                            1253,
7683                            8859
7684                        ],
7685                        [
7686                            1219,
7687                            8796
7688                        ],
7689                        [
7690                            1204,
7691                            8727
7692                        ],
7693                        [
7694                            1211,
7695                            8698
7696                        ],
7697                        [
7698                            1177,
7699                            8675
7700                        ],
7701                        [
7702                            1167,
7703                            8620
7704                        ],
7705                        [
7706                            1200,
7707                            8590
7708                        ],
7709                        [
7710                            1278,
7711                            8630
7712                        ],
7713                        [
7714                            1303,
7715                            8596
7716                        ],
7717                        [
7718                            1303,
7719                            8522
7720                        ],
7721                        [
7722                            1338,
7723                            8434
7724                        ],
7725                        [
7726                            1326,
7727                            8419
7728                        ],
7729                        [
7730                            1347,
7731                            8377
7732                        ],
7733                        [
7734                            1374,
7735                            8375
7736                        ],
7737                        [
7738                            1391,
7739                            8331
7740                        ],
7741                        [
7742                            1392,
7743                            8280
7744                        ],
7745                        [
7746                            1415,
7747                            8254
7748                        ],
7749                        [
7750                            1451,
7751                            8281
7752                        ],
7753                        [
7754                            1508,
7755                            8261
7756                        ],
7757                        [
7758                            1536,
7759                            8282
7760                        ],
7761                        [
7762                            1614,
7763                            8258
7764                        ],
7765                        [
7766                            1671,
7767                            8261
7768                        ],
7769                        [
7770                            1686,
7771                            8296
7772                        ],
7773                        [
7774                            1713,
7775                            8295
7776                        ],
7777                        [
7778                            1750,
7779                            8226
7780                        ],
7781                        [
7782                            1677,
7783                            7785
7784                        ],
7785                        [
7786                            1643,
7787                            7585
7788                        ],
7789                        [
7790                            1393,
7791                            7629
7792                        ],
7793                        [
7794                            1073,
7795                            7690
7796                        ],
7797                        [
7798                            897,
7799                            7727
7800                        ],
7801                        [
7802                            510,
7803                            7813
7804                        ],
7805                        [
7806                            616,
7807                            8265
7808                        ],
7809                        [
7810                            662,
7811                            8361
7812                        ],
7813                        [
7814                            615,
7815                            8403
7816                        ],
7817                        [
7818                            624,
7819                            8450
7820                        ],
7821                        [
7822                            718,
7823                            8545
7824                        ],
7825                        [
7826                            776,
7827                            8646
7828                        ],
7829                        [
7830                            823,
7831                            8698
7832                        ],
7833                        [
7834                            821,
7835                            8744
7836                        ],
7837                        [
7838                            785,
7839                            8775
7840                        ],
7841                        [
7842                            774,
7843                            8822
7844                        ],
7845                        [
7846                            779,
7847                            8870
7848                        ],
7849                        [
7850                            767,
7851                            8925
7852                        ],
7853                        [
7854                            926,
7855                            9593
7856                        ]
7857                    ]
7858                ]
7859            }
7860        },
7861        {
7862            "type": "Feature",
7863            "id": "US.SD",
7864            "properties": {
7865                "hc-group": "admin1",
7866                "hc-middle-x": 0.51,
7867                "hc-middle-y": 0.44,
7868                "hc-key": "us-sd",
7869                "hc-a2": "SD",
7870                "labelrank": "0",
7871                "hasc": "US.SD",
7872                "woe-id": "2347600",
7873                "state-fips": "46",
7874                "fips": "US46",
7875                "postal-code": "SD",
7876                "name": "South Dakota",
7877                "country": "United States of America",
7878                "region": "Midwest",
7879                "longitude": "-100.255",
7880                "woe-name": "South Dakota",
7881                "latitude": "44.4711",
7882                "woe-label": "South Dakota, US, United States",
7883                "type": "State"
7884            },
7885            "geometry": {
7886                "type": "Polygon",
7887                "coordinates": [
7888                    [
7889                        [
7890                            3010,
7891                            7672
7892                        ],
7893                        [
7894                            3019,
7895                            7770
7896                        ],
7897                        [
7898                            3056,
7899                            8191
7900                        ],
7901                        [
7902                            3059,
7903                            8191
7904                        ],
7905                        [
7906                            3080,
7907                            8436
7908                        ],
7909                        [
7910                            4231,
7911                            8374
7912                        ],
7913                        [
7914                            4444,
7915                            8372
7916                        ],
7917                        [
7918                            4429,
7919                            8325
7920                        ],
7921                        [
7922                            4387,
7923                            8283
7924                        ],
7925                        [
7926                            4419,
7927                            8232
7928                        ],
7929                        [
7930                            4462,
7931                            8203
7932                        ],
7933                        [
7934                            4459,
7935                            7735
7936                        ],
7937                        [
7938                            4433,
7939                            7734
7940                        ],
7941                        [
7942                            4438,
7943                            7663
7944                        ],
7945                        [
7946                            4459,
7947                            7636
7948                        ],
7949                        [
7950                            4423,
7951                            7540
7952                        ],
7953                        [
7954                            4453,
7955                            7479
7956                        ],
7957                        [
7958                            4409,
7959                            7521
7960                        ],
7961                        [
7962                            4330,
7963                            7551
7964                        ],
7965                        [
7966                            4297,
7967                            7577
7968                        ],
7969                        [
7970                            4194,
7971                            7574
7972                        ],
7973                        [
7974                            4148,
7975                            7558
7976                        ],
7977                        [
7978                            4071,
7979                            7611
7980                        ],
7981                        [
7982                            3010,
7983                            7672
7984                        ]
7985                    ]
7986                ]
7987            }
7988        },
7989        {
7990            "type": "Feature",
7991            "id": "US.CT",
7992            "properties": {
7993                "hc-group": "admin1",
7994                "hc-middle-x": 0.75,
7995                "hc-middle-y": 0.87,
7996                "hc-key": "us-ct",
7997                "hc-a2": "CT",
7998                "labelrank": "0",
7999                "hasc": "US.CT",
8000                "woe-id": "2347565",
8001                "state-fips": "9",
8002                "fips": "US09",
8003                "postal-code": "CT",
8004                "name": "Connecticut",
8005                "country": "United States of America",
8006                "region": "Northeast",
8007                "longitude": "-72.7594",
8008                "woe-name": "Connecticut",
8009                "latitude": "41.6486",
8010                "woe-label": "Connecticut, US, United States",
8011                "type": "State"
8012            },
8013            "geometry": {
8014                "type": "MultiPolygon",
8015                "coordinates": [
8016                    [
8017                        [
8018                            [
8019                                9727,
8020                                6534
8021                            ],
8022                            [
8023                                10595,
8024                                6534
8025                            ],
8026                            [
8027                                10595,
8028                                6007
8029                            ],
8030                            [
8031                                9727,
8032                                6007
8033                            ],
8034                            [
8035                                9727,
8036                                6534
8037                            ]
8038                        ]
8039                    ],
8040                    [
8041                        [
8042                            [
8043                                9216,
8044                                7790
8045                            ],
8046                            [
8047                                9204,
8048                                7796
8049                            ],
8050                            [
8051                                9095,
8052                                7743
8053                            ],
8054                            [
8055                                9023,
8056                                7721
8057                            ],
8058                            [
8059                                8972,
8060                                7689
8061                            ],
8062                            [
8063                                8896,
8064                                7623
8065                            ],
8066                            [
8067                                8874,
8068                                7645
8069                            ],
8070                            [
8071                                8912,
8072                                7685
8073                            ],
8074                            [
8075                                8896,
8076                                7702
8077                            ],
8078                            [
8079                                8860,
8080                                7896
8081                            ],
8082                            [
8083                                8997,
8084                                7925
8085                            ],
8086                            [
8087                                9177,
8088                                7968
8089                            ],
8090                            [
8091                                9212,
8092                                7845
8093                            ],
8094                            [
8095                                9216,
8096                                7790
8097                            ]
8098                        ]
8099                    ]
8100                ]
8101            }
8102        },
8103        {
8104            "type": "Feature",
8105            "id": "US.NH",
8106            "properties": {
8107                "hc-group": "admin1",
8108                "hc-middle-x": 0.73,
8109                "hc-middle-y": 0.77,
8110                "hc-key": "us-nh",
8111                "hc-a2": "NH",
8112                "labelrank": "0",
8113                "hasc": "US.NH",
8114                "woe-id": "2347588",
8115                "state-fips": "33",
8116                "fips": "US33",
8117                "postal-code": "NH",
8118                "name": "New Hampshire",
8119                "country": "United States of America",
8120                "region": "Northeast",
8121                "longitude": "-71.6301",
8122                "woe-name": "New Hampshire",
8123                "latitude": "43.5993",
8124                "woe-label": "New Hampshire, US, United States",
8125                "type": "State"
8126            },
8127            "geometry": {
8128                "type": "MultiPolygon",
8129                "coordinates": [
8130                    [
8131                        [
8132                            [
8133                                9727,
8134                                8208
8135                            ],
8136                            [
8137                                10595,
8138                                8208
8139                            ],
8140                            [
8141                                10595,
8142                                7681
8143                            ],
8144                            [
8145                                9727,
8146                                7681
8147                            ],
8148                            [
8149                                9727,
8150                                8208
8151                            ]
8152                        ]
8153                    ],
8154                    [
8155                        [
8156                            [
8157                                9298,
8158                                8291
8159                            ],
8160                            [
8161                                9306,
8162                                8288
8163                            ],
8164                            [
8165                                9300,
8166                                8236
8167                            ],
8168                            [
8169                                9242,
8170                                8201
8171                            ],
8172                            [
8173                                9222,
8174                                8166
8175                            ],
8176                            [
8177                                9005,
8178                                8115
8179                            ],
8180                            [
8181                                9005,
8182                                8115
8183                            ],
8184                            [
8185                                8979,
8186                                8148
8187                            ],
8188                            [
8189                                8979,
8190                                8261
8191                            ],
8192                            [
8193                                8964,
8194                                8320
8195                            ],
8196                            [
8197                                8981,
8198                                8392
8199                            ],
8200                            [
8201                                8986,
8202                                8490
8203                            ],
8204                            [
8205                                8978,
8206                                8526
8207                            ],
8208                            [
8209                                9033,
8210                                8585
8211                            ],
8212                            [
8213                                9045,
8214                                8629
8215                            ],
8216                            [
8217                                9020,
8218                                8661
8219                            ],
8220                            [
8221                                9024,
8222                                8736
8223                            ],
8224                            [
8225                                9036,
8226                                8814
8227                            ],
8228                            [
8229                                9079,
8230                                8830
8231                            ],
8232                            [
8233                                9225,
8234                                8399
8235                            ],
8236                            [
8237                                9235,
8238                                8354
8239                            ],
8240                            [
8241                                9298,
8242                                829
82421
8243                            ]
8244                        ]
8245                    ]
8246                ]
8247            }
8248        },
8249        {
8250            "type": "Feature",
8251            "id": "US.KY",
8252            "properties": {
8253                "hc-group": "admin1",
8254                "hc-middle-x": 0.65,
8255                "hc-middle-y": 0.5,
8256                "hc-key": "us-ky",
8257                "hc-a2": "KY",
8258                "labelrank": "0",
8259                "hasc": "US.KY",
8260                "woe-id": "2347576",
8261                "state-fips": "21",
8262                "fips": "US21",
8263                "postal-code": "KY",
8264                "name": "Kentucky",
8265                "country": "United States of America",
8266                "region": "South",
8267                "longitude": "-85.5729",
8268                "woe-name": "Kentucky",
8269                "latitude": "37.3994",
8270                "woe-label": "Kentucky, US, United States",
8271                "type": "State"
8272            },
8273            "geometry": {
8274                "type": "MultiPolygon",
8275                "coordinates": [
8276                    [
8277                        [
8278                            [
8279                                5893,
8280                                5966
8281                            ],
8282                            [
8283                                5890,
8284                                5980
8285                            ],
8286                            [
8287                                5907,
8288                                5967
8289                            ],
8290                            [
8291                                5893,
8292                                5966
8293                            ]
8294                        ]
8295                    ],
8296                    [
8297                        [
8298                            [
8299                                5921,
8300                                5968
8301                            ],
8302                            [
8303                                5932,
8304                                6005
8305                            ],
8306                            [
8307                                5956,
8308                                5988
8309                            ],
8310                            [
8311                                5976,
8312                                6033
8313                            ],
8314                            [
8315                                5975,
8316                                6097
8317                            ],
8318                            [
8319                                5962,
8320                                6117
8321                            ],
8322                            [
8323                                5987,
8324                                6157
8325                            ],
8326                            [
8327                                6015,
8328                                6162
8329                            ],
8330                            [
8331                                6105,
8332                                6131
8333                            ],
8334                            [
8335                                6102,
8336                                6218
8337                            ],
8338                            [
8339                                6171,
8340                                6241
8341                            ],
8342                            [
8343                                6159,
8344                                6283
8345                            ],
8346                            [
8347                                6179,
8348                                6328
8349                            ],
8350                            [
8351                                6209,
8352                                6363
8353                            ],
8354                            [
8355                                6269,
8356                                6350
8357                            ],
8358                            [
8359                                6303,
8360                                6376
8361                            ],
8362                            [
8363                                6359,
8364                                6356
8365                            ],
8366                            [
8367                                6426,
8368                                6401
8369                            ],
8370                            [
8371                                6444,
8372                                6379
8373                            ],
8374                            [
8375                                6485,
8376                                6390
8377                            ],
8378                            [
8379                                6485,
8380                                6413
8381                            ],
8382                            [
8383                                6531,
8384                                6450
8385                            ],
8386                            [
8387                                6583,
8388                                6411
8389                            ],
8390                            [
8391                                6608,
8392                                6438
8393                            ],
8394                            [
8395                                6622,
8396                                6498
8397                            ],
8398                            [
8399                                6652,
8400                                6507
8401                            ],
8402                            [
8403                                6657,
8404                                6540
8405                            ],
8406                            [
8407                                6693,
8408                                6572
8409                            ],
8410                            [
8411                                6682,
8412                                6619
8413                            ],
8414                            [
8415                                6737,
8416                                6617
8417                            ],
8418                            [
8419                                6808,
8420                                6651
8421                            ],
8422                            [
8423                                6792,
8424                                6683
8425                            ],
8426                            [
8427                                6797,
8428                                6730
8429                            ],
8430                            [
8431                                6873,
8432                                6741
8433                            ],
8434                            [
8435                                6900,
8436                                6725
8437                            ],
8438                            [
8439                                6933,
8440                                6672
8441                            ],
8442                            [
8443                                7001,
8444                                6669
8445                            ],
8446                            [
8447                                7036,
8448                                6641
8449                            ],
8450                            [
8451                                7069,
8452                                6664
8453                            ],
8454                            [
8455                                7119,
8456                                6643
8457                            ],
8458                            [
8459                                7198,
8460                                6692
8461                            ],
8462                            [
8463                                7216,
8464                                6653
8465                            ],
8466                            [
8467                                7270,
8468                                6617
8469                            ],
8470                            [
8471                                7270,
8472                                6617
8473                            ],
8474                            [
8475                                7270,
8476                                6617
8477                            ],
8478                            [
8479                                7272,
8480                                6548
8481                            ],
8482                            [
8483                                7358,
8484                                6439
8485                            ],
8486                            [
8487                                7431,
8488                                6411
8489                            ],
8490                            [
8491                                7363,
8492                                6332
8493                            ],
8494                            [
8495                                7309,
8496                                6294
8497                            ],
8498                            [
8499                                7268,
8500                                6217
8501                            ],
8502                            [
8503                                7221,
8504                                6173
8505                            ],
8506                            [
8507                                7116,
8508                                6120
8509                            ],
8510                            [
8511                                7104,
8512                                6113
8513                            ],
8514                            [
8515                                6814,
8516                                6086
8517                            ],
8518                            [
8519                                6751,
8520                                6077
8521                            ],
8522                            [
8523                                6516,
8524                                6061
8525                            ],
8526                            [
8527                                6250,
8528                                6032
8529                            ],
8530                            [
8531                                6200,
8532                                6040
8533                            ],
8534                            [
8535                                6210,
8536                                5991
8537                            ],
8538                            [
8539                                5921,
8540                                5968
8541                            ]
8542                        ]
8543                    ],
8544                    [
8545                        [
8546                            [
8547                                7270,
8548                                6617
8549                            ],
8550                            [
8551                                7271,
8552                                6617
8553                            ],
8554                            [
8555                                7270,
8556                                6617
8557                            ],
8558                            [
8559                                7270,
8560                                6617
8561                            ],
8562                            [
8563                                7270,
8564                                6617
8565                            ],
8566                            [
8567                                7270,
8568                                6617
8569                            ]
8570                        ]
8571                    ]
8572                ]
8573            }
8574        },
8575        {
8576            "type": "Feature",
8577            "id": "US.OH",
8578            "properties": {
8579                "hc-group": "admin1",
8580                "hc-middle-x": 0.45,
8581                "hc-middle-y": 0.53,
8582                "hc-key": "us-oh",
8583                "hc-a2": "OH",
8584                "labelrank": "0",
8585                "hasc": "US.OH",
8586                "woe-id": "2347594",
8587                "state-fips": "39",
8588                "fips": "US39",
8589                "postal-code": "OH",
8590                "name": "Ohio",
8591                "country": "United States of America",
8592                "region": "Midwest",
8593                "longitude": "-82.67189999999999",
8594                "woe-name": "Ohio",
8595                "latitude": "40.0924",
8596                "woe-label": "Ohio, US, United States",
8597                "type": "State"
8598            },
8599            "geometry": {
8600                "type": "Polygon",
8601                "coordinates": [
8602                    [
8603                        [
8604                            6718,
8605                            7400
8606                        ],
8607                        [
8608                            6815,
8609                            7415
8610                        ],
8611                        [
8612                            6976,
8613                            7443
8614                        ],
8615                        [
8616                            7095,
8617                            7408
8618                        ],
8619                        [
8620                            7082,
8621                            7394
8622                        ],
8623                        [
8624                            7173,
8625                            7383
8626                        ],
8627                        [
8628                            7258,
8629                            7426
8630                        ],
8631                        [
8632                            7329,
8633                            7440
8634                        ],
8635                        [
8636                            7383,
8637                            7503
8638                        ],
8639                        [
8640                            7530,
8641                            7595
8642                        ],
8643                        [
8644                            7589,
8645                            7253
8646                        ],
8647                        [
8648                            7561,
8649                            7233
8650                        ],
8651                        [
8652                            7587,
8653                            7158
8654                        ],
8655                        [
8656                            7558,
8657                            7018
8658                        ],
8659                        [
8660                            7564,
8661                            6981
8662                        ],
8663                        [
8664                            7504,
8665                            6911
8666                        ],
8667                        [
8668                            7454,
8669                            6903
8670                        ],
8671                        [
8672                            7419,
8673                            6863
8674                        ],
8675                        [
8676                            7399,
8677                            6809
8678                        ],
8679                        [
8680                            7416,
8681                            6775
8682                        ],
8683                        [
8684                            7391,
8685                            6755
8686                        ],
8687                        [
8688                            7354,
8689                            6783
8690                        ],
8691                        [
8692                            7333,
8693                            6723
8694                        ],
8695                        [
8696                            7346,
8697                            6679
8698                        ],
8699                        [
8700                            7321,
8701                            6631
8702                        ],
8703                        [
8704                            7271,
8705                            6617
8706                        ],
8707                        [
8708                            7270,
8709                            6617
8710                        ],
8711                        [
8712                            7216,
8713                            6653
8714                        ],
8715                        [
8716                            7198,
8717                            6692
8718                        ],
8719                        [
8720                            7119,
8721                            6643
8722                        ],
8723                        [
8724                            7069,
8725                            6664
8726                        ],
8727                        [
8728                            7036,
8729                            6641
8730                        ],
8731                        [
8732                            7001,
8733                            6669
8734                        ],
8735                        [
8736                            6933,
8737                            6672
8738                        ],
8739                        [
8740                            6900,
8741                            6725
8742                        ],
8743                        [
8744                            6873,
8745                            6741
8746                        ],
8747                        [
8748                            6797,
8749                            6730
8750                        ],
8751                        [
8752                            6732,
8753                            7296
8754                        ],
8755                        [
8756                            6718,
8757                            7400
8758                        ]
8759                    ]
8760                ]
8761            }
8762        },
8763        {
8764            "type": "Feature",
8765            "id": "US.TN",
8766            "properties": {
8767                "hc-group": "admin1",
8768                "hc-middle-x": 0.43,
8769                "hc-middle-y": 0.54,
8770                "hc-key": "us-tn",
8771                "hc-a2": "TN",
8772                "labelrank": "0",
8773                "hasc": "US.TN",
8774                "woe-id": "2347601",
8775                "state-fips": "47",
8776                "fips": "US47",
8777                "postal-code": "TN",
8778                "name": "Tennessee",
8779                "country": "United States of America",
8780                "region": "South",
8781                "longitude": "-86.3415",
8782                "woe-name": "Tennessee",
8783                "latitude": "35.7514",
8784                "woe-label": "Tennessee, US, United States",
8785                "type": "State"
8786            },
8787            "geometry": {
8788                "type": "Polygon",
8789                "coordinates": [
8790                    [
8791                        [
8792                            6215,
8793                            5600
8794                        ],
8795                        [
8796                            6122,
8797                            5592
8798                        ],
8799                        [
8800                            5762,
8801                            5567
8802                        ],
8803                        [
8804                            5802,
8805                            5602
8806                        ],
8807                        [
8808                            5798,
8809                            5670
8810                        ],
8811                        [
8812                            5835,
8813                            5714
8814                        ],
8815                        [
8816                            5827,
8817                            5763
8818                        ],
8819                        [
8820                            5871,
8821                            5791
8822                        ],
8823                        [
8824                            5868,
8825                            5834
8826                        ],
8827                        [
8828                            5888,
8829                            5872
8830                        ],
8831                        [
8832                            5869,
8833                            5898
8834                        ],
8835                        [
8836                            5901,
8837                            5936
8838                        ],
8839                        [
8840                            5893,
8841                            5966
8842                        ],
8843                        [
8844                            5907,
8845                            5967
8846                        ],
8847                        [
8848                            5911,
8849                            5955
8850                        ],
8851                        [
8852                            5921,
8853                            5968
8854                        ],
8855                        [
8856                            6210,
8857                            5991
8858                        ],
8859                        [
8860                            6200,
8861                            6040
8862                        ],
8863                        [
8864                            6250,
8865                            6032
8866                        ],
8867                        [
8868                            6516,
8869                            6061
8870                        ],
8871                        [
8872                            6751,
8873                            6077
8874                        ],
8875                        [
8876                            6814,
8877                            6086
8878                        ],
8879                        [
8880                            7104,
8881                            6113
8882                        ],
8883                        [
8884                            7116,
8885                            6120
8886                        ],
8887                        [
8888                            7472,
8889                            6170
8890                        ],
8891                        [
8892                            7532,
8893                            6183
8894                        ],
8895                        [
8896                            7523,
8897                            6123
8898                        ],
8899                        [
8900                            7490,
8901                            6093
8902                        ],
8903                        [
8904                            7464,
8905                            6038
8906                        ],
8907                        [
8908                            7437,
8909                            6050
8910                        ],
8911                        [
8912                            7365,
8913                            5989
8914                        ],
8915                        [
8916                            7352,
8917                            6010
8918                        ],
8919                        [
8920                            7298,
8921                            5973
8922                        ],
8923                        [
8924                            7269,
8925                            5928
8926                        ],
8927                        [
8928                            7188,
8929                            5859
8930                        ],
8931                        [
8932                            7131,
8933                            5847
8934                        ],
8935                        [
8936                            7085,
8937                            5807
8938                        ],
8939                        [
8940                            7073,
8941                            5762
8942                        ],
8943                        [
8944                            7038,
8945                            5756
8946                        ],
8947                        [
8948                            7034,
8949                            5685
8950                        ],
8951                        [
8952                            6918,
8953                            5671
8954                        ],
8955                        [
8956                            6762,
8957                            5652
8958                        ],
8959                        [
8960                            6213,
8961                            5603
8962                        ],
8963                        [
8964                            6215,
8965                            5600
8966                        ]
8967                    ]
8968                ]
8969            }
8970        },
8971        {
8972            "type": "Feature",
8973            "id": "US.WV",
8974            "properties": {
8975                "hc-group": "admin1",
8976                "hc-middle-x": 0.35,
8977                "hc-middle-y": 0.56,
8978                "hc-key": "us-wv",
8979                "hc-a2": "WV",
8980                "labelrank": "0",
8981                "hasc": "US.WV",
8982                "woe-id": "2347607",
8983                "state-fips": "54",
8984                "fips": "US54",
8985                "postal-code": "WV",
8986                "name": "West Virginia",
8987                "country": "United States of America",
8988                "region": "South",
8989                "longitude": "-80.7128",
8990                "woe-name": "West Virginia",
8991                "latitude": "38.6422",
8992                "woe-label": "West Virginia, US, United States",
8993                "type": "State"
8994            },
8995            "geometry": {
8996                "type": "Polygon",
8997                "coordinates": [
8998                    [
8999                        [
9000                            7270,
9001                            6617
9002                        ],
9003                        [
9004                            7271,
9005                            6617
9006                        ],
9007                        [
9008                            7321,
9009                            6631
9010                        ],
9011                        [
9012                            7346,
9013                            6679
9014                        ],
9015                        [
9016                            7333,
9017                            6723
9018                        ],
9019                        [
9020                            7354,
9021                            6783
9022                        ],
9023                        [
9024                            7391,
9025                            6755
9026                        ],
9027                        [
9028                            7416,
9029                            6775
9030                        ],
9031                        [
9032                            7399,
9033                            6809
9034                        ],
9035                        [
9036                            7419,
9037                            6863
9038                        ],
9039                        [
9040                            7454,
9041                            6903
9042                        ],
9043                        [
9044                            7504,
9045                            6911
9046                        ],
9047                        [
9048                            7564,
9049                            6981
9050                        ],
9051                        [
9052                            7558,
9053                            7018
9054                        ],
9055                        [
9056                            7587,
9057                            7158
9058                        ],
9059                        [
9060                            7561,
9061                            7233
9062                        ],
9063                        [
9064                            7589,
9065                            7253
9066                        ],
9067                        [
9068                            7630,
9069                            7017
9070                        ],
9071                        [
9072                            7835,
9073                            7053
9074                        ],
9075                        [
9076                            7857,
9077                            6922
9078                        ],
9079                        [
9080                            7928,
9081                            7007
9082                        ],
9083                        [
9084                            7949,
9085                            7003
9086                        ],
9087                        [
9088                            7977,
9089                            7057
9090                        ],
9091                        [
9092                            8000,
9093                            7038
9094                        ],
9095                        [
9096                            8043,
9097                            7043
9098                        ],
9099                        [
9100                            8046,
9101                            7067
9102                        ],
9103                        [
9104                            8101,
9105                            7099
9106                        ],
9107                        [
9108                            8162,
9109                            7087
9110                        ],
9111                        [
9112                            8198,
9113                            7020
9114                        ],
9115                        [
9116                            8188,
9117                            6969
9118                        ],
9119                        [
9120                            8076,
9121                            7028
9122                        ],
9123                        [
9124                            8072,
9125                            6952
9126                        ],
9127                        [
9128                            8048,
9129                            6900
9130                        ],
9131                        [
9132                            7998,
9133                            6837
9134                        ],
9135                        [
9136                            7974,
9137                            6848
9138                        ],
9139                        [
9140                            7932,
9141                            6729
9142                        ],
9143                        [
9144                            7857,
9145                            6759
9146                        ],
9147                        [
9148                            7840,
9149                            6674
9150                        ],
9151                        [
9152                            7767,
9153                            6505
9154                        ],
9155                        [
9156                            7773,
9157                            6459
9158                        ],
9159                        [
9160                            7690,
9161                            6412
9162                        ],
9163                        [
9164                            7664,
9165                            6419
9166                        ],
9167                        [
9168                            7649,
9169                            6382
9170                        ],
9171                        [
9172                            7595,
9173                            6360
9174                        ],
9175                        [
9176                            7567,
9177                            6378
9178                        ],
9179                        [
9180                            7530,
9181                            6341
9182                        ],
9183                        [
9184                            7470,
9185                            6351
9186                        ],
9187                        [
9188                            7431,
9189                            6411
9190                        ],
9191                        [
9192                            7358,
9193                            6439
9194                        ],
9195                        [
9196                            7272,
9197                            6548
9198                        ],
9199                        [
9200                            7270,
9201                            6617
9202                        ],
9203                        [
9204                            7270,
9205                            6617
9206                        ],
9207                        [
9208                            7270,
9209                            6617
9210                        ],
9211                        [
9212                            7270,
9213                            6617
9214                        ],
9215                        [
9216                            7270,
9217                            6617
9218                        ]
9219                    ]
9220                ]
9221            }
9222        },
9223        {
9224            "type": "Feature",
9225            "id": "US.DC",
9226            "properties": {
9227                "hc-group": "admin1",
9228                "hc-middle-x": 0.81,
9229                "hc-middle-y": 0.92,
9230                "hc-key": "us-dc",
9231                "hc-a2": "DC",
9232                "labelrank": "9",
9233                "hasc": "US.DC",
9234                "woe-id": "2347567",
9235                "state-fips": "11",
9236                "fips": "US11",
9237                "postal-code": "DC",
9238                "name": "District of Columbia",
9239                "country": "United States of America",
9240                "region": "South",
9241                "longitude": "-77.01130000000001",
9242                "woe-name": "District of Columbia",
9243                "latitude": "38.8922",
9244                "woe-label": "District of Columbia, US, United States",
9245                "type": "Federal District"
9246            },
9247            "geometry": {
9248                "type": "MultiPolygon",
9249                "coordinates": [
9250                    [
9251                        [
9252                            [
9253                                9727,
9254                                4302
9255                            ],
9256                            [
9257                                10595,
9258                                4302
9259                            ],
9260                            [
9261                                10595,
9262                                3775
9263                            ],
9264                            [
9265                                9727,
9266                                3775
9267                            ],
9268                            [
9269                                9727,
9270                                4302
9271                            ]
9272                        ]
9273                    ],
9274                    [
9275                        [
9276                            [
9277                                8367,
9278                                6916
9279                            ],
9280                            [
9281                                8366,
9282                                6929
9283                            ],
9284                            [
9285                                8353,
9286                                6939
9287                            ],
9288                            [
9289                                8347,
9290                                6939
9291                            ],
9292                            [
9293                                8341,
9294                                6945
9295                            ],
9296                            [
9297                                8385,
9298                                6943
9299                            ],
9300                            [
9301                                8367,
9302                                6916
9303                            ]
9304                        ]
9305                    ]
9306                ]
9307            }
9308        },
9309        {
9310            "type": "Feature",
9311            "id": "US.LA",
9312            "properties": {
9313                "hc-group": "admin1",
9314                "hc-middle-x": 0.34,
9315                "hc-middle-y": 0.46,
9316                "hc-key": "us-la",
9317                "hc-a2": "LA",
9318                "labelrank": "0",
9319                "hasc": "US.LA",
9320                "woe-id": "2347577",
9321                "state-fips": "22",
9322                "fips": "US22",
9323                "postal-code": "LA",
9324                "name": "Louisiana",
9325                "country": "United States of America",
9326                "region": "South",
9327                "longitude": "-91.9991",
9328                "woe-name": "Louisiana",
9329                "latitude": "30.5274",
9330                "woe-label": "Louisiana, US, United States",
9331                "type": "State"
9332            },
9333            "geometry": {
9334                "type": "Polygon",
9335                "coordinates": [
9336                    [
9337                        [
9338                            6017,
9339                            4328
9340                        ],
9341                        [
9342                            5915,
9343                            4340
9344                        ],
9345                        [
9346                            5856,
9347                            4368
9348                        ],
9349                        [
9350                            5812,
9351                            4302
9352                        ],
9353                        [
9354                            5834,
9355                            4283
9356                        ],
9357                        [
9358                            5904,
9359                            4280
9360                        ],
9361                        [
9362                            5937,
9363                            4313
9364                        ],
9365                        [
9366                            5992,
9367                            4313
9368                        ],
9369                        [
9370                            5957,
9371                            4259
9372                        ],
9373                        [
9374                            6001,
9375                            4245
9376                        ],
9377                        [
9378                            6035,
9379                            4298
9380                        ],
9381                        [
9382                            6067,
9383                            4259
9384                        ],
9385                        [
9386                            5982,
9387                            4181
9388                        ],
9389                        [
9390                            6027,
9391                            4123
9392                        ],
9393                        [
9394                            6107,
9395                            4114
9396                        ],
9397                        [
9398                            6148,
9399                            4081
9400                        ],
9401                        [
9402                            6125,
9403                            4035
9404                        ],
9405                        [
9406                            6070,
9407                            4042
9408                        ],
9409                        [
9410                            6042,
9411                            4077
9412                        ],
9413                        [
9414                            5966,
9415                            4094
9416                        ],
9417                        [
9418                            5980,
9419                            4115
9420                        ],
9421                        [
9422                            5902,
9423                            4141
9424                        ],
9425                        [
9426                            5913,
9427                            4064
9428                        ],
9429                        [
9430                            5876,
9431                            4028
9432                        ],
9433                        [
9434                            5860,
9435                            4066
9436                        ],
9437                        [
9438                            5811,
9439                            4082
9440                        ],
9441                        [
9442                            5780,
9443                            4036
9444                        ],
9445                        [
9446                            5724,
9447                            4031
9448                        ],
9449                        [
9450                            5620,
9451                            4068
9452                        ],
9453                        [
9454                            5631,
9455                            4121
9456                        ],
9457                        [
9458                            5569,
9459                            4128
9460                        ],
9461                        [
9462                            5532,
9463                            4184
9464                        ],
9465                        [
9466                            5493,
9467                            4173
9468                        ],
9469                        [
9470                            5494,
9471                            4203
9472                        ],
9473                        [
9474                            5430,
9475                            4175
9476                        ],
9477                        [
9478                            5437,
9479                            4145
9480                        ],
9481                        [
9482                            5478,
9483                            4154
9484                        ],
9485                        [
9486                            5526,
9487                            4139
9488                        ],
9489                        [
9490                            5500,
9491                            4112
9492                        ],
9493                        [
9494                            5431,
9495                            4136
9496                        ],
9497                        [
9498                            5399,
9499                            4121
9500                        ],
9501                        [
9502                            5305,
9503                            4135
9504                        ],
9505                        [
9506                            5186,
9507                            4176
9508                        ],
9509                        [
9510                            5128,
9511                            4173
9512                        ],
9513                        [
9514                            5042,
9515                            4153
9516                        ],
9517                        [
9518                            5047,
9519                            4228
9520                        ],
9521                        [
9522                            5065,
9523                            4253
9524                        ],
9525                        [
9526                            5059,
9527                            4380
9528                        ],
9529                        [
9530                            5093,
9531                            4447
9532                        ],
9533                        [
9534                            5105,
9535                            4506
9536                        ],
9537                        [
9538                            5031,
9539                            4646
9540                        ],
9541                        [
9542                            5033,
9543                            4679
9544                        ],
9545                        [
9546                            4980,
9547                            4752
9548                        ],
9549                        [
9550                            4975,
9551                            5016
9552                        ],
9553                        [
9554                            5563,
9555                            5038
9556                        ],
9557                        [
9558                            5605,
9559                            5041
9560                        ],
9561                        [
9562                            5627,
9563                            5018
9564                        ],
9565                        [
9566                            5611,
9567                            4977
9568                        ],
9569                        [
9570                            5629,
9571                            4895
9572                        ],
9573                        [
9574                            5670,
9575                            4868
9576                        ],
9577                        [
9578                            5636,
9579                            4781
9580                        ],
9581                        [
9582                            5584,
9583                            4738
9584                        ],
9585                        [
9586                            5565,
9587                            4662
9588                        ],
9589                        [
9590                            5545,
9591                            4642
9592                        ],
9593                        [
9594                            5545,
9595                            4585
9596                        ],
9597                        [
9598                            5522,
9599                            4581
9600                        ],
9601                        [
9602                            5540,
9603                            4526
9604                        ],
9605                        [
9606                            5523,
9607                            4510
9608                        ],
9609                        [
9610                            5955,
9611                            4536
9612                        ],
9613                        [
9614                            5936,
9615                            4451
9616                        ],
9617                        [
9618                            6017,
9619                            4328
9620                        ]
9621                    ]
9622                ]
9623            }
9624        },
9625        {
9626            "type": "Feature",
9627            "id": "US.FL",
9628            "properties": {
9629                "hc-group": "admin1",
9630                "hc-middle-x": 0.77,
9631                "hc-middle-y": 0.5,
9632                "hc-key": "us-fl",
9633                "hc-a2": "FL",
9634                "labelrank": "0",
9635                "hasc": "US.FL",
9636                "woe-id": "2347568",
9637                "state-fips": "12",
9638                "fips": "US12",
9639                "postal-code": "FL",
9640                "name": "Florida",
9641                "country": "United States of America",
9642                "region": "South",
9643                "longitude": "-81.6228",
9644                "woe-name": "Florida",
9645                "latitude": "28.1568",
9646                "woe-label": "Florida, US, United States",
9647                "type": "State"
9648            },
9649            "geometry": {
9650                "type": "Polygon",
9651                "coordinates": [
9652                    [
9653                        [
9654                            6487,
9655                            4443
9656                        ],
9657                        [
9658                            6487,
9659                            4486
9660                        ],
9661                        [
9662                            6431,
9663                            4541
9664                        ],
9665                        [
9666                            6436,
9667                            4574
9668                        ],
9669                        [
9670                            7015,
9671                            4637
9672                        ],
9673                        [
9674                            7055,
9675                            4568
9676                        ],
9677                        [
9678                            7649,
9679                            4609
9680                        ],
9681                        [
9682                            7670,
9683                            4559
9684                        ],
9685                        [
9686                            7699,
9687                            4566
9688                        ],
9689                        [
9690                            7687,
9691                            4660
9692                        ],
9693                        [
9694                            7713,
9695                            4686
9696                        ],
9697                        [
9698                            7808,
9699                            4673
9700                        ],
9701                        [
9702                            7822,
9703                            4672
9704                        ],
9705                        [
9706                            7849,
9707                            4570
9708                        ],
9709                        [
9710                            7908,
9711                            4430
9712                        ],
9713                        [
9714                            8008,
9715                            4269
9716                        ],
9717                        [
9718                            8125,
9719                            4130
9720                        ],
9721                        [
9722                            8113,
9723                            4109
9724                        ],
9725                        [
9726                            8144,
9727                            4012
9728                        ],
9729                        [
9730                            8198,
9731                            3936
9732                        ],
9733                        [
9734                            8297,
9735                            3758
9736                        ],
9737                        [
9738                            8321,
9739                            3651
9740                        ],
9741                        [
9742                            8331,
9743                            3476
9744                        ],
9745                        [
9746                            8302,
9747                            3361
9748                        ],
9749                        [
9750                            8313,
9751                            3273
9752                        ],
9753                        [
9754                            8270,
9755                            3209
9756                        ],
9757                        [
9758                            8291,
9759                            3273
9760                        ],
9761                        [
9762                            8273,
9763                            3290
9764                        ],
9765                        [
9766                            8230,
9767                            3255
9768                        ],
9769                        [
9770                            8194,
9771                            3260
9772                        ],
9773                        [
9774                            8141,
9775                            3234
9776                        ],
9777                        [
9778                            8115,
9779                            3258
9780                        ],
9781                        [
9782                            8115,
9783                            3303
9784                        ],
9785                        [
9786                            8070,
9787                            3379
9788                        ],
9789                        [
9790                            7979,
9791                            3429
9792                        ],
9793                        [
9794                            7953,
9795                            3420
9796                        ],
9797                        [
9798                            7907,
9799                            3543
9800                        ],
9801                        [
9802                            7846,
9803                            3536
9804                        ],
9805                        [
9806                            7839,
9807                            3654
9808                        ],
9809                        [
9810                            7796,
9811                            3674
9812                        ],
9813                        [
9814                            7819,
9815                            3634
9816                        ],
9817                        [
9818                            7779,
9819                            3640
9820                        ],
9821                        [
9822                            7675,
9823                            3779
9824                        ],
9825                        [
9826                            7722,
9827                            3884
9828                        ],
9829                        [
9830                            7712,
9831                            3915
9832                        ],
9833                        [
9834                            7671,
9835                            3899
9836                        ],
9837                        [
9838                            7670,
9839                            3851
9840                        ],
9841                        [
9842                            7622,
9843                            3872
9844                        ],
9845                        [
9846                            7618,
9847                            3966
9848                        ],
9849                        [
9850                            7635,
9851                            4045
9852                        ],
9853                        [
9854                            7626,
9855                            4157
9856                        ],
9857                        [
9858                            7576,
9859                            4229
9860                        ],
9861                        [
9862                            7525,
9863                            4222
9864                        ],
9865                        [
9866                            7473,
9867                            4277
9868                        ],
9869                        [
9870                            7425,
9871                            4302
9872                        ],
9873                        [
9874                            7349,
9875                            4395
9876                        ],
9877                        [
9878                            7265,
9879                            4433
9880                        ],
9881                        [
9882                            7186,
9883                            4403
9884                        ],
9885                        [
9886                            7198,
9887                            4370
9888                        ],
9889                        [
9890                            7162,
9891                            4370
9892                        ],
9893                        [
9894                            7148,
9895                            4336
9896                        ],
9897                        [
9898                            7067,
9899                            4277
9900                        ],
9901                        [
9902                            6979,
9903                            4284
9904                        ],
9905                        [
9906                            6986,
9907                            4316
9908                        ],
9909                        [
9910                            6958,
9911                            4349
9912                        ],
9913                        [
9914                            6892,
9915                            4391
9916                        ],
9917                        [
9918                            6798,
9919                            4429
9920                        ],
9921                        [
9922                            6694,
9923                            4444
9924                        ],
9925                        [
9926                            6468,
9927                            4388
9928                        ],
9929                        [
9930                            6505,
9931                            4431
9932                        ],
9933                        [
9934                            6487,
9935                            4443
9936                        ]
9937                    ]
9938                ]
9939            }
9940        },
9941        {
9942            "type": "Feature",
9943            "id": "US.GA",
9944            "properties": {
9945                "hc-group": "admin1",
9946                "hc-middle-x": 0.43,
9947                "hc-middle-y": 0.52,
9948                "hc-key": "us-ga",
9949                "hc-a2": "GA",
9950                "labelrank": "0",
9951                "hasc": "US.GA",
9952                "woe-id": "2347569",
9953                "state-fips": "13",
9954                "fips": "US13",
9955                "postal-code": "GA",
9956                "name": "Georgia",
9957                "country": "United States of America",
9958                "region": "South",
9959                "longitude": "-83.4078",
9960                "woe-name": "Georgia",
9961                "latitude": "32.8547",
9962                "woe-label": "Georgia, US, United States",
9963                "type": "State"
9964            },
9965            "geometry": {
9966                "type": "Polygon",
9967                "coordinates": [
9968                    [
9969                        [
9970                            7713,
9971                            4686
9972                        ],
9973                        [
9974                            7687,
9975                            4660
9976                        ],
9977                        [
9978                            7699,
9979                            4566
9980                        ],
9981                        [
9982                            7670,
9983                            4559
9984                        ],
9985                        [
9986                            7649,
9987                            4609
9988                        ],
9989                        [
9990                            7055,
9991                            4568
9992                        ],
9993                        [
9994                            7015,
9995                            4637
9996                        ],
9997                        [
9998                            6983,
9999                            4704
10000                        ],
10001                        [
10002                            6990,
10003                            4774
10004                        ],
10005                        [
10006                            6958,
10007                            4846
10008                        ],
10009                        [
10010                            6970,
10011                            4930
10012                        ],
10013                        [
10014                            6998,
10015                            4970
10016                        ],
10017                        [
10018                            6947,
10019                            5053
10020                        ],
10021                        [
10022                            6912,
10023                            5135
10024                        ],
10025                        [
10026                            6762,
10027                            5652
10028                        ],
10029                        [
10030                            6918,
10031                            5671
10032                        ],
10033                        [
10034                            7034,
10035                            5685
10036                        ],
10037                        [
10038                            7210,
10039                            5711
10040                        ],
10041                        [
10042                            7290,
10043                            5724
10044                        ],
10045                        [
10046                            7249,
10047                            5641
10048                        ],
10049                        [
10050                            7323,
10051                            5596
10052                        ],
10053                        [
10054                            7364,
10055                            5593
10056                        ],
10057                        [
10058                            7401,
10059                            5526
10060                        ],
10061                        [
10062                            7444,
10063                            5475
10064                        ],
10065                        [
10066                            7523,
10067                            5430
10068                        ],
10069                        [
10070                            7538,
10071                            5402
10072                        ],
10073                        [
10074                            7600,
10075                            5369
10076                        ],
10077                        [
10078                            7606,
10079                            5340
10080                        ],
10081                        [
10082                            7651,
10083                            5293
10084                        ],
10085                        [
10086                            7708,
10087                            5272
10088                        ],
10089                        [
10090                            7750,
10091                            5169
10092                        ],
10093                        [
10094                            7800,
10095                            5140
10096                        ],
10097                        [
10098                            7844,
10099                            5042
10100                        ],
10101                        [
10102                            7887,
10103                            5035
10104                        ],
10105                        [
10106                            7901,
10107                            5029
10108                        ],
10109                        [
10110                            7811,
10111                            4893
10112                        ],
10113                        [
10114                            7836,
10115                            4826
10116                        ],
10117                        [
10118                            7798,
10119                            4798
10120                        ],
10121                        [
10122                            7817,
10123                            4730
10124                        ],
10125                        [
10126                            7808,
10127                            4673
10128                        ],
10129                        [
10130                            7713,
10131                            4686
10132                        ]
10133                    ]
10134                ]
10135            }
10136        },
10137        {
10138            "type": "Feature",
10139            "id": "US.SC",
10140            "properties": {
10141                "hc-group": "admin1",
10142                "hc-middle-x": 0.54,
10143                "hc-middle-y": 0.35,
10144                "hc-key": "us-sc",
10145                "hc-a2": "SC",
10146                "labelrank": "0",
10147                "hasc": "US.SC",
10148                "woe-id": "2347599",
10149                "state-fips": "45",
10150                "fips": "US45",
10151                "postal-code": "SC",
10152                "name": "South Carolina",
10153                "country": "United States of America",
10154                "region": "South",
10155                "longitude": "-80.6471",
10156                "woe-name": "South Carolina",
10157                "latitude": "33.8578",
10158                "woe-label": "South Carolina, US, United States",
10159                "type": "State"
10160            },
10161            "geometry": {
10162                "type": "Polygon",
10163                "coordinates": [
10164                    [
10165                        [
10166                            8302,
10167                            5600
10168                        ],
10169                        [
10170                            8236,
10171                            5523
10172                        ],
10173                        [
10174                            8205,
10175                            5458
10176                        ],
10177                        [
10178                            8206,
10179                            5396
10180                        ],
10181                        [
10182                            8173,
10183                            5348
10184                        ],
10185                        [
10186                            8140,
10187                            5346
10188                        ],
10189                        [
10190                            8131,
10191                            5311
10192                        ],
10193                        [
10194                            8056,
10195                            5219
10196                        ],
10197                        [
10198                            7989,
10199                            5173
10200                        ],
10201                        [
10202                            7913,
10203                            5166
10204                        ],
10205                        [
10206                            7971,
10207                            5149
10208                        ],
10209                        [
10210                            7887,
10211                            5035
10212                        ],
10213                        [
10214                            7844,
10215                            5042
10216                        ],
10217                        [
10218                            7800,
10219                            5140
10220                        ],
10221                        [
10222                            7750,
10223                            5169
10224                        ],
10225                        [
10226                            7708,
10227                            5272
10228                        ],
10229                        [
10230                            7651,
10231                            5293
10232                        ],
10233                        [
10234                            7606,
10235                            5340
10236                        ],
10237                        [
10238                            7600,
10239                            5369
10240                        ],
10241                        [
10242                            7538,
10243                            5402
10244                        ],
10245                        [
10246                            7523,
10247                            5430
10248                        ],
10249                        [
10250                            7444,
10251                            5475
10252                        ],
10253                        [
10254                            7401,
10255                            5526
10256                        ],
10257                        [
10258                            7364,
10259                            5593
10260                        ],
10261                        [
10262                            7323,
10263                            5596
10264                        ],
10265                        [
10266                            7249,
10267                            5641
10268                        ],
10269                        [
10270                            7290,
10271                            5724
10272                        ],
10273                        [
10274                            7457,
10275                            5802
10276                        ],
10277                        [
10278                            7714,
10279                            5830
10280                        ],
10281                        [
10282                            7782,
10283                            5790
10284                        ],
10285                        [
10286                            7791,
10287                            5756
10288                        ],
10289                        [
10290                            8029,
10291                            5790
10292                        ],
10293                        [
10294                            8302,
10295                            5600
10296                        ]
10297                    ]
10298                ]
10299            }
10300        },
10301        {
10302            "type": "Feature",
10303            "id": "US.MN",
10304            "properties": {
10305                "hc-group": "admin1",
10306                "hc-middle-x": 0.38,
10307                "hc-middle-y": 0.6,
10308                "hc-key": "us-mn",
10309                "hc-a2": "MN",
10310                "labelrank": "0",
10311                "hasc": "US.MN",
10312                "woe-id": "2347582",
10313                "state-fips": "27",
10314                "fips": "US27",
10315                "postal-code": "MN",
10316                "name": "Minnesota",
10317                "country": "United States of America",
10318                "region": "Midwest",
10319                "longitude": "-93.364",
10320                "woe-name": "Minnesota",
10321                "latitude": "46.0592",
10322                "woe-label": "Minnesota, US, United States",
10323                "type": "State"
10324            },
10325            "geometry": {
10326                "type": "Polygon",
10327                "coordinates": [
10328                    [
10329                        [
10330                            4333,
10331                            9174
10332                        ],
10333                        [
10334                            4688,
10335                            9173
10336                        ],
10337                        [
10338                            4690,
10339                            9272
10340                        ],
10341                        [
10342                            4748,
10343                            9253
10344                        ],
10345                        [
10346                            4770,
10347                            9125
10348                        ],
10349                        [
10350                            4791,
10351                            9104
10352                        ],
10353                        [
10354                            4854,
10355                            9085
10356                        ],
10357                        [
10358                            4916,
10359                            9083
10360                        ],
10361                        [
10362                            4938,
10363                            9052
10364                        ],
10365                        [
10366                            4984,
10367                            9060
10368                        ],
10369                        [
10370                            5024,
10371                            9084
10372                        ],
10373                        [
10374                            5073,
10375                            9082
10376                        ],
10377                        [
10378                            5132,
10379                            9063
10380                        ],
10381                        [
10382                            5181,
10383                            8985
10384                        ],
10385                        [
10386                            5194,
10387                            9006
10388                        ],
10389                        [
10390                            5240,
10391                            9014
10392                        ],
10393                        [
10394                            5304,
10395                            8955
10396                        ],
10397                        [
10398                            5351,
10399                            8941
10400                        ],
10401                        [
10402                            5438,
10403                            8996
10404                        ],
10405                        [
10406                            5463,
10407                            8964
10408                        ],
10409                        [
10410                            5570,
10411                            8974
10412                        ],
10413                        [
10414                            5607,
10415                            8949
10416                        ],
10417                        [
10418                            5668,
10419                            8950
10420                        ],
10421                        [
10422                            5592,
10423                            8895
10424                        ],
10425                        [
10426                            5514,
10427                            8864
10428                        ],
10429                        [
10430                            5432,
10431                            8802
10432                        ],
10433                        [
10434                            5349,
10435                            8700
10436                        ],
10437                        [
10438                            5245,
10439                            8603
10440                        ],
10441                        [
10442                            5214,
10443                            8573
10444                        ],
10445                        [
10446                            5220,
10447                            8422
10448                        ],
10449                        [
10450                            5147,
10451                            8375
10452                        ],
10453                        [
10454                            5116,
10455                            8322
10456                        ],
10457                        [
10458                            5117,
10459                            8285
10460                        ],
10461                        [
10462                            5158,
10463                            8253
10464                        ],
10465                        [
10466                            5144,
10467                            8214
10468                        ],
10469                        [
10470                            5146,
10471                            8117
10472                        ],
10473                        [
10474                            5136,
10475                            8072
10476                        ],
10477                        [
10478                            5181,
10479                            8035
10480                        ],
10481                        [
10482                            5217,
10483                            8029
10484                        ],
10485                        [
10486                            5273,
10487                            7994
10488                        ],
10489                        [
10490                            5360,
10491                            7903
10492                        ],
10493                        [
10494                            5405,
10495                            7892
10496                        ],
10497                        [
10498                            5431,
10499                            7866
10500                        ],
10501                        [
10502                            5445,
10503                            7758
10504                        ],
10505                        [
10506                            5137,
10507                            7745
10508                        ],
10509                        [
10510                            4459,
10511                            7735
10512                        ],
10513                        [
10514                            4462,
10515                            8203
10516                        ],
10517                        [
10518                            4419,
10519                            8232
10520                        ],
10521                        [
10522                            4387,
10523                            8283
10524                        ],
10525                        [
10526                            4429,
10527                            8325
10528                        ],
10529                        [
10530                            4444,
10531                            8372
10532                        ],
10533                        [
10534                            4436,
10535                            8472
10536                        ],
10537                        [
10538                            4402,
10539                            8555
10540                        ],
10541                        [
10542                            4409,
10543                            8628
10544                        ],
10545                        [
10546                            4397,
10547                            8650
10548                        ],
10549                        [
10550                            4394,
10551                            8777
10552                        ],
10553                        [
10554                            4347,
10555                            8957
10556                        ],
10557                        [
10558                            4343,
10559                            9053
10560                        ],
10561                        [
10562                            4353,
10563                            9083
10564                        ],
10565                        [
10566                            4333,
10567                            9174
10568                        ]
10569                    ]
10570                ]
10571            }
10572        },
10573        {
10574            "type": "Feature",
10575            "id": "US.MT",
10576            "properties": {
10577                "hc-group": "admin1",
10578                "hc-middle-x": 0.55,
10579                "hc-middle-y": 0.53,
10580                "hc-key": "us-mt",
10581                "hc-a2": "MT",
10582                "labelrank": "0",
10583                "hasc": "US.MT",
10584                "woe-id": "2347585",
10585                "state-fips": "30",
10586                "fips": "US30",
10587                "postal-code": "MT",
10588                "name": "Montana",
10589                "country": "United States of America",
10590                "region": "West",
10591                "longitude": "-110.044",
10592                "woe-name": "Montana",
10593                "latitude": "46.9965",
10594                "woe-label": "Montana, US, United States",
10595                "type": "State"
10596            },
10597            "geometry": {
10598                "type": "Polygon",
10599                "coordinates": [
10600                    [
10601                        [
10602                            1093,
10603                            9555
10604                        ],
10605                        [
10606                            1689,
10607                            9433
10608                        ],
10609                        [
10610                            3150,
10611                            9234
10612                        ],
10613                        [
10614                            3084,
10615                            8486
10616                        ],
10617                        [
10618                            3080,
10619                            8436
10620                        ],
10621                        [
10622                            3059,
10623                            8191
10624                        ],
10625                        [
10626                            3056,
10627                            8191
10628                        ],
10629                        [
10630                            1772,
10631                            8355
10632                        ],
10633                        [
10634                            1750,
10635                            8226
10636                        ],
10637                        [
10638                            1713,
10639                            8295
10640                        ],
10641                        [
10642                            1686,
10643                            8296
10644                        ],
10645                        [
10646                            1671,
10647                            8261
10648                        ],
10649                        [
10650                            1614,
10651                            8258
10652                        ],
10653                        [
10654                            1536,
10655                            8282
10656                        ],
10657                        [
10658                            1508,
10659                            8261
10660                        ],
10661                        [
10662                            1451,
10663                            8281
10664                        ],
10665                        [
10666                            1415,
10667                            8254
10668                        ],
10669                        [
10670                            1392,
10671                            8280
10672                        ],
10673                        [
10674                            1391,
10675                            8331
10676                        ],
10677                        [
10678                            1374,
10679                            8375
10680                        ],
10681                        [
10682                            1347,
10683                            8377
10684                        ],
10685                        [
10686                            1326,
10687                            8419
10688                        ],
10689                        [
10690                            1338,
10691                            8434
10692                        ],
10693                        [
10694                            1303,
10695                            8522
10696                        ],
10697                        [
10698                            1303,
10699                            8596
10700                        ],
10701                        [
10702                            1278,
10703                            8630
10704                        ],
10705                        [
10706                            1200,
10707                            8590
10708                        ],
10709                        [
10710                            1167,
10711                            8620
10712                        ],
10713                        [
10714                            1177,
10715                            8675
10716                        ],
10717                        [
10718                            1211,
10719                            8698
10720                        ],
10721                        [
10722                            1204,
10723                            8727
10724                        ],
10725                        [
10726                            1219,
10727                            8796
10728                        ],
10729                        [
10730                            1253,
10731                            8859
10732                        ],
10733                        [
10734                            1258,
10735                            8897
10736                        ],
10737                        [
10738                            1219,
10739                            8896
10740                        ],
10741                        [
10742                            1170,
10743                            8959
10744                        ],
10745                        [
10746                            1172,
10747                            8979
10748                        ],
10749                        [
10750                            1117,
10751                            9085
10752                        ],
10753                        [
10754                            1061,
10755                            9142
10756                        ],
10757                        [
10758                            1076,
10759                            9210
10760                        ],
10761                        [
10762                            1036,
10763                            9301
10764                        ],
10765                        [
10766                            1093,
10767                            9555
10768                        ]
10769                    ]
10770                ]
10771            }
10772        },
10773        {
10774            "type": "Feature",
10775            "id": "US.ND",
10776            "properties": {
10777                "hc-group": "admin1",
10778                "hc-middle-x": 0.47,
10779                "hc-middle-y": 0.5,
10780                "hc-key": "us-nd",
10781                "hc-a2": "ND",
10782                "labelrank": "0",
10783                "hasc": "US.ND",
10784                "woe-id": "2347593",
10785                "state-fips": "38",
10786                "fips": "US38",
10787                "postal-code": "ND",
10788                "name": "North Dakota",
10789                "country": "United States of America",
10790                "region": "Midwest",
10791                "longitude": "-100.302",
10792                "woe-name": "North Dakota",
10793                "latitude": "47.4675",
10794                "woe-label": "North Dakota, US, United States",
10795                "type": "State"
10796            },
10797            "geometry": {
10798                "type": "Polygon",
10799                "coordinates": [
10800                    [
10801                        [
10802                            3080,
10803                            8436
10804                        ],
10805                        [
10806                            3084,
10807                            8486
10808                        ],
10809                        [
10810                            3150,
10811                            9234
10812                        ],
10813                        [
10814                            3468,
10815                            9209
10816                        ],
10817                        [
10818                            4333,
10819                            9174
10820                        ],
10821                        [
10822                            4353,
10823                            9083
10824                        ],
10825                        [
10826                            4343,
10827                            9053
10828                        ],
10829                        [
10830                            4347,
10831                            8957
10832                        ],
10833                        [
10834                            4394,
10835                            8777
10836                        ],
10837                        [
10838                            4397,
10839                            8650
10840                        ],
10841                        [
10842                            4409,
10843                            8628
10844                        ],
10845                        [
10846                            4402,
10847                            8555
10848                        ],
10849                        [
10850                            4436,
10851                            8472
10852                        ],
10853                        [
10854                            4444,
10855                            8372
10856                        ],
10857                        [
10858                            4231,
10859                            8374
10860                        ],
10861                        [
10862                            3080,
10863                            8436
10864                        ]
10865                    ]
10866                ]
10867            }
10868        },
10869        {
10870            "type": "Feature",
10871            "id": "US.AZ",
10872            "properties": {
10873                "hc-group": "admin1",
10874                "hc-middle-x": 0.51,
10875                "hc-middle-y": 0.45,
10876                "hc-key": "us-az",
10877                "hc-a2": "AZ",
10878                "labelrank": "0",
10879                "hasc": "US.AZ",
10880                "woe-id": "2347561",
10881                "state-fips": "4",
10882                "fips": "US04",
10883                "postal-code": "AZ",
10884                "name": "Arizona",
10885                "country": "United States of America",
10886                "region": "West",
10887                "longitude": "-111.935",
10888                "woe-name": "Arizona",
10889                "latitude": "34.3046",
10890                "woe-label": "Arizona, US, United States",
10891                "type": "State"
10892            },
10893            "geometry": {
10894                "type": "Polygon",
10895                "coordinates": [
10896                    [
10897                        [
10898                            1630,
10899                            4782
10900                        ],
10901                        [
10902                            1196,
10903                            4850
10904                        ],
10905                        [
10906                            1092,
10907                            4906
10908                        ],
10909                        [
10910                            418,
10911                            5307
10912                        ],
10913                        [
10914                            451,
10915                            5357
10916                        ],
10917                        [
10918                            492,
10919                            5355
10920                        ],
10921                        [
10922                            519,
10923                            5416
10924                        ],
10925                        [
10926                            476,
10927                            5452
10928                        ],
10929                        [
10930                            489,
10931                            5536
10932                        ],
10933                        [
10934                            510,
10935                            5537
10936                        ],
10937                        [
10938                            555,
10939                            5605
10940                        ],
10941                        [
10942                            559,
10943                            5661
10944                        ],
10945                        [
10946                            598,
10947                            5702
10948                        ],
10949                        [
10950                            660,
10951                            5730
10952                        ],
10953                        [
10954                            620,
10955                            5788
10956                        ],
10957                        [
10958                            593,
10959                            5936
10960                        ],
10961                        [
10962                            614,
10963                            5982
10964                        ],
10965                        [
10966                            611,
10967                            6068
10968                        ],
10969                        [
10970                            631,
10971                            6159
10972                        ],
10973                        [
10974                            631,
10975                            6217
10976                        ],
10977                        [
10978                            669,
10979                            6227
10980                        ],
10981                        [
10982                            752,
10983                            6180
10984                        ],
10985                        [
10986                            777,
10987                            6221
10988                        ],
10989                        [
10990                            818,
10991                            6420
10992                        ],
10993                        [
10994                            1488,
10995                            6297
10996                        ],
10997                        [
10998                            1841,
10999                            6242
11000                        ],
11001                        [
11002                            1736,
11003                            5514
11004                        ],
11005                        [
11006                            1630,
11007                            4782
11008                        ]
11009                    ]
11010                ]
11011            }
11012        },
11013        {
11014            "type": "Feature",
11015            "id": "US.UT",
11016            "properties": {
11017                "hc-group": "admin1",
11018                "hc-middle-x": 0.52,
11019                "hc-middle-y": 0.59,
11020                "hc-key": "us-ut",
11021                "hc-a2": "UT",
11022                "labelrank": "0",
11023                "hasc": "US.UT",
11024                "woe-id": "2347603",
11025                "state-fips": "49",
11026                "fips": "US49",
11027                "postal-code": "UT",
11028                "name": "Utah",
11029                "country": "United States of America",
11030                "region": "West",
11031                "longitude": "-111.544",
11032                "woe-name": "Utah",
11033                "latitude": "39.5007",
11034                "woe-label": "Utah, US, United States",
11035                "type": "State"
11036            },
11037            "geometry": {
11038                "type": "Polygon",
11039                "coordinates": [
11040                    [
11041                        [
11042                            1841,
11043                            6242
11044                        ],
11045                        [
11046                            1488,
11047                            6297
11048                        ],
11049                        [
11050                            818,
11051                            6420
11052                        ],
11053                        [
11054                            929,
11055                            6975
11056                        ],
11057                        [
11058                            1073,
11059                            7690
11060                        ],
11061                        [
11062                            1393,
11063                            7629
11064                        ],
11065                        [
11066                            1643,
11067                            7585
11068                        ],
11069                        [
11070                            1600,
11071                            7329
11072                        ],
11073                        [
11074                            1990,
11075                            7269
11076                        ],
11077                        [
11078                            1966,
11079                            7108
11080                        ],
11081                        [
11082                            1841,
11083                            6242
11084                        ]
11085                    ]
11086                ]
11087            }
11088        },
11089        {
11090            "type": "Feature",
11091            "id": "US.HI",
11092            "properties": {
11093                "hc-group": "admin1",
11094                "hc-middle-x": 0.87,
11095                "hc-middle-y": 0.79,
11096                "hc-key": "us-hi",
11097                "hc-a2": "HI",
11098                "labelrank": "0",
11099                "hasc": "US.HI",
11100                "woe-id": "2347570",
11101                "state-fips": "15",
11102                "fips": "US15",
11103                "postal-code": "HI",
11104                "name": "Hawaii",
11105                "country": "United States of America",
11106                "region": "West",
11107                "longitude": "-157.999",
11108                "woe-name": "Hawaii",
11109                "latitude": "21.4919",
11110                "woe-label": "Hawaii, US, United States",
11111                "type": "State"
11112            },
11113            "geometry": {
11114                "type": "MultiPolygon",
11115                "coordinates": [
11116                    [
11117                        [
11118                            [
11119                                2871.1,
11120                                2945.9
11121                            ],
11122                            [
11123                                2875.2,
11124                                2942.7
11125                            ],
11126                            [
11127                                2879.9,
11128                                2943.9
11129                            ],
11130                            [
11131                                2887,
11132                                2943.5
11133                            ],
11134                            [
11135                                2908.4,
11136                                2936
11137                            ],
11138                            [
11139                                2926.2,
11140                                2927
11141                            ],
11142                            [
11143                                2959.3,
11144                                2906.2
11145                            ],
11146                            [
11147                                2969.8,
11148                                2895.8
11149                            ],
11150                            [
11151                                2975.6,
11152                                2888.1
11153                            ],
11154                            [
11155                                2975.6,
11156                                2868.8
11157                            ],
11158                            [
11159                                2976.2,
11160                                2860.2
11161                            ],
11162                            [
11163                                2981.8,
11164                                2860.4
11165                            ],
11166                            [
11167                                2989.5,
11168                                2864.1
11169                            ],
11170                            [
11171                                2995.3,
11172                                2860.2
11173                            ],
11174                            [
11175                                2998,
11176                                2855.8
11177                            ],
11178                            [
11179                                2997.4,
11180                                2846.7
11181                            ],
11182                            [
11183                                3000.1,
11184                                2841.1
11185                            ],
11186                            [
11187                                3003.5,
11188                                2836
11189                            ],
11190                            [
11191                                3013.7,
11192                                2826.7
11193                            ],
11194                            [
11195                                3024.4,
11196                                2822.1
11197                            ],
11198                            [
11199                                3028.7,
11200                                2818.5
11201                            ],
11202                            [
11203                                3031,
11204                                2814.1
11205                            ],
11206                            [
11207                                3030.4,
11208                                2808.4
11209                            ],
11210                            [
11211                                3019,
11212                                2794.3
11213                            ],
11214                            [
11215                                3010.1,
11216                                2790.9
11217                            ],
11218                            [
11219                                2997.5,
11220                                2778.6
11221                            ],
11222                            [
11223                                2988.9,
11224                                2776
11225                            ],
11226                            [
11227                                2988.6,
11228                                2773.6
11229                            ],
11230                            [
11231                                2981.4,
11232                                2771.8
11233                            ],
11234                            [
11235                                2975.3,
11236                                2767.2
11237                            ],
11238                            [
11239                                2953.3,
11240                                2760.6
11241                            ],
11242                            [
11243                                2944.8,
11244                                2762.6
11245                            ],
11246                            [
11247                                2939.9,
11248                                2762.7
11249                            ],
11250                            [
11251                                2935.5,
11252                                2761.3
11253                            ],
11254                            [
11255                                2924.6,
11256                                2753.9
11257                            ],
11258                            [
11259                                2920.9,
11260                                2749.4
11261                            ],
11262                            [
11263                                2913.7,
11264                                2747.3
11265                            ],
11266                            [
11267                                2906.4,
11268                                2742.2
11269                            ],
11270                            [
11271                                2896.2,
11272                                2736.4
11273                            ],
11274                            [
11275                                2893.2,
11276                                2735.4
11277                            ],
11278                            [
11279                                2884.5,
11280                                2727
11281                            ],
11282                            [
11283                                2883,
11284                                2723.6
11285                            ],
11286                            [
11287                                2883.3,
11288                                2715.9
11289                            ],
11290                            [
11291                                2873.3,
11292                                2705.7
11293                            ],
11294                            [
11295                                2870.1,
11296                                2696.8
11297                            ],
11298                            [
11299                                2867.2,
11300                                2693.6
11301                            ],
11302                            [
11303                                2858.8,
11304                                2686.4
11305                            ],
11306                            [
11307                                2857,
11308                                2687.4
11309                            ],
11310                            [
11311                                2857.1,
11312                                2692
11313                            ],
11314                            [
11315                                2852.9,
11316                                2695.4
11317                            ],
11318                            [
11319                                2844.7,
11320                                2699.6
11321                            ],
11322                            [
11323                                2830,
11324                                2708.8
11325                            ],
11326                            [
11327                                2817.8,
11328                                2712.1
11329                            ],
11330                            [
11331                                2815.1,
11332                                2719.8
11333                            ],
11334                            [
11335                                2812.5,
11336                                2720.6
11337                            ],
11338                            [
11339                                2810.9,
11340                                2726.2
11341                            ],
11342                            [
11343                                2809.3,
11344                                2735.1
11345                            ],
11346                            [
11347                                2811.5,
11348                                2745.8
11349                            ],
11350                            [
11351                                2816,
11352                                2776.4
11353                            ],
11354                            [
11355                                2815.6,
11356                                2781.7
11357                            ],
11358                            [
11359                                2812.9,
11360                                2786.6
11361                            ],
11362                            [
11363                                2805.6,
11364                                2807.3
11365                            ],
11366                            [
11367                                2801.6,
11368                                2814.3
11369                            ],
11370                            [
11371                                2802.1,
11372                                2818.9
11373                            ],
11374                            [
11375                                2799.7,
11376                                2823.2
11377                            ],
11378                            [
11379                                2796.3,
11380                                2833.9
11381                            ],
11382                            [
11383                                2792.8,
11384                                2839.1
11385                            ],
11386                            [
11387                                2789.8,
11388                                2841.4
11389                            ],
11390                            [
11391                                2785.4,
11392                                2846.6
11393                            ],
11394                            [
11395                                2780.6,
11396                                2859.9
11397                            ],
11398                            [
11399                                2784.8,
11400                                2870.8
11401                            ],
11402                            [
11403                                2795.1,
11404                                2879.5
11405                            ],
11406                            [
11407                                2796.2,
11408                                2883.5
11409                            ],
11410                            [
11411                                2799,
11412                                2885.8
11413                            ],
11414                            [
11415                                2807.4,
11416                                2888.9
11417                            ],
11418                            [
11419                                2813.4,
11420                                2898.4
11421                            ],
11422                            [
11423                                2817.9,
11424                                2906.3
11425                            ],
11426                            [
11427                                2822.3,
11428                                2911.4
11429                            ],
11430                            [
11431                                2825.4,
11432                                2911.5
11433                            ],
11434                            [
11435                                2827.7,
11436                                2920.9
11437                            ],
11438                            [
11439                                2826.3,
11440                                2924.9
11441                            ],
11442                            [
11443                                2822.9,
11444                                2928.1
11445                            ],
11446                            [
11447                                2815.9,
11448                                2938.7
11449                            ],
11450                            [
11451                                2813,
11452                                2947.9
11453                            ],
11454                            [
11455                                2812.4,
11456                                2962.2
11457                            ],
11458                            [
11459                                2816.2,
11460                                2969.6
11461                            ],
11462                            [
11463                                2818.8,
11464                                2972
11465                            ],
11466                            [
11467                                2826,
11468                                2972
11469                            ],
11470                            [
11471                                2844.7,
11472                                2968
11473                            ],
11474                            [
11475                                2850,
11476                                2958
11477                            ],
11478                            [
11479                                2857.7,
11480                                2955
11481                            ],
11482                            [
11483                                2862.8,
11484                                2952.2
11485                            ],
11486                            [
11487                                2866.3,
11488                                2948
11489                            ],
11490                            [
11491                                2871.1,
11492                                2945.9
11493                            ]
11494                        ]
11495                    ],
11496                    [
11497                        [
11498                            [
11499                                2685.2,
11500                                3028
11501                            ],
11502                            [
11503                                2683.1,
11504                                3024.1
11505                            ],
11506                            [
11507                                2677.4,
11508                                3024.1
11509                            ],
11510                            [
11511                                2672.1,
11512                                3025
11513                            ],
11514                            [
11515                                2662.7,
11516                                3023
11517                            ],
11518                            [
11519                                2656.2,
11520                                3022.3
11521                            ],
11522                            [
11523                                2651.9,
11524                                3026.6
11525                            ],
11526                            [
11527                                2654.3,
11528                                3029.7
11529                            ],
11530                            [
11531                                2658.6,
11532                                3033.4
11533                            ],
11534                            [
11535                                2670.2,
11536                                3040.4
11537                            ],
11538                            [
11539                                2675.5,
11540                                3042.3
11541                            ],
11542                            [
11543                                2679.6,
11544                                3041.9
11545                            ],
11546                            [
11547                                2684.7,
11548                                3036.2
11549                            ],
11550                            [
11551                                2682.1,
11552                                3030
11553                            ],
11554                            [
11555                                2685.2,
11556                                3028
11557                            ]
11558                        ]
11559                    ],
11560                    [
11561                        [
11562                            [
11563                                2609.3,
11564                                3070.6
11565                            ],
11566                            [
11567                                
115672599.6,
11568                                3070.1
11569                            ],
11570                            [
11571                                2595.6,
11572                                3075.8
11573                            ],
11574                            [
11575                                2594.6,
11576                                3080.7
11577                            ],
11578                            [
11579                                2594.3,
11580                                3089.5
11581                            ],
11582                            [
11583                                2593.6,
11584                                3094
11585                            ],
11586                            [
11587                                2590.2,
11588                                3096
11589                            ],
11590                            [
11591                                2581.9,
11592                                3099.3
11593                            ],
11594                            [
11595                                2579.4,
11596                                3103.3
11597                            ],
11598                            [
11599                                2581,
11600                                3107.7
11601                            ],
11602                            [
11603                                2585.7,
11604                                3110.1
11605                            ],
11606                            [
11607                                2594,
11608                                3111.1
11609                            ],
11610                            [
11611                                2613.5,
11612                                3108.3
11613                            ],
11614                            [
11615                                2622.3,
11616                                3100.4
11617                            ],
11618                            [
11619                                2628.7,
11620                                3093.1
11621                            ],
11622                            [
11623                                2631.3,
11624                                3086.9
11625                            ],
11626                            [
11627                                2630,
11628                                3083.4
11629                            ],
11630                            [
11631                                2625.7,
11632                                3076.7
11633                            ],
11634                            [
11635                                2616.7,
11636                                3072.6
11637                            ],
11638                            [
11639                                2609.3,
11640                                3070.6
11641                            ]
11642                        ]
11643                    ],
11644                    [
11645                        [
11646                            [
11647                                2673.9,
11648                                3132.2
11649                            ],
11650                            [
11651                                2675.6,
11652                                3130.2
11653                            ],
11654                            [
11655                                2683.4,
11656                                3127.1
11657                            ],
11658                            [
11659                                2684.3,
11660                                3124.4
11661                            ],
11662                            [
11663                                2686.7,
11664                                3123.7
11665                            ],
11666                            [
11667                                2687.2,
11668                                3118.4
11669                            ],
11670                            [
11671                                2690,
11672                                3115.9
11673                            ],
11674                            [
11675                                2695.5,
11676                                3106.3
11677                            ],
11678                            [
11679                                2699,
11680                                3106.6
11681                            ],
11682                            [
11683                                2701.3,
11684                                3109.2
11685                            ],
11686                            [
11687                                2705.1,
11688                                3109.1
11689                            ],
11690                            [
11691                                2716.1,
11692                                3110.5
11693                            ],
11694                            [
11695                                2722.5,
11696                                3115.1
11697                            ],
11698                            [
11699                                2725.7,
11700                                3116.2
11701                            ],
11702                            [
11703                                2732.1,
11704                                3116.5
11705                            ],
11706                            [
11707                                2743.2,
11708                                3114.2
11709                            ],
11710                            [
11711                                2746.4,
11712                                3112.2
11713                            ],
11714                            [
11715                                2747.4,
11716                                3109.8
11717                            ],
11718                            [
11719                                2752.3,
11720                                3104.5
11721                            ],
11722                            [
11723                                2758.6,
11724                                3099.6
11725                            ],
11726                            [
11727                                2758.8,
11728                                3097.7
11729                            ],
11730                            [
11731                                2762.9,
11732                                3098.7
11733                            ],
11734                            [
11735                                2765.5,
11736                                3096.6
11737                            ],
11738                            [
11739                                2767.9,
11740                                3092.2
11741                            ],
11742                            [
11743                                2774.8,
11744                                3091.2
11745                            ],
11746                            [
11747                                2781.6,
11748                                3088
11749                            ],
11750                            [
11751                                2791.4,
11752                                3084.8
11753                            ],
11754                            [
11755                                2795.9,
11756                                3075.7
11757                            ],
11758                            [
11759                                2794.9,
11760                                3067.4
11761                            ],
11762                            [
11763                                2791.3,
11764                                3060.7
11765                            ],
11766                            [
11767                                2786.3,
11768                                3059.3
11769                            ],
11770                            [
11771                                2782.2,
11772                                3053.3
11773                            ],
11774                            [
11775                                2776.8,
11776                                3053.2
11777                            ],
11778                            [
11779                                2766,
11780                                3047.7
11781                            ],
11782                            [
11783                                2754.9,
11784                                3048.2
11785                            ],
11786                            [
11787                                2751.2,
11788                                3048
11789                            ],
11790                            [
11791                                2731.5,
11792                                3038.5
11793                            ],
11794                            [
11795                                2721.5,
11796                                3040.8
11797                            ],
11798                            [
11799                                2718.9,
11800                                3040.1
11801                            ],
11802                            [
11803                                2710.5,
11804                                3039.7
11805                            ],
11806                            [
11807                                2704.9,
11808                                3044.9
11809                            ],
11810                            [
11811                                2701.6,
11812                                3049.9
11813                            ],
11814                            [
11815                                2703.3,
11816                                3051.3
11817                            ],
11818                            [
11819                                2703.4,
11820                                3055.1
11821                            ],
11822                            [
11823                                2701.8,
11824                                3068.9
11825                            ],
11826                            [
11827                                2700.2,
11828                                3072.7
11829                            ],
11830                            [
11831                                2700.3,
11832                                3077
11833                            ],
11834                            [
11835                                2699,
11836                                3080.5
11837                            ],
11838                            [
11839                                2694.8,
11840                                3083.7
11841                            ],
11842                            [
11843                                2688.7,
11844                                3082.3
11845                            ],
11846                            [
11847                                2687.7,
11848                                3079.4
11849                            ],
11850                            [
11851                                2685.2,
11852                                3078.9
11853                            ],
11854                            [
11855                                2679.4,
11856                                3082.6
11857                            ],
11858                            [
11859                                2675,
11860                                3083.4
11861                            ],
11862                            [
11863                                2670.7,
11864                                3086.1
11865                            ],
11866                            [
11867                                2667.9,
11868                                3085.8
11869                            ],
11870                            [
11871                                2660.5,
11872                                3094.3
11873                            ],
11874                            [
11875                                2655,
11876                                3101.5
11877                            ],
11878                            [
11879                                2654.7,
11880                                3106.1
11881                            ],
11882                            [
11883                                2652.7,
11884                                3108.6
11885                            ],
11886                            [
11887                                2654.7,
11888                                3118.8
11889                            ],
11890                            [
11891                                2656.5,
11892                                3123.8
11893                            ],
11894                            [
11895                                2658.6,
11896                                3127.1
11897                            ],
11898                            [
11899                                2661.1,
11900                                3127.3
11901                            ],
11902                            [
11903                                2664.7,
11904                                3132
11905                            ],
11906                            [
11907                                2668.7,
11908                                3131.6
11909                            ],
11910                            [
11911                                2672.3,
11912                                3133.2
11913                            ],
11914                            [
11915                                2673.9,
11916                                3132.2
11917                            ]
11918                        ]
11919                    ],
11920                    [
11921                        [
11922                            [
11923                                2542.4,
11924                                3172.8
11925                            ],
11926                            [
11927                                2550.3,
11928                                3172.5
11929                            ],
11930                            [
11931                                2552.8,
11932                                3171.9
11933                            ],
11934                            [
11935                                2554.4,
11936                                3169.4
11937                            ],
11938                            [
11939                                2557.4,
11940                                3169.4
11941                            ],
11942                            [
11943                                2586.4,
11944                                3165
11945                            ],
11946                            [
11947                                2594.1,
11948                                3164.7
11949                            ],
11950                            [
11951                                2596.9,
11952                                3170.6
11953                            ],
11954                            [
11955                                2598.9,
11956                                3171.1
11957                            ],
11958                            [
11959                                2601.5,
11960                                3167.6
11961                            ],
11962                            [
11963                                2602.5,
11964                                3163.6
11965                            ],
11966                            [
11967                                2612.6,
11968                                3161
11969                            ],
11970                            [
11971                                2622.6,
11972                                3161.3
11973                            ],
11974                            [
11975                                2627,
11976                                3161.9
11977                            ],
11978                            [
11979                                2631.9,
11980                                3163.6
11981                            ],
11982                            [
11983                                2637.2,
11984                                3163.5
11985                            ],
11986                            [
11987                                2642.1,
11988                                3162.2
11989                            ],
11990                            [
11991                                2644.1,
11992                                3162.6
11993                            ],
11994                            [
11995                                2646.1,
11996                                3160.1
11997                            ],
11998                            [
11999                                2650.7,
12000                                3159.2
12001                            ],
12002                            [
12003                                2646.9,
12004                                3152.3
12005                            ],
12006                            [
12007                                2640.8,
12008                                3146.4
12009                            ],
12010                            [
12011                                2633.3,
12012                                3142.2
12013                            ],
12014                            [
12015                                2625.8,
12016                                3139.1
12017                            ],
12018                            [
12019                                2618.1,
12020                                3137.5
12021                            ],
12022                            [
12023                                2610.3,
12024                                3138.3
12025                            ],
12026           
12026                 [
12027                                2602.5,
12028                                3139.8
12029                            ],
12030                            [
12031                                2587.1,
12032                                3143.9
12033                            ],
12034                            [
12035                                2577.6,
12036                                3147.2
12037                            ],
12038                            [
12039                                2554.7,
12040                                3145.6
12041                            ],
12042                            [
12043                                2547.6,
12044                                3144.5
12045                            ],
12046                            [
12047                                2537.6,
12048                                3144.7
12049                            ],
12050                            [
12051                                2533.7,
12052                                3146.2
12053                            ],
12054                            [
12055                                2531.4,
12056                                3149.3
12057                            ],
12058                            [
12059                                2531.3,
12060                                3153.2
12061                            ],
12062                            [
12063                                2535.1,
12064                                3159.1
12065                            ],
12066                            [
12067                                2538.7,
12068                                3160.4
12069                            ],
12070                            [
12071                                2541.9,
12072                                3164.2
12073                            ],
12074                            [
12075                                2542.9,
12076                                3168.2
12077                            ],
12078                            [
12079                                2540.2,
12080                                3172.9
12081                            ],
12082                            [
12083                                2542.4,
12084                                3172.8
12085                            ]
12086                        ]
12087                    ],
12088                    [
12089                        [
12090                            [
12091                                2414.1,
12092                                3252.1
12093                            ],
12094                            [
12095                                2415.3,
12096                                3248.5
12097                            ],
12098                            [
12099                                2417.5,
12100                                3247.3
12101                            ],
12102                            [
12103                                2418.6,
12104                                3243.6
12105                            ],
12106                            [
12107                                2422.1,
12108                                3243.3
12109                            ],
12110                            [
12111                                2425.5,
12112                                3238.6
12113                            ],
12114                            [
12115                                2425.5,
12116                                3233.8
12117                            ],
12118                            [
12119                                2422.8,
12120                                3232.6
12121                            ],
12122                            [
12123                                2424.3,
12124                                3223.3
12125                            ],
12126                            [
12127                                2428.6,
12128                                3221.7
12129                            ],
12130                            [
12131                                2432,
12132                                3216.6
12133                            ],
12134                            [
12135                                2435,
12136                                3215.5
12137                            ],
12138                            [
12139                                2437.4,
12140                                3213.2
12141                            ],
12142                            [
12143                                2440.6,
12144                                3217.4
12145                            ],
12146                            [
12147                                2437.6,
12148                                3219.4
12149                            ],
12150                            [
12151                                2437.9,
12152                                3221.8
12153                            ],
12154                            [
12155                                2440.1,
12156                                3222.8
12157                            ],
12158                            [
12159                                2448,
12160                                3221.2
12161                            ],
12162                            [
12163                                2445.1,
12164                                3218.3
12165                            ],
12166                            [
12167                                2444.8,
12168                                3211.6
12169                            ],
12170                            [
12171                                2448.1,
12172                                3209.6
12173                            ],
12174                            [
12175                                2451.4,
12176                                3205.2
12177                            ],
12178                            [
12179                                2450.5,
12180                                3202.8
12181                            ],
12182                            [
12183                                2453.3,
12184                                3197.1
12185                            ],
12186                            [
12187                                2461.8,
12188                                3192
12189                            ],
12190                            [
12191                                2463,
12192                                3190.8
12193                            ],
12194                            [
12195                                2453.8,
12196                                3181.6
12197                            ],
12198                            [
12199                                2451.7,
12200                                3180.9
12201                            ],
12202                            [
12203                                2451.1,
12204                                3184.2
12205                            ],
12206                            [
12207                                2449.4,
12208                                3185.6
12209                            ],
12210                            [
12211                                2439.8,
12212                                3183.8
12213                            ],
12214                            [
12215                                2433.5,
12216                                3180
12217                            ],
12218                            [
12219                                2429,
12220                                3180.6
12221                            ],
12222                            [
12223                                2426.4,
12224                                3184.7
12225                            ],
12226                            [
12227                                2416.6,
12228                                3189.1
12229                            ],
12230                            [
12231                                2413.7,
12232                                3194.2
12233                            ],
12234                            [
12235                                2413.7,
12236                                3196.2
12237                            ],
12238                            [
12239                                2409.6,
12240                                3193
12241                            ],
12242                            [
12243                                2411.6,
12244                                3190.7
12245                            ],
12246                            [
12247                                2403.3,
12248                                3190.2
12249                            ],
12250                            [
12251                                2404.6,
12252                                3191.8
12253                            ],
12254                            [
12255                                2399.9,
12256                                3193
12257                            ],
12258                            [
12259                                2399.1,
12260                                3199.7
12261                            ],
12262                            [
12263                                2405.5,
12264                                3202.8
12265                            ],
12266                            [
12267                                2406.3,
12268                                3204.6
12269                            ],
12270                            [
12271                                2400.6,
12272                                3208.2
12273                            ],
12274                            [
12275                                2398.9,
12276                                3204.7
12277                            ],
12278                            [
12279                                2394.5,
12280                                3208.7
12281                            ],
12282                            [
12283                                2395.9,
12284                                3202.7
12285                            ],
12286                            [
12287                                2394.8,
12288                                3202
12289                            ],
12290                            [
12291                                2388.7,
12292                                3207.1
12293                            ],
12294                            [
12295                                2390.1,
12296                                3203.7
12297                            ],
12298                            [
12299                                2397.6,
12300                                3196.7
12301                            ],
12302                            [
12303                                2396.6,
12304                                3193.5
12305                            ],
12306                            [
12307                                2393,
12308                                3192
12309                            ],
12310                            [
12311                                2373.9,
12312                                3188.4
12313                            ],
12314                            [
12315                                2369.7,
12316                                3190.8
12317                            ],
12318                            [
12319                                2368,
12320                                3197.9
12321                            ],
12322                            [
12323                                2365.9,
12324                                3203.5
12325                            ],
12326                            [
12327                                2361.4,
12328                                3209.6
12329                            ],
12330                            [
12331                                2357.7,
12332                                3211.5
12333                            ],
12334                            [
12335                                2356.8,
12336                                3217.1
12337                            ],
12338                            [
12339                                2355.5,
12340                                3220.1
12341                            ],
12342                            [
12343                                2349.9,
12344                                3224.5
12345                            ],
12346                            [
12347                                2347.5,
12348                                3228.2
12349                            ],
12350                            [
12351                                2347.2,
12352                                3238.6
12353                            ],
12354                            [
12355                                2345.9,
12356                                3240.5
12357                            ],
12358                            [
12359                                2337.4,
12360                                3247.6
12361                            ],
12362                            [
12363                                2345.9,
12364                                3249.6
12365                            ],
12366                            [
12367                                2354.3,
12368                                3250
12369                            ],
12370                            [
12371                                2368.8,
12372                                3249.7
12373                            ],
12374                            [
12375                                2370.5,
12376                                3253.5
12377                            ],
12378                            [
12379                                2374.1,
12380                                3255.5
12381                            ],
12382                            [
12383                                2379.9,
12384                                3260.1
12385                            ],
12386                            [
12387                                2379.6,
12388                                3261.3
12389                            ],
12390                            [
12391                                2382.9,
12392                                3267.5
12393                            ],
12394                            [
12395                                2390.2,
12396                                3273.8
12397                            ],
12398                            [
12399                                2396.5,
12400                                3275.6
12401                            ],
12402                            [
12403                                2400.5,
12404                                3274.5
12405                            ],
12406                            [
12407                                2406.2,
12408                                3268.8
12409                            ],
12410                            [
12411                                2409.8,
12412                                3262
12413                            ],
12414                            [
12415                                2408.9,
12416                                3258.2
12417                            ],
12418                            [
12419                                2414.1,
12420                                3252.1
12421                            ]
12422                        ]
12423                    ],
12424                    [
12425                        [
12426                            [
12427                                1955.8,
12428                                3294.7
12429                            ],
12430                            [
12431                                1953.2,
12432                                3293.9
12433                            ],
12434                            [
12435                                1948.4,
12436                                3296.6
12437                            ],
12438                            [
12439                                1946,
12440                                3304.1
12441                            ],
12442                            [
12443                                1946.6,
12444                                3308.8
12445                            ],
12446                            [
12447                                1948.8,
12448                                3313.7
12449                            ],
12450                            [
12451                                1956.7,
12452                                3321.5
12453                            ],
12454                            [
12455                                1963,
12456                                3326.1
12457                            ],
12458                            [
12459                                1971.1,
12460                                3330.6
12461                            ],
12462                            [
12463                                1973.3,
12464                                3335.9
12465                            ],
12466                            [
12467                                1973.1,
12468                                3339.8
12469                            ],
12470                            [
12471                                1976.7,
12472                                3341.3
12473                            ],
12474                            [
12475                                1980.1,
12476                                3341.2
12477                            ],
12478                            [
12479                                1983.8,
12480                                3339.7
12481                            ],
12482                            [
12483                                1985.5,
12484                             
12484   3336
12485                            ],
12486                            [
12487                                1981.3,
12488                                3331.1
12489                            ],
12490                            [
12491                                1979.8,
12492                                3326.6
12493                            ],
12494                            [
12495                                1981.2,
12496                                3321
12497                            ],
12498                            [
12499                                1978.5,
12500                                3317.4
12501                            ],
12502                            [
12503                                1972.1,
12504                                3314.3
12505                            ],
12506                            [
12507                                1968.3,
12508                                3313.2
12509                            ],
12510                            [
12511                                1961.2,
12512                                3308.2
12513                            ],
12514                            [
12515                                1959.7,
12516                                3305
12517                            ],
12518                            [
12519                                1955.8,
12520                                3294.7
12521                            ]
12522                        ]
12523                    ],
12524                    [
12525                        [
12526                            [
12527                                2117.8,
12528                                3386.1
12529                            ],
12530                            [
12531                                2120.7,
12532                                3384.6
12533                            ],
12534                            [
12535                                2123.8,
12536                                3384.8
12537                            ],
12538                            [
12539                                2127.6,
12540                                3382.7
12541                            ],
12542                            [
12543                                2129.1,
12544                                3379.5
12545                            ],
12546                            [
12547                                2132.9,
12548                                3376.7
12549                            ],
12550                            [
12551                                2134.9,
12552                                3369.7
12553                            ],
12554                            [
12555                                2136.6,
12556                                3368.7
12557                            ],
12558                            [
12559                                2136.1,
12560                                3360.5
12561                            ],
12562                            [
12563                                2134.2,
12564                                3358
12565                            ],
12566                            [
12567                                2131.3,
12568                                3350.1
12569                            ],
12570                            [
12571                                2128.4,
12572                                3348.5
12573                            ],
12574                            [
12575                                2128,
12576                                3342.6
12577                            ],
12578                            [
12579                                2128.8,
12580                                3334.9
12581                            ],
12582                            [
12583                                2128,
12584                                3329.3
12585                            ],
12586                            [
12587                                2123,
12588                                3328.3
12589                            ],
12590                            [
12591                                2125.2,
12592                                3324.9
12593                            ],
12594                            [
12595                                2121.7,
12596                                3323.7
12597                            ],
12598                            [
12599                                2118.3,
12600                                3320.9
12601                            ],
12602                            [
12603                                2116.9,
12604                                3318.4
12605                            ],
12606                            [
12607                                2109.4,
12608                                3313
12609                            ],
12610                            [
12611                                2107.3,
12612                                3310.8
12613                            ],
12614                            [
12615                                2098.5,
12616                                3314
12617                            ],
12618                            [
12619                                2089,
12620                                3314.5
12621                            ],
12622                            [
12623                                2078.6,
12624                                3316.4
12625                            ],
12626                            [
12627                                2076.9,
12628                                3318
12629                            ],
12630                            [
12631                                2074,
12632                                3315.9
12633                            ],
12634                            [
12635                                2073.1,
12636                                3317.6
12637                            ],
12638                            [
12639                                2068.2,
12640                                3320.6
12641                            ],
12642                            [
12643                                2065.1,
12644                                3326.1
12645                            ],
12646                            [
12647                                2062.8,
12648                                3326.7
12649                            ],
12650                            [
12651                                2060,
12652                                3329.4
12653                            ],
12654                            [
12655                                2056.1,
12656                                3330
12657                            ],
12658                            [
12659                                2050.6,
12660                                3332.5
12661                            ],
12662                            [
12663                                2043.4,
12664                                3334.4
12665                            ],
12666                            [
12667                                2041.2,
12668                                3340.1
12669                            ],
12670                            [
12671                                2038.1,
12672                                3343
12673                            ],
12674                            [
12675                                2038.3,
12676                                3352.8
12677                            ],
12678                            [
12679                                2040.3,
12680                                3353.5
12681                            ],
12682                            [
12683                                2048.5,
12684                                3363
12685                            ],
12686                            [
12687                                2049.2,
12688                                3368.3
12689                            ],
12690                            [
12691                                2052.4,
12692                                3371.8
12693                            ],
12694                            [
12695                                2062.1,
12696                                3374.2
12697                            ],
12698                            [
12699                                2067.8,
12700                                3377.5
12701                            ],
12702                            [
12703                                2071.4,
12704                                3380.6
12705                            ],
12706                            [
12707                                2076.1,
12708                                3382.7
12709                            ],
12710                            [
12711                                2077.8,
12712                                3384.8
12713                            ],
12714                            [
12715                                2086,
12716                                3386.8
12717                            ],
12718                            [
12719                                2088.1,
12720                                3384.2
12721                            ],
12722                            [
12723                                2095.7,
12724                                3382.1
12725                            ],
12726                            [
12727                                2095.7,
12728                                3385.2
12729                            ],
12730                            [
12731                                2099.3,
12732                                3386.6
12733                            ],
12734                            [
12735                                2107.5,
12736                                3385.9
12737                            ],
12738                            [
12739                                2111.6,
12740                                3384.7
12741                            ],
12742                            [
12743                                2115.5,
12744                                3387.5
12745                            ],
12746                            [
12747                                2117.8,
12748                                3386.1
12749                            ]
12750                        ]
12751                    ]
12752                ]
12753            }
12754        },
12755        {
12756            "type": "Feature",
12757            "id": "US.AK",
12758            "properties": {
12759                "hc-group": "admin1",
12760                "hc-middle-x": 0.53,
12761                "hc-middle-y": 0.33,
12762                "hc-key": "us-ak",
12763                "hc-a2": "AK",
12764                "labelrank": "0",
12765                "hasc": "US.AK",
12766                "woe-id": "2347560",
12767                "state-fips": "2",
12768                "fips": "US02",
12769                "postal-code": "AK",
12770                "name": "Alaska",
12771                "country": "United States of America",
12772                "region": "West",
12773                "longitude": "-151.604",
12774                "woe-name": "Alaska",
12775                "latitude": "65.3609",
12776                "woe-label": "Alaska, US, United States",
12777                "type": "State"
12778            },
12779            "geometry": {
12780                "type": "MultiPolygon",
12781                "coordinates": [
12782                    [
12783                        [
12784                            [
12785                                322,
12786                                4275
12787                            ],
12788                            [
12789                                321,
12790                                4280
12791                            ],
12792                            [
12793                                339,
12794                                4292
12795                            ],
12796                            [
12797                                360,
12798                                4283
12799                            ],
12800                            [
12801                                392,
12802                                4281
12803                            ],
12804                            [
12805                                424,
12806                                4297
12807                            ],
12808                            [
12809                                443,
12810                                4318
12811                            ],
12812                            [
12813                                478,
12814                                4297
12815                            ],
12816                            [
12817                                476,
12818                                4285
12819                            ],
12820                            [
12821                                459,
12822                                4279
12823                            ],
12824                            [
12825                                461,
12826                                4263
12827                            ],
12828                            [
12829                                472,
12830                                4263
12831                            ],
12832                            [
12833                                490,
12834                                4288
12835                            ],
12836                            [
12837                                507,
12838                                4272
12839                            ],
12840                            [
12841                                503,
12842                                4256
12843                            ],
12844                            [
12845                                519,
12846                                4248
12847                            ],
12848                            [
12849                                528,
12850                                4258
12851                            ],
12852                            [
12853                                548,
12854                                4257
12855                            ],
12856                            [
12857                                582,
12858                                4240
12859                            ],
12860                            [
12861                                564,
12862                                4217
12863                            ],
12864                            [
12865                                594,
12866                                4212
12867                            ],
12868                            [
12869                                584,
12870                                4202
12871                            ],
12872                            [
12873                                611,
12874                                4198
12875                            ],
12876                            [
12877                                655,
12878                                4200
12879                            ],
12880                            [
12881                                684,
12882                                4194
12883                            ],
12884                            [
12885                                704,
12886                                4174
12887                            ],
12888                            [
12889                                712,
12890                                4178
12891                            ],
12892                            [
12893                                723,
12894                                4165
12895                            ],
12896                            [
12897                                746,
12898                                4156
12899                            ],
12900                            [
12901                                788,
12902                                4155
12903                            ],
12904                            [
12905                                808,
12906                                4136
12907                            ],
12908                            [
12909                                832,
12910                                4134
12911                            ],
12912                            [
12913                                851,
12914                                4144
12915                            ],
12916                            [
12917                                877,
12918                                4147
12919                            ],
12920                            [
12921                                901,
12922                                4136
12923                            ],
12924                            [
12925                                913,
12926                                4120
12927                            ],
12928                            [
12929                                929,
12930                                4117
12931                            ],
12932                            [
12933                                943,
12934                                4100
12935                            ],
12936                            [
12937                                957,
12938                                4101
12939                            ],
12940                            [
12941                                989,
12942                                3159
12943                            ],
12944                            [
12945                                1039,
12946                                3148
12947                            ],
12948                            [
12949                                1057,
12950                                3163
12951                            ],
12952                            [
12953                                1084,
12954                                3166
12955                            ],
12956                            [
12957                                1081,
12958                                3138
12959                            ],
12960                            [
12961                                1107,
12962                                3121
12963                            ],
12964                            [
12965                                1113,
12966                                3108
12967                            ],
12968                            [
12969                                1167,
12970                                3060
12971                            ],
12972                            [
12973                                1180,
12974                                3028
12975                            ],
12976                            [
12977                                1208,
12978                                3055
12979                            ],
12980                            [
12981                                1220,
12982                                3056
12983                            ],
12984                            [
12985                                1229,
12986                                3102
12987                            ],
12988                            [
12989                                1271,
12990                                3127
12991                            ],
12992                            [
12993                                1297,
12994                                3104
12995                            ],
12996                            [
12997                                1295,
12998                                3091
12999                            ],
13000                            [
13001                                1335,
13002                                3059
13003                            ],
13004                            [
13005                                1347,
13006                                3039
13007                            ],
13008                            [
13009                                1367,
13010                                3031
13011                            ],
13012                            [
13013                                1397,
13014                                3002
13015                            ],
13016                            [
13017                                1477,
13018                                2890
13019                            ],
13020                            [
13021                                1491,
13022                                2875
13023                            ],
13024                            [
13025                                1490,
13026                                2858
13027                            ],
13028                            [
13029                                1504,
13030                                2853
13031                            ],
13032                            [
13033                                1511,
13034                                2833
13035                            ],
13036                            [
13037                                1523,
13038                                2836
13039                            ],
13040                            [
13041                                1613,
13042                                2802
13043                            ],
13044                            [
13045                                1622,
13046                                2783
13047                            ],
13048                            [
13049                                1617,
13050                                2766
13051                            ],
13052                            [
13053                                1636,
13054                                2722
13055                            ],
13056                            [
13057                                1622,
13058                                2680
13059                            ],
13060                            [
13061                                1606,
13062                                2663
13063                            ],
13064                            [
13065                                1592,
13066                                2664
13067                            ],
13068                            [
13069                                1577,
13070                                2702
13071                            ],
13072                            [
13073                                1585,
13074                                2718
13075                            ],
13076                            [
13077                                1577,
13078                                2755
13079                            ],
13080                            [
13081                                1555,
13082                                2778
13083                            ],
13084                            [
13085                                1526,
13086                                2764
13087                            ],
13088                            [
13089                                1520,
13090                                2723
13091                            ],
13092                            [
13093                                1499,
13094                                2746
13095                            ],
13096                            [
13097                                1510,
13098                                2753
13099                            ],
13100                            [
13101                                1513,
13102                                2796
13103                            ],
13104                            [
13105                                1473,
13106                                2829
13107                            ],
13108                            [
13109                                1468,
13110                                2844
13111                            ],
13112                            [
13113                                1424,
13114                                2880
13115                            ],
13116                            [
13117                                1406,
13118                                2878
13119                            ],
13120                            [
13121                                1414,
13122                                2903
13123                            ],
13124                            [
13125                                1397,
13126                                2917
13127                            ],
13128                            [
13129                                1390,
13130                                2938
13131                            ],
13132                            [
13133                                1366,
13134                                2963
13135                            ],
13136                            [
13137                                1364,
13138                                2998
13139                            ],
13140                            [
13141                                1355,
13142                                2976
13143                            ],
13144                            [
13145                                1348,
13146                                2979
13147                            ],
13148                            [
13149                                1354,
13150                                2974
13151                            ],
13152                            [
13153                                1334,
13154                                2977
13155                            ],
13156                            [
13157                                1331,
13158                                2984
13159                            ],
13160                            [
13161                                1344,
13162                                2982
13163                            ],
13164                            [
13165                                1324,
13166                                2991
13167                            ],
13168                            [
13169                                1283,
13170                                3075
13171                            ],
13172                            [
13173                                1286,
13174                                3041
13175                            ],
13176                            [
13177                                1310,
13178                                2985
13179                            ],
13180                            [
13181                                1307,
13182                                2971
13183                            ],
13184                            [
13185                                1288,
13186                                2985
13187                            ],
13188                            [
13189                                1264,
13190                                2982
13191                            ],
13192                            [
13193                                1266,
13194                                2998
13195                            ],
13196                            [
13197                                1249,
13198                                3031
13199                            ],
13200                            [
13201                                1245,
13202                                3018
13203                            ],
13204                            [
13205                                1199,
13206                                3046
13207                            ],
13208                            [
13209                                1202,
13210                                3028
13211                            ],
13212                            [
13213                                1224,
13214                                3026
13215                            ],
13216                            [
13217                                1254,
13218                                2995
13219                            ],
13220                            [
13221                                1255,
13222                                2977
13223                            ],
13224                            [
13225                                1229,
13226                                2976
13227                            ],
13228                            [
13229                                1225,
13230                                2963
13231                            ],
13232                            [
13233                                1169,
13234                                2999
13235                            ],
13236                            [
13237                                1134,
13238                                3041
13239                            ],
13240                            [
13241                                1085,
13242                                3062
13243                            ],
13244                            [
13245                                1050,
13246                                3083
13247                            ],
13248                            [
13249                                1069,
13250                                3102
13251                            ],
13252                            [
13253                                1060,
13254                                3119
13255                            ],
13256                            [
13257                                1025,
13258                                3098
13259                            ],
13260                            [
13261                                969,
13262                                3113
13263                            ],
13264                            [
13265                                977,
13266                                3128
13267                            ],
13268                            [
13269                                953,
13270                                3122
13271                            ],
13272                            [
13273                                899,
13274                                3136
13275                            ],
13276                            [
13277                                842,
13278                                3125
13279                            ],
13280                            [
13281                                826,
13282                                3141
13283                            ],
13284                            [
13285                                792,
13286                                3157
13287                            ],
13288                            [
13289                                802,
13290                                3194
13291                            ],
13292                            [
13293                                788,
13294                                3179
13295                            ],
13296                            [
13297                                783,
13298                                3158
13299                            ],
13300                            [
13301                                761,
13302                                3173
13303                            ],
13304                            [
13305                                742,
13306                                3174
13307                            ],
13308                            [
13309                                759,
13310                                3196
13311                            ],
13312                            [
13313                                727,
13314                                3195
13315                            ],
13316                            [
13317                                706,
13318                                3205
13319                            ],
13320                            [
13321                                716,
13322                                3212
13323                            ],
13324                            [
13325                                705,
13326                                3227
13327                            ],
13328                            [
13329                                679,
13330                                3222
13331                            ],
13332                            [
13333                                658,
13334                                3229
13335                            ],
13336                            [
13337                                636,
13338                                3221
13339                            ],
13340                            [
13341                                637,
13342                                3247
13343                            ],
13344                            [
13345                                620,
13346                                3199
13347                            ],
13348                            [
13349                                631,
13350                                3213
13351                            ],
13352                            [
13353                                642,
13354                                3184
13355                            ],
13356                            [
13357                                628,
13358                                3167
13359                            ],
13360                            [
13361                                614,
13362                                3132
13363                            ],
13364                            [
13365                                576,
13366                                3140
13367                            ],
13368                            [
13369                                552,
13370                                3130
13371                            ],
13372                            [
13373                                545,
13374                                3108
13375                            ],
13376                            [
13377                                537,
13378                                3114
13379                            ],
13380                            [
13381                                509,
13382                                3089
13383                            ],
13384                            [
13385                                521,
13386                                3115
13387                            ],
13388                            [
13389                                493,
13390                                3078
13391                            ],
13392                            [
13393                                478,
13394                                3071
13395                            ],
13396                            [
13397                                455,
13398                                3077
13399                            ],
13400                            [
13401                                433,
13402                                3070
13403                            ],
13404                            [
13405                                426,
13406                                3086
13407                            ],
13408                            [
13409                                455,
13410                                3099
13411                            ],
13412                            [
13413                                483,
13414                                3126
13415                            ],
13416                            [
13417                                457,
13418                                3115
13419                            ],
13420                            [
13421                                438,
13422                                3133
13423                            ],
13424                            [
13425                                464,
13426                                3170
13427                            ],
13428                            [
13429                                478,
13430                                3204
13431                            ],
13432                            [
13433                                473,
13434                                3223
13435                            ],
13436                            [
13437                                491,
13438                                3228
13439                            ],
13440                            [
13441                                524,
13442                                3249
13443                            ],
13444                            [
13445                                543,
13446                                3235
13447                            ],
13448                            [
13449                                554,
13450                                3240
13451                            ],
13452                            [
13453                                588,
13454                                3228
13455                            ],
13456                            [
13457                                544,
13458                                3260
13459                            ],
13460                            [
13461                                549,
13462                                3268
13463                            ],
13464                            [
13465                                527,
13466                                3271
13467                            ],
13468                            [
13469                                524,
13470                                3284
13471                            ],
13472                            [
13473                                490,
13474                                3256
13475                            ],
13476                            [
13477                                469,
13478                                3252
13479                            ],
13480                            [
13481                                424,
13482                                3205
13483                            ],
13484                            [
13485                                428,
13486                                3196
13487                            ],
13488                            [
13489                                407,
13490                                3182
13491                            ],
13492                            [
13493                                408,
13494                                3170
13495                            ],
13496                            [
13497                                377,
13498                                3133
13499                            ],
13500                            [
13501                                343,
13502                                3131
13503                            ],
13504                            [
13505                                339,
13506                                3114
13507                            ],
13508                            [
13509                                317,
13510                                3109
13511                            ],
13512                            [
13513                                309,
13514                                3075
13515                            ],
13516                            [
13517                                334,
13518                                3075
13519                            ],
13520                            [
13521                                352,
13522                                3048
13523                            ],
13524                            [
13525                                305,
13526                                3020
13527                            ],
13528                            [
13529                                308,
13530                                3008
13531                            ],
13532                            [
13533                                287,
13534                                2998
13535                            ],
13536                            [
13537                                271,
13538                                2977
13539                            ],
13540                            [
13541                                246,
13542                                2981
13543                            ],
13544                            [
13545                                222,
13546                                2955
13547                            ],
13548                            [
13549                                212,
13550                                2964
13551                            ],
13552                            [
13553                                200,
13554                                2941
13555                            ],
13556                            [
13557                                186,
13558                                2947
13559                            ],
13560                            [
13561                                152,
13562                                2925
13563                            ],
13564                            [
13565                                163,
13566                                2924
13567                            ],
13568                            [
13569                                146,
13570                                2893
13571                            ],
13572                            [
13573                                133,
13574                                2901
13575                            ],
13576                            [
13577                                107,
13578                                2879
13579                            ],
13580                            [
13581                                96,
13582                                2891
13583                            ],
13584                            [
13585                                89,
13586                                2869
13587                            ],
13588                            [
13589                                73,
13590                                2877
13591                            ],
13592                            [
13593                                24,
13594                                2852
13595                            ],
13596                            [
13597                                40,
13598                                2842
13599                            ],
13600                            [
13601                                7,
13602                                2817
13603                            ],
13604                            [
13605                                -44,
13606                                2808
13607                            ],
13608                            [
13609                                -61,
13610                                2821
13611                            ],
13612                            [
13613                                -118,
13614                                2794
13615                            ],
13616                            [
13617                                -130,
13618                                2803
13619                            ],
13620                            [
13621                                -155,
13622                                2792
13623                            ],
13624                            [
13625                                -167,
13626                                2799
13627                            ],
13628                            [
13629                                -155,
13630                                2816
13631                            ],
13632                            [
13633                                -167,
13634                                2823
13635                            ],
13636                            [
13637                                -200,
13638                                2781
13639                            ],
13640                            [
13641                                -223,
13642                                2772
13643                            ],
13644                            [
13645                                -230,
13646                                2808
13647                            ],
13648                            [
13649                                -252,
13650                                2775
13651                            ],
13652                            [
13653                                -262,
13654                                2795
13655                            ],
13656                            [
13657                                -286,
13658                                2772
13659                            ],
13660                            [
13661                                -278,
13662                                2800
13663                            ],
13664                            [
13665                                -223,
13666                                2823
13667                            ],
13668                            [
13669                                -171,
13670                                2853
13671                            ],
13672                            [
13673                                -115,
13674                                2850
13675                            ],
13676                            [
13677                                -113,
13678                                2838
13679                            ],
13680                            [
13681                                -84,
13682                                2825
13683                            ],
13684                            [
13685                                -99,
13686                                2845
13687                            ],
13688                            [
13689                                -80,
13690                                2870
13691                            ],
13692                            [
13693                                -38,
13694                                2892
13695                            ],
13696                            [
13697                                12,
13698                                2907
13699                            ],
13700                            [
13701                                27,
13702                                2896
13703                            ],
13704                            [
13705                                31,
13706                                2922
13707                            ],
13708                            [
13709                                57,
13710                                2946
13711                            ],
13712                            [
13713                                97,
13714                                2964
13715                            ],
13716                            [
13717                                126,
13718                                3051
13719                            ],
13720                            [
13721                                154,
13722                                3072
13723                            ],
13724                            [
13725                                156,
13726                                3089
13727                            ],
13728                            [
13729                                95,
13730                                3074
13731                            ],
13732                            [
13733                                79,
13734                                3099
13735                            ],
13736                            [
13737                                90,
13738                                3123
13739                            ],
13740                            [
13741                                60,
13742                                3099
13743                            ],
13744                            [
13745                                61,
13746                                3072
13747                            ],
13748                            [
13749                                44,
13750                                3066
13751                            ],
13752                            [
13753                                28,
13754                                3121
13755                            ],
13756                            [
13757                                8,
13758                                3111
13759                            ],
13760                            [
13761                                -6,
13762                                3123
13763                            ],
13764                            [
13765                                -7,
13766                                3147
13767                            ],
13768                            [
13769                                -37,
13770                                3132
13771                            ],
13772                            [
13773                                -62,
13774                                3132
13775                            ],
13776                            [
13777                                -69,
13778                                3120
13779                            ],
13780                            [
13781                                -112,
13782                                3131
13783                            ],
13784                            [
13785                                -85,
13786                                3135
13787                            ],
13788                            [
13789                                -82,
13790                                3162
13791                            ],
13792                            [
13793                                -87,
13794                                3191
13795                            ],
13796                            [
13797                                -63,
13798                                3208
13799                            ],
13800                            [
13801                                -76,
13802                                3277
13803                            ],
13804                            [
13805                                -72,
13806                                3305
13807                            ],
13808                            [
13809                                -89,
13810                                3269
13811                            ],
13812                            [
13813                                -149,
13814                                3267
13815                            ],
13816                            [
13817                                -172,
13818                                3278
13819                            ],
13820                            [
13821                                -167,
13822                                3295
13823                            ],
13824                            [
13825                                -184,
13826                                3332
13827                            ],
13828                            [
13829                                -198,
13830                                3342
13831                            ],
13832                            [
13833                                -212,
13834                                3370
13835                            ],
13836                            [
13837                                -166,
13838                                3383
13839                            ],
13840                            [
13841                                -134,
13842                                3368
13843                            ],
13844                            [
13845                                -125,
13846                                3345
13847                            ],
13848                            [
13849                                -109,
13850                                3358
13851                            ],
13852                            [
13853                                -131,
13854                                3376
13855                            ],
13856                            [
13857                                -161,
13858                                3385
13859                            ],
13860                            [
13861                                -185,
13862                                3401
13863                            ],
13864                            [
13865                                -173,
13866                                3407
13867                            ],
13868                            [
13869                                -186,
13870                                3433
13871                            ],
13872                            [
13873                                -191,
13874                                3419
13875                            ],
13876                            [
13877                                -205,
13878                                3460
13879                            ],
13880                            [
13881                                -194,
13882                                3469
13883                            ],
13884                            [
13885                                -211,
13886                                3484
13887                            ],
13888                            [
13889                                -189,
13890                                3485
13891                            ],
13892                            [
13893                                -198,
13894                                3504
13895                            ],
13896                            [
13897                                -175,
13898                                3498
13899                            ],
13900                            [
13901                                -170,
13902                                3526
13903                            ],
13904                            [
13905                                -130,
13906                                3555
13907                            ],
13908                            [
13909                                -118,
13910                                3553
13911                            ],
13912                            [
13913                                -108,
13914                                3582
13915                            ],
13916                            [
13917                                -85,
13918                                3606
13919                            ],
13920                            [
13921                                -61,
13922                                3612
13923                            ],
13924                            [
13925                                -46,
13926                                3602
13927                            ],
13928                            [
13929                                -34,
13930                                3577
13931                            ],
13932                            [
13933                                -22,
13934                                3576
13935                            ],
13936                            [
13937                                7,
13938                                3591
13939                            ],
13940                            [
13941                                28,
13942                                3609
13943                            ],
13944                            [
13945                                31,
13946                                3600
13947                            ],
13948                            [
13949                                76,
13950                                3594
13951                            ],
13952                            [
13953                                100,
13954                                3613
13955                            ],
13956                            [
13957                                106,
13958                                3664
13959                            ],
13960                            [
13961                                92,
13962                                3688
13963                            ],
13964                            [
13965     
13965                           125,
13966                                3701
13967                            ],
13968                            [
13969                                117,
13970                                3734
13971                            ],
13972                            [
13973                                102,
13974                                3721
13975                            ],
13976                            [
13977                                73,
13978                                3725
13979                            ],
13980                            [
13981                                45,
13982                                3711
13983                            ],
13984                            [
13985                                20,
13986                                3709
13987                            ],
13988                            [
13989                                8,
13990                                3729
13991                            ],
13992                            [
13993                                -28,
13994                                3742
13995                            ],
13996                            [
13997                                -59,
13998                                3740
13999                            ],
14000                            [
14001                                -101,
14002                                3771
14003                            ],
14004                            [
14005                                -108,
14006                                3789
14007                            ],
14008                            [
14009                                -98,
14010                                3804
14011                            ],
14012                            [
14013                                -111,
14014                                3837
14015                            ],
14016                            [
14017                                -95,
14018                                3829
14019                            ],
14020                            [
14021                                -73,
14022                                3837
14023                            ],
14024                            [
14025                                -119,
14026                                3868
14027                            ],
14028                            [
14029                                -138,
14030                                3897
14031                            ],
14032                            [
14033                                -124,
14034                                3909
14035                            ],
14036                            [
14037                                -95,
14038                                3914
14039                            ],
14040                            [
14041                                -87,
14042                                3908
14043                            ],
14044                            [
14045                                -68,
14046                                3921
14047                            ],
14048                            [
14049                                -2,
14050                                3935
14051                            ],
14052                            [
14053                                36,
14054                                3937
14055                            ],
14056                            [
14057                                67,
14058                                3929
14059                            ],
14060                            [
14061                                47,
14062                                3893
14063                            ],
14064                            [
14065                                52,
14066                                3877
14067                            ],
14068                            [
14069                                111,
14070                                3858
14071                            ],
14072                            [
14073                                119,
14074                                3845
14075                            ],
14076                            [
14077                                140,
14078                                3868
14079                            ],
14080                            [
14081                                162,
14082                                3859
14083                            ],
14084                            [
14085                                147,
14086                                3882
14087                            ],
14088                            [
14089                                128,
14090                                3880
14091                            ],
14092                            [
14093                                135,
14094                                3893
14095                            ],
14096                            [
14097                                119,
14098                                3943
14099                            ],
14100                            [
14101                                132,
14102                                3945
14103                            ],
14104                            [
14105                                139,
14106                                3923
14107                            ],
14108                            [
14109                                133,
14110                                3914
14111                            ],
14112                            [
14113                                145,
14114                                3887
14115                            ],
14116                            [
14117                                163,
14118                                3891
14119                            ],
14120                            [
14121                                175,
14122                                3870
14123                            ],
14124                            [
14125                                196,
14126                                3867
14127                            ],
14128                            [
14129                                201,
14130                                3879
14131                            ],
14132                            [
14133                                179,
14134                                3900
14135                            ],
14136                            [
14137                                152,
14138                                3894
14139                            ],
14140                            [
14141                                142,
14142                                3915
14143                            ],
14144                            [
14145                                154,
14146                                3949
14147                            ],
14148                            [
14149                                129,
14150                                3950
14151                            ],
14152                            [
14153                                86,
14154                                3976
14155                            ],
14156                            [
14157                                89,
14158                                4000
14159                            ],
14160                            [
14161                                86,
14162                                4032
14163                            ],
14164                            [
14165                                55,
14166                                4092
14167                            ],
14168                            [
14169                                40,
14170                                4106
14171                            ],
14172                            [
14173                                27,
14174                                4135
14175                            ],
14176                            [
14177                                45,
14178                                4151
14179                            ],
14180                            [
14181                                57,
14182                                4180
14183                            ],
14184                            [
14185                                76,
14186                                4171
14187                            ],
14188                            [
14189                                124,
14190                                4160
14191                            ],
14192                            [
14193                                156,
14194                                4170
14195                            ],
14196                            [
14197                                182,
14198                                4190
14199                            ],
14200                            [
14201                                189,
14202                                4216
14203                            ],
14204                            [
14205                                201,
14206                                4233
14207                            ],
14208                            [
14209                                224,
14210                                4253
14211                            ],
14212                            [
14213                                229,
14214                                4246
14215                            ],
14216                            [
14217                                253,
14218                                4268
14219                            ],
14220                            [
14221                                256,
14222                                4258
14223                            ],
14224                            [
14225                                287,
14226                                4258
14227                            ],
14228                            [
14229                                317,
14230                                4277
14231                            ],
14232                            [
14233                                322,
14234                                4275
14235                            ]
14236                        ],
14237                        [
14238                            [
14239                                322,
14240                                4275
14241                            ],
14242                            [
14243                                323,
14244                                4272
14245                            ],
14246                            [
14247                                323,
14248                                4272
14249                            ],
14250                            [
14251                                323,
14252                                4272
14253                            ],
14254                            [
14255                                311,
14256                                4248
14257                            ],
14258                            [
14259                                326,
14260                                4263
14261                            ],
14262                            [
14263                                323,
14264                                4272
14265                            ],
14266                            [
14267                                323,
14268                                4272
14269                            ],
14270                            [
14271                                323,
14272                                4272
14273                            ],
14274                            [
14275                                324,
14276                                4274
14277                            ],
14278                            [
14279                                322,
14280                                4275
14281                            ]
14282                        ]
14283                    ],
14284                    [
14285                        [
14286                            [
14287                                -905,
14288                                2721
14289                            ],
14290                            [
14291                                -922,
14292                                2724
14293                            ],
14294                            [
14295                                -904,
14296                                2733
14297                            ],
14298                            [
14299                                -898,
14300                                2724
14301                            ],
14302                            [
14303                                -905,
14304                                2721
14305                            ]
14306                        ]
14307                    ],
14308                    [
14309                        [
14310                            [
14311                                -739,
14312                                2715
14313                            ],
14314                            [
14315                                -724,
14316                                2712
14317                            ],
14318                            [
14319                                -729,
14320                                2702
14321                            ],
14322                            [
14323                                -734,
14324                                2709
14325                            ],
14326                            [
14327                                -739,
14328                                2715
14329                            ]
14330                        ]
14331                    ],
14332                    [
14333                        [
14334                            [
14335                                -645,
14336                                2693
14337                            ],
14338                            [
14339                                -651,
14340                                2700
14341                            ],
14342                            [
14343                                -684,
14344                                2693
14345                            ],
14346                            [
14347                                -643,
14348                                2725
14349                            ],
14350                            [
14351                                -634,
14352                                2718
14353                            ],
14354                            [
14355                                -623,
14356                                2738
14357                            ],
14358                            [
14359                                -597,
14360                                2740
14361                            ],
14362                            [
14363                                -595,
14364                                2719
14365                            ],
14366                            [
14367                                -626,
14368                                2714
14369                            ],
14370                            [
14371                                -645,
14372                                2693
14373                            ]
14374                        ]
14375                    ],
14376                    [
14377                        [
14378                            [
14379                                -439,
14380                                2748
14381                            ],
14382                            [
14383                                -458,
14384                                2742
14385                            ],
14386                            [
14387                                -469,
14388                                2755
14389                            ],
14390                            [
14391                                -457,
14392                                2762
14393                            ],
14394                            [
14395                                -439,
14396                                2748
14397                            ]
14398                        ]
14399                    ],
14400                    [
14401                        [
14402                            [
14403                                -268,
14404                                2722
14405                            ],
14406                            [
14407                                -267,
14408                                2733
14409                            ],
14410                            [
14411                                -255,
14412                                2724
14413                            ],
14414                            [
14415                                -252,
14416                                2715
14417                            ],
14418                            [
14419                                -268,
14420                                2722
14421                            ]
14422                        ]
14423                    ],
14424                    [
14425                        [
14426                            [
14427                                -303,
14428                                2804
14429                            ],
14430                            [
14431                                -293,
14432                                2800
14433                            ],
14434                            [
14435                                -290,
14436                                2768
14437                            ],
14438                            [
14439                                -309,
14440                                2757
14441                            ],
14442                            [
14443                                -338,
14444                                2767
14445                            ],
14446                            [
14447                                -359,
14448                                2754
14449                            ],
14450                            [
14451                                -385,
14452                                2761
14453                            ],
14454                            [
14455                                -386,
14456                                2779
14457                            ],
14458                            [
14459                                -369,
14460                                2783
14461                            ],
14462                            [
14463                                -354,
14464                                2800
14465                            ],
14466                            [
14467                                -335,
14468                                2796
14469                            ],
14470                            [
14471                                -303,
14472                                2804
14473                            ]
14474                        ]
14475                    ],
14476                    [
14477                        [
14478                            [
14479                                -59,
14480                                2737
14481                            ],
14482                            [
14483                                -58,
14484                                2733
14485                            ],
14486                            [
14487                                -70,
14488                                2740
14489                            ],
14490                            [
14491                                -62,
14492                                2746
14493                            ],
14494                            [
14495                                -59,
14496                                2737
14497                            ]
14498                        ]
14499                    ],
14500                    [
14501                        [
14502                            [
14503                                1485,
14504                                2651
14505                            ],
14506                            [
14507                                1482,
14508                                2635
14509                            ],
14510                            [
14511                                1455,
14512                                2672
14513                            ],
14514                            [
14515                                1458,
14516                                2688
14517                            ],
14518                            [
14519                                1473,
14520                                2659
14521                            ],
14522                            [
14523                                1485,
14524                                2651
14525                            ]
14526                        ]
14527                    ],
14528                    [
14529                        [
14530                            [
14531                                1568,
14532                                2687
14533                            ],
14534                            [
14535                                1567,
14536                                2665
14537                            ],
14538                            [
14539                                1547,
14540                                2678
14541                            ],
14542                            [
14543                                1548,
14544                                2705
14545                            ],
14546                            [
14547                                1568,
14548                                2687
14549                            ]
14550                        ]
14551                    ],
14552                    [
14553                        [
14554                            [
14555                                -81,
14556                                2759
14557                            ],
14558                            [
14559                                -83,
14560                                2747
14561                            ],
14562                            [
14563                                -107,
14564                                2735
14565                            ],
14566                            [
14567                                -88,
14568                                2750
14569                            ],
14570                            [
14571                                -81,
14572                                2759
14573                            ]
14574                        ]
14575                    ],
14576                    [
14577                        [
14578                            [
14579                                -100,
14580                                2783
14581                            ],
14582                            [
14583                                -114,
14584                                2781
14585                            ],
14586                            [
14587                                -119,
14588                                2759
14589                            ],
14590                            [
14591                                -135,
14592                                2762
14593                            ],
14594                            [
14595                                -131,
14596                                2784
14597                            ],
14598                            [
14599                                -100,
14600                                2783
14601                            ]
14602                        ]
14603                    ],
14604                    [
14605                        [
14606                            [
14607                                1530,
14608                                2716
14609                            ],
14610                            [
14611                                1542,
14612                                2706
14613                            ],
14614                            [
14615                                1538,
14616                                2690
14617                            ],
14618                            [
14619                                1528,
14620                                2711
14621                            ],
14622                            [
14623                                1530,
14624                                2716
14625                            ]
14626                        ]
14627                    ],
14628                    [
14629                        [
14630                            [
14631                                1427,
14632                                2708
14633                            ],
14634                            [
14635                                1429,
14636                                2706
14637                            ],
14638                            [
14639                                1439,
14640                                2711
14641                            ],
14642                            [
14643                                1430,
14644                                2683
14645                            ],
14646                            [
14647                                1427,
14648                                2708
14649                            ]
14650                        ]
14651                    ],
14652                    [
14653                        [
14654                            [
14655                                1439,
14656                                2743
14657                            ],
14658                            [
14659                                1430,
14660                                2731
14661                            ],
14662                            [
14663                                1420,
14664                                2735
14665                            ],
14666                            [
14667                                1421,
14668                                2742
14669                            ],
14670                            [
14671                                1439,
14672                                2743
14673                            ]
14674                        ]
14675                    ],
14676                    [
14677                        [
14678                            [
14679                                1555,
14680                                2775
14681                            ],
14682                            [
14683                                1573,
14684                                2753
14685                            ],
14686                            [
14687                                1578,
14688                                2721
14689                            ],
14690                            [
14691                                1569,
14692                                2699
14693                            ],
14694                            [
14695                                1529,
14696                                2721
14697                            ],
14698                            [
14699                                1537,
14700                                2731
14701                            ],
14702                            [
14703                                1531,
14704                                2760
14705                            ],
14706                            [
14707                                1555,
14708                                2775
14709                            ]
14710                        ]
14711                    ],
14712                    [
14713                        [
14714                            [
14715                                1408,
14716                                2747
14717                            ],
14718                            [
14719                                1414,
14720                                2765
14721                            ],
14722                            [
14723                                1435,
14724                                2776
14725                            ],
14726                            [
14727                                1437,
14728                                2763
14729                            ],
14730                            [
14731                                1408,
14732                                2747
14733                            ]
14734                        ]
14735                    ],
14736                    [
14737                        [
14738                            [
14739                                1480,
14740                                2788
14741                            ],
14742                            [
14743                                1503,
14744                                2783
14745                            ],
14746                            [
14747                                1494,
14748                                2762
14749                            ],
14750                            [
14751                                1468,
14752                                2778
14753                            ],
14754                            [
14755                                1475,
14756                                2803
14757                            ],
14758                            [
14759                                1480,
14760                                2788
14761                            ]
14762                        ]
14763                    ],
14764                    [
14765                        [
14766                            [
14767                                1467,
14768                                2811
14769                            ],
14770                            [
14771                                1469,
14772                                2795
14773                            ],
14774                            [
14775                                1445,
14776                                2798
14777                            ],
14778                            [
14779                                1451,
14780                                2810
14781                            ],
14782                            [
14783                                1467,
14784                                2811
14785                            ]
14786                        ]
14787                    ],
14788                    [
14789                        [
14790                            [
14791                                1495,
14792                                2807
14793                            ],
14794                            [
14795                                1510,
14796                                2793
14797                            ],
14798                            [
14799                                1504,
14800                                2784
14801                            ],
14802                            [
14803                                1485,
14804                                2797
14805                            ],
14806                            [
14807                                1482,
14808                                2819
14809                            ],
14810                            [
14811                                1495,
14812                                2807
14813                            ]
14814                        ]
14815                    ],
14816                    [
14817                        [
14818                            [
14819                                253,
14820                                2834
14821                            ],
14822                            [
14823                                251,
14824                                2826
14825                            ],
14826                            [
14827                                235,
14828                                2816
14829                            ],
14830                            [
14831                                239,
14832                                2829
14833                            ],
14834                            [
14835                                253,
14836                                2834
14837                            ]
14838                        ]
14839                    ],
14840                    [
14841                        [
14842                            [
14843                                276,
14844                                2825
14845                            ],
14846                            [
14847                                279,
14848                                2820
14849                            ],
14850                            [
14851                                259,
14852                                2824
14853                            ],
14854                            [
14855                                263,
14856                                2832
14857                            ],
14858                            [
14859                                276,
14860                                2825
14861                            ]
14862                        ]
14863                    ],
14864                    [
14865                        [
14866                            [
14867                                1448,
14868                                2845
14869                            ],
14870                            [
14871                                1470,
14872                                2828
14873                            ],
14874                            [
14875                                1458,
14876                                2816
14877                            ],
14878                            [
14879                                1449,
14880                                2816
14881                            ],
14882                            [
14883                                1448,
14884                                2845
14885                            ]
14886                        ]
14887                    ],
14888                    [
14889                        [
14890                            [
14891                                333,
14892                                2880
14893                            ],
14894                            [
14895                                345,
14896                                2878
14897                            ],
14898                            [
14899                                321,
14900                                2864
14901                            ],
14902                            [
14903                                319,
14904                                2872
14905                            ],
14906                            [
14907                                333,
14908                                2880
14909                            ]
14910                        ]
14911                    ],
14912                    [
14913                        [
14914                            [
14915                                1295,
14916                                2870
14917                            ],
14918                            [
14919                                1295,
14920                                2846
14921                            ],
14922                            [
14923                                1283,
14924                                2843
14925                            ],
14926                            [
14927                                1288,
14928                                2862
14929                            ],
14930                            [
14931                                1295,
14932                                2870
14933                            ]
14934                        ]
14935                    ],
14936                    [
14937                        [
14938                            [
14939                                1246,
14940                                2943
14941                            ],
14942                            [
14943                                1241,
14944                                2926
14945                            ],
14946                            [
14947                                1234,
14948                                2942
14949                            ],
14950                            [
14951                                1237,
14952                                2951
14953                            ],
14954                            [
14955                                1246,
14956                                2943
14957                            ]
14958                        ]
14959                    ],
14960                    [
14961                        [
14962                            [
14963                                345,
14964                                2973
14965                            ],
14966                            [
14967                                360,
14968                                2960
14969                            ],
14970                            [
14971                                353,
14972                                2961
14973                            ],
14974                            [
14975                                333,
14976                                2971
14977                            ],
14978                            [
14979                                345,
14980                                2973
14981                            ]
14982                        ]
14983                    ],
14984                    [
14985                        [
14986                            [
14987                                370,
14988                                2989
14989                            ],
14990                            [
14991                                380,
14992                                3007
14993                            ],
14994                            [
14995                                393,
14996                                2992
14997                            ],
14998                            [
14999                                407,
15000                                2995
15001                            ],
15002                            [
15003                                413,
15004                                2978
15005                            ],
15006                            [
15007                                404,
15008                                2970
15009                            ],
15010                            [
15011                                365,
15012                                2959
15013                            ],
15014                            [
15015                                347,
15016                                2974
15017                            ],
15018                            [
15019                                353,
15020                                2990
15021                            ],
15022                            [
15023                                370,
15024                                2989
15025                            ]
15026                        ]
15027                    ],
15028                    [
15029                        [
15030                            [
15031                                389,
15032                                3006
15033                            ],
15034                            [
15035                                380,
15036                                3014
15037                            ],
15038                            [
15039                                397,
15040                                3021
15041                            ],
15042                            [
15043                                396,
15044                                3012
15045                            ],
15046                            [
15047                                389,
15048                                3006
15049                            ]
15050                        ]
15051                    ],
15052                    [
15053                        [
15054                            [
15055                                -42,
15056                                3112
15057                            ],
15058                            [
15059                                -58,
15060                                3105
15061                            ],
15062                            [
15063                                -53,
15064                                3120
15065                            ],
15066                            [
15067                                -31,
15068                                3126
15069                            ],
15070                            [
15071                                -42,
15072                                3112
15073                            ]
15074                        ]
15075                    ],
15076                    [
15077                        [
15078                            [
15079                                643,
15080                                3141
15081                            ],
15082                            [
15083                                641,
15084                                3133
15085                            ],
15086                            [
15087                                628,
15088                                3129
15089                            ],
15090                            [
15091                                639,
15092                                3150
15093                            ],
15094                            [
15095                                643,
15096                                3141
15097                            ]
15098                        ]
15099                    ],
15100                    [
15101                        [
15102                            [
15103                                683,
15104                                3167
15105                            ],
15106                            [
15107                                692,
15108                                3162
15109                            ],
15110                            [
15111                                662,
15112                                3126
15113                            ],
15114                            [
15115                                639,
15116                                3113
15117                            ],
15118                            [
15119                                651,
15120                                3133
15121                            ],
15122                            [
15123                                678,
15124                                3156
15125                            ],
15126                            [
15127                                683,
15128                                3167
15129                            ]
15130                        ]
15131                    ],
15132                    [
15133                        [
15134                            [
15135                                -250,
15136                                3366
15137                            ],
15138                            [
15139                                -233,
15140                                3350
15141                            ],
15142                            [
15143                                -243,
15144                                3328
15145                            ],
15146                            [
15147                                -239,
15148                                3312
15149                            ],
15150                            [
15151                                -272,
15152                                3312
15153                            ],
15154                            [
15155                                -294,
15156                                3323
15157                            ],
15158                            [
15159             
15159                   -315,
15160                                3350
15161                            ],
15162                            [
15163                                -321,
15164                                3371
15165                            ],
15166                            [
15167                                -293,
15168                                3362
15169                            ],
15170                            [
15171                                -286,
15172                                3369
15173                            ],
15174                            [
15175                                -250,
15176                                3366
15177                            ]
15178                        ]
15179                    ],
15180                    [
15181                        [
15182                            [
15183                                712,
15184                                3177
15185                            ],
15186                            [
15187                                732,
15188                                3173
15189                            ],
15190                            [
15191                                708,
15192                                3154
15193                            ],
15194                            [
15195                                714,
15196                                3166
15197                            ],
15198                            [
15199                                712,
15200                                3177
15201                            ]
15202                        ]
15203                    ],
15204                    [
15205                        [
15206                            [
15207                                655,
15208                                3184
15209                            ],
15210                            [
15211                                659,
15212                                3177
15213                            ],
15214                            [
15215                                651,
15216                                3159
15217                            ],
15218                            [
15219                                646,
15220                                3171
15221                            ],
15222                            [
15223                                655,
15224                                3184
15225                            ]
15226                        ]
15227                    ],
15228                    [
15229                        [
15230                            [
15231                                -553,
15232                                3496
15233                            ],
15234                            [
15235                                -557,
15236                                3490
15237                            ],
15238                            [
15239                                -570,
15240                                3515
15241                            ],
15242                            [
15243                                -566,
15244                                3524
15245                            ],
15246                            [
15247                                -553,
15248                                3496
15249                            ]
15250                        ]
15251                    ],
15252                    [
15253                        [
15254                            [
15255                                735,
15256                                3177
15257                            ],
15258                            [
15259                                725,
15260                                3175
15261                            ],
15262                            [
15263                                725,
15264                                3181
15265                            ],
15266                            [
15267                                752,
15268                                3187
15269                            ],
15270                            [
15271                                735,
15272                                3177
15273                            ]
15274                        ]
15275                    ],
15276                    [
15277                        [
15278                            [
15279                                -478,
15280                                2741
15281                            ],
15282                            [
15283                                -509,
15284                                2724
15285                            ],
15286                            [
15287                                -476,
15288                                2727
15289                            ],
15290                            [
15291                                -492,
15292                                2716
15293                            ],
15294                            [
15295                                -574,
15296                                2704
15297                            ],
15298                            [
15299                                -597,
15300                                2711
15301                            ],
15302                            [
15303                                -551,
15304                                2713
15305                            ],
15306                            [
15307                                -526,
15308                                2758
15309                            ],
15310                            [
15311                                -501,
15312                                2752
15313                            ],
15314                            [
15315                                -507,
15316                                2737
15317                            ],
15318                            [
15319                                -487,
15320                                2749
15321                            ],
15322                            [
15323                                -478,
15324                                2741
15325                            ]
15326                        ]
15327                    ],
15328                    [
15329                        [
15330                            [
15331                                1452,
15332                                2689
15333                            ],
15334                            [
15335                                1461,
15336                                2728
15337                            ],
15338                            [
15339                                1438,
15340                                2724
15341                            ],
15342                            [
15343                                1443,
15344                                2751
15345                            ],
15346                            [
15347                                1435,
15348                                2778
15349                            ],
15350                            [
15351                                1419,
15352                                2778
15353                            ],
15354                            [
15355                                1414,
15356                                2794
15357                            ],
15358                            [
15359                                1439,
15360                                2796
15361                            ],
15362                            [
15363                                1449,
15364                                2769
15365                            ],
15366                            [
15367                                1468,
15368                                2766
15369                            ],
15370                            [
15371                                1516,
15372                                2700
15373                            ],
15374                            [
15375                                1532,
15376                                2652
15377                            ],
15378                            [
15379                                1522,
15380                                2641
15381                            ],
15382                            [
15383                                1495,
15384                                2679
15385                            ],
15386                            [
15387                                1475,
15388                                2669
15389                            ],
15390                            [
15391                                1476,
15392                                2693
15393                            ],
15394                            [
15395                                1452,
15396                                2689
15397                            ]
15398                        ]
15399                    ],
15400                    [
15401                        [
15402                            [
15403                                1292,
15404                                2882
15405                            ],
15406                            [
15407                                1302,
15408                                2902
15409                            ],
15410                            [
15411                                1330,
15412                                2883
15413                            ],
15414                            [
15415                                1354,
15416                                2825
15417                            ],
15418                            [
15419                                1358,
15420                                2769
15421                            ],
15422                            [
15423                                1323,
15424                                2816
15425                            ],
15426                            [
15427                                1325,
15428                                2832
15429                            ],
15430                            [
15431                                1311,
15432                                2830
15433                            ],
15434                            [
15435                                1320,
15436                                2852
15437                            ],
15438                            [
15439                                1308,
15440                                2856
15441                            ],
15442                            [
15443                                1308,
15444                                2872
15445                            ],
15446                            [
15447                                1292,
15448                                2882
15449                            ]
15450                        ]
15451                    ],
15452                    [
15453                        [
15454                            [
15455                                362,
15456                                2955
15457                            ],
15458                            [
15459                                355,
15460                                2938
15461                            ],
15462                            [
15463                                381,
15464                                2954
15465                            ],
15466                            [
15467                                386,
15468                                2936
15469                            ],
15470                            [
15471                                380,
15472                                2918
15473                            ],
15474                            [
15475                                395,
15476                                2917
15477                            ],
15478                            [
15479                                382,
15480                                2900
15481                            ],
15482                            [
15483                                349,
15484                                2913
15485                            ],
15486                            [
15487                                366,
15488                                2899
15489                            ],
15490                            [
15491                                363,
15492                                2889
15493                            ],
15494                            [
15495                                337,
15496                                2894
15497                            ],
15498                            [
15499                                303,
15500                                2868
15501                            ],
15502                            [
15503                                278,
15504                                2838
15505                            ],
15506                            [
15507                                275,
15508                                2849
15509                            ],
15510                            [
15511                                298,
15512                                2883
15513                            ],
15514                            [
15515                                281,
15516                                2883
15517                            ],
15518                            [
15519                                271,
15520                                2862
15521                            ],
15522                            [
15523                                256,
15524                                2873
15525                            ],
15526                            [
15527                                259,
15528                                2892
15529                            ],
15530                            [
15531                                247,
15532                                2904
15533                            ],
15534                            [
15535                                253,
15536                                2919
15537                            ],
15538                            [
15539                                284,
15540                                2939
15541                            ],
15542                            [
15543                                295,
15544                                2933
15545                            ],
15546                            [
15547                                298,
15548                                2909
15549                            ],
15550                            [
15551                                306,
15552                                2934
15553                            ],
15554                            [
15555                                302,
15556                                2950
15557                            ],
15558                            [
15559                                318,
15560                                2956
15561                            ],
15562                            [
15563                                321,
15564                                2936
15565                            ],
15566                            [
15567                                329,
15568                                2963
15569                            ],
15570                            [
15571                                348,
15572                                2946
15573                            ],
15574                            [
15575                                340,
15576                                2965
15577                            ],
15578                            [
15579                                362,
15580                                2955
15581                            ]
15582                        ]
15583                    ],
15584                    [
15585                        [
15586                            [
15587                                1277,
15588                                2920
15589                            ],
15590                            [
15591                                1294,
15592                                2891
15593                            ],
15594                            [
15595                                1278,
15596                                2884
15597                            ],
15598                            [
15599                                1270,
15600                                2906
15601                            ],
15602                            [
15603                                1243,
15604                                2925
15605                            ],
15606                            [
15607                                1247,
15608                                2941
15609                            ],
15610                            [
15611                                1271,
15612                                2972
15613                            ],
15614                            [
15615                                1321,
15616                                2953
15617                            ],
15618                            [
15619                                1323,
15620                                2931
15621                            ],
15622                            [
15623                                1299,
15624                                2928
15625                            ],
15626                            [
15627                                1309,
15628                                2919
15629                            ],
15630                            [
15631                                1325,
15632                                2926
15633                            ],
15634                            [
15635                                1333,
15636                                2899
15637                            ],
15638                            [
15639                                1320,
15640                                2896
15641                            ],
15642                            [
15643                                1277,
15644                                2920
15645                            ]
15646                        ]
15647                    ],
15648                    [
15649                        [
15650                            [
15651                                1355,
15652                                2884
15653                            ],
15654                            [
15655                                1341,
15656                                2912
15657                            ],
15658                            [
15659                                1326,
15660                                2962
15661                            ],
15662                            [
15663                                1314,
15664                                2989
15665                            ],
15666                            [
15667                                1331,
15668                                2969
15669                            ],
15670                            [
15671                                1358,
15672                                2968
15673                            ],
15674                            [
15675                                1379,
15676                                2937
15677                            ],
15678                            [
15679                                1376,
15680                                2926
15681                            ],
15682                            [
15683                                1357,
15684                                2961
15685                            ],
15686                            [
15687                                1361,
15688                                2939
15689                            ],
15690                            [
15691                                1379,
15692                                2919
15693                            ],
15694                            [
15695                                1383,
15696                                2888
15697                            ],
15698                            [
15699                                1350,
15700                                2853
15701                            ],
15702                            [
15703                                1347,
15704                                2875
15705                            ],
15706                            [
15707                                1355,
15708                                2884
15709                            ]
15710                        ]
15711                    ],
15712                    [
15713                        [
15714                            [
15715                                -347,
15716                                3767
15717                            ],
15718                            [
15719                                -339,
15720                                3759
15721                            ],
15722                            [
15723                                -322,
15724                                3764
15725                            ],
15726                            [
15727                                -307,
15728                                3758
15729                            ],
15730                            [
15731                                -307,
15732                                3734
15733                            ],
15734                            [
15735                                -290,
15736                                3713
15737                            ],
15738                            [
15739                                -256,
15740                                3692
15741                            ],
15742                            [
15743                                -266,
15744                                3681
15745                            ],
15746                            [
15747                                -286,
15748                                3692
15749                            ],
15750                            [
15751                                -315,
15752                                3679
15753                            ],
15754                            [
15755                                -313,
15756                                3698
15757                            ],
15758                            [
15759                                -337,
15760                                3738
15761                            ],
15762                            [
15763                                -353,
15764                                3750
15765                            ],
15766                            [
15767                                -371,
15768                                3746
15769                            ],
15770                            [
15771                                -381,
15772                                3757
15773                            ],
15774                            [
15775                                -379,
15776                                3773
15777                            ],
15778                            [
15779                                -362,
15780                                3796
15781                            ],
15782                            [
15783                                -362,
15784                                3776
15785                            ],
15786                            [
15787                                -347,
15788                                3767
15789                            ]
15790                        ]
15791                    ],
15792                    [
15793                        [
15794                            [
15795                                1402,
15796                                2834
15797                            ],
15798                            [
15799                                1394,
15800                                2792
15801                            ],
15802                            [
15803                                1400,
15804                                2779
15805                            ],
15806                            [
15807                                1385,
15808                                2761
15809                            ],
15810                            [
15811                                1377,
15812                                2790
15813                            ],
15814                            [
15815                                1389,
15816                                2804
15817                            ],
15818                            [
15819                                1373,
15820                                2811
15821                            ],
15822                            [
15823                                1364,
15824                                2838
15825                            ],
15826                            [
15827                                1379,
15828                                2842
15829                            ],
15830                            [
15831                                1395,
15832                                2828
15833                            ],
15834                            [
15835                                1402,
15836                                2835
15837                            ],
15838                            [
15839                                1401,
15840                                2839
15841                            ],
15842                            [
15843                                1383,
15844                                2863
15845                            ],
15846                            [
15847                                1396,
15848                                2866
15849                            ],
15850                            [
15851                                1441,
15852                                2858
15853                            ],
15854                            [
15855                                1445,
15856                                2825
15857                            ],
15858                            [
15859                                1422,
15860                                2845
15861                            ],
15862                            [
15863                                1441,
15864                                2817
15865                            ],
15866                            [
15867                                1439,
15868                                2809
15869                            ],
15870                            [
15871                                1410,
15872                                2805
15873                            ],
15874                            [
15875                                1402,
15876                                2834
15877                            ]
15878                        ]
15879                    ]
15880                ]
15881            }
15882        },
15883        {
15884            "type": "Feature",
15885            "properties": {
15886                "hc-group": "__separator_lines__"
15887            },
15888            "geometry": {
15889                "type": "MultiLineString",
15890                "coordinates": [
15891                    [
15892                        [
15893                            -707,
15894                            5188
15895                        ],
15896                        [
15897                            3651,
15898                            2950
15899                        ]
15900                    ],
15901                    [
15902                        [
15903                            1747,
15904                            2584
15905                        ],
15906                        [
15907                            1747,
15908                            3799
15909                        ]
15910                    ]
15911                ]
15912            }
15913        },
15914        {
15915            "type": "Feature",
15916            "properties": {
15917                "hc-group": "__separator_lines__"
15918            },
15919            "geometry": {
15920                "type": "LineString",
15921                "coordinates": [
15922                    [
15923                        8896,
15924                        8456
15925                    ],
15926                    [
15927                        9714,
15928                        8505
15929                    ]
15930                ]
15931            }
15932        },
15933        {
15934            "type": "Feature",
15935            "properties": {
15936                "hc-group": "__separator_lines__"
15937            },
15938            "geometry": {
15939                "type": "LineString",
15940                "coordinates": [
15941                    [
15942                        9206,
15943                        8276
15944                    ],
15945                    [
15946                        9479,
15947                        7947
15948                    ],
15949                    [
15950                        9714,
15951                        7947
15952                    ]
15953                ]
15954            }
15955        },
15956        {
15957            "type": "Feature",
15958            "properties": {
15959                "hc-group": "__separator_lines__"
15960            },
15961            "geometry": {
15962                "type": "LineString",
15963                "coordinates": [
15964                    [
15965                        9361,
15966                        7991
15967                    ],
15968                    [
15969                        9497,
15970                        7389
15971                    ],
15972                    [
15973                        9714,
15974                        7389
15975                    ]
15976                ]
15977            }
15978        },
15979        {
15980            "type": "Feature",
15981            "properties": {
15982                "hc-group": "__separator_lines__"
15983            },
15984            "geometry": {
15985                "type": "LineString",
15986                "coordinates": [
15987                    [
15988                        9262,
15989                        7867
15990                    ],
15991                    [
15991
15992                        9479,
15993                        6831
15994                    ],
15995                    [
15996                        9714,
15997                        6831
15998                    ]
15999                ]
16000            }
16001        },
16002        {
16003            "type": "Feature",
16004            "properties": {
16005                "hc-group": "__separator_lines__"
16006            },
16007            "geometry": {
16008                "type": "LineString",
16009                "coordinates": [
16010                    [
16011                        9057,
16012                        7780
16013                    ],
16014                    [
16015                        9417,
16016                        6273
16017                    ],
16018                    [
16019                        9714,
16020                        6273
16021                    ]
16022                ]
16023            }
16024        },
16025        {
16026            "type": "Feature",
16027            "properties": {
16028                "hc-group": "__separator_lines__"
16029            },
16030            "geometry": {
16031                "type": "LineString",
16032                "coordinates": [
16033                    [
16034                        8803,
16035                        7216
16036                    ],
16037                    [
16038                        9355,
16039                        5715
16040                    ],
16041                    [
16042                        9714,
16043                        5715
16044                    ]
16045                ]
16046            }
16047        },
16048        {
16049            "type": "Feature",
16050            "properties": {
16051                "hc-group": "__separator_lines__"
16052            },
16053            "geometry": {
16054                "type": "LineString",
16055                "coordinates": [
16056                    [
16057                        8716,
16058                        6974
16059                    ],
16060                    [
16061                        9293,
16062                        5157
16063                    ],
16064                    [
16065                        9714,
16066                        5157
16067                    ]
16068                ]
16069            }
16070        },
16071        {
16072            "type": "Feature",
16073            "properties": {
16074                "hc-group": "__separator_lines__"
16075            },
16076            "geometry": {
16077                "type": "LineString",
16078                "coordinates": [
16079                    [
16080                        8660,
16081                        6837
16082                    ],
16083                    [
16084                        9231,
16085                        4599
16086                    ],
16087                    [
16088                        9714,
16089                        4599
16090                    ]
16091                ]
16092            }
16093        },
16094        {
16095            "type": "Feature",
16096            "properties": {
16097                "hc-group": "__separator_lines__"
16098            },
16099            "geometry": {
16100                "type": "LineString",
16101                "coordinates": [
16102                    [
16103                        8363,
16104                        6937
16105                    ],
16106                    [
16107                        9169,
16108                        4041
16109                    ],
16110                    [
16111                        9714,
16112                        4041
16113                    ]
16114                ]
16115            }
16116        },
16117        {
16118            "type": "Feature",
16119            "id": 1,
16120            "geometry": {
16121                "type": "Polygon",
16122                "coordinates": [
16123                    [
16124                        [
16125                            -431.39460668654283,
16126                            9597.877478393213
16127                        ],
16128                        [
16129                            -440.6155811269747,
16130                            9607.981831702271
16131                        ],
16132                        [
16133                            -432.1657187561086,
16134                            9624.44152396555
16135                        ],
16136                        [
16137                            -454.6844335834646,
16138                            9704.767491954328
16139                        ],
16140                        [
16141                            -444.1371126103189,
16142                            9723.285892546974
16143                        ],
16144                        [
16145                            -447.43332768545554,
16146                            9759.894296572753
16147                        ],
16148                        [
16149                            -423.1194293005168,
16150                            9781.016998761905
16151                        ],
16152                        [
16153                            -424.01948174205324,
16154                            9809.157957948315
16155                        ],
16156                        [
16157                            -407.36364695118107,
16158                            9821.36993535524
16159                        ],
16160                        [
16161                            -404.30403070474017,
16162                            9831.493696906986
16163                        ],
16164                        [
16165                            -443.1450473478335,
16166                            9844.635728761792
16167                        ],
16168                        [
16169                            -521.8837683477375,
16170                            9826.045253290815
16171                        ],
16172                        [
16173                            -620.7981106174923,
16174                            9816.980068856728
16175                        ],
16176                        [
16177                            -887.7841990223122,
16178                            9751.089807617884
16179                        ],
16180                        [
16181                            -1075.9007296074278,
16182                            9690.51650654704
16183                        ],
16184                        [
16185                            -1310.2830327374215,
16186                            9604.350339352026
16187                        ],
16188                        [
16189                            -1500.0479991049901,
16190                            9676.210418260143
16191                        ],
16192                        [
16193                            -2286.8646032469196,
16194                            7600.16169256266
16195                        ],
16196                        [
16197                            -1867.5280768894154,
16198                            7440.81728796998
16199                        ],
16200                        [
16201                            -2146.1319882075677,
16202                            6706.144884135221
16203                        ],
16204                        [
16205                            -1756.202324018292,
16206                            6558.882388851977
16207                        ],
16208                        [
16209                            -2008.0901924185678,
16210                            5823.801442682512
16211                        ],
16212                        [
16213                            -1586.5352583708873,
16214                            5693.096135910789
16215                        ],
16216                        [
16217                            -1729.99977469321,
16218                            5227.881925553535
16219                        ],
16220                        [
16221                            -1102.3328528977424,
16222                            5187.097882019317
16223                        ],
16224                        [
16225                            -483.8171173432668,
16226                            5150.436709456397
16227                        ],
16228                        [
16229                            -221.02316568797585,
16230                            5486.681207236709
16231                        ],
16232                        [
16233                            -89.04265589710792,
16234                            5430.622093423803
16235                        ],
16236                        [
16237                            -87.15174222730161,
16238                            5452.688083401813
16239                        ],
16240                        [
16241                            -100.80515051876318,
16242                            5454.576685504382
16243                        ],
16244                        [
16245                            -107.26487604653744,
16246                            5465.684446839006
16247                        ],
16248                        [
16249                            -104.63184762112326,
16250                            5514.798888741277
16251                        ],
16252                        [
16253                            -95.03928398979849,
16254                            5527.659915022501
16255                        ],
16256                        [
16257                            -97.11046327734005,
16258                            5582.501387245476
16259                        ],
16260                        [
16261                            -118.23556860421013,
16262                            5637.27923419609
16263                        ],
16264                        [
16265                            -215.33890628797667,
16266                            5766.4440923565435
16267                        ],
16268                        [
16269                            -257.35917176390296,
16270                            5771.301622134405
16271                        ],
16272                        [
16273                            -286.4347643910422,
16274                            5790.9460551104785
16275                        ],
16276                        [
16277                            -289.88700779053875,
16278                            5810.763792705338
16279                        ],
16280                        [
16281                            -279.0476472375633,
16282                            5829.579262679109
16283                        ],
16284                        [
16285                            -291.022235492238,
16286                            5869.04737499925
16287                        ],
16288                        [
16289                            -347.1159335914592,
16290                            5872.919995159491
16291                        ],
16292                        [
16293                            -410.94558160048973,
16294                            5917.513125856437
16295                        ],
16296                        [
16297                            -432.3941941105538,
16298                            5941.598761612152
16299                        ],
16300                        [
16301                            -436.3263681793861,
16302                            5970.5322303030725
16303                        ],
16304                        [
16305                            -485.67589377134755,
16306                            6022.059553727497
16307                        ],
16308                        [
16309                            -543.8236411416437,
16310                            6034.317534022957
16311                        ],
16312                        [
16313                            -592.5488022043692,
16314                            6065.298754284886
16315                        ],
16316                        [
16317                            -661.8150598731064,
16318                            6076.171141017492
16319                        ],
16320                        [
16321                            -671.620207391652,
16322                            6084.73848923436
16323                        ],
16324                        [
16325                            -675.3043736562197,
16326                            6106.204987804236
16327                        ],
16328                        [
16329                            -698.6993640668594,
16330                            6124.3254060151885
16331                        ],
16332                        [
16333                            -700.3978132894329,
16334                            6136.898603314398
16335                        ],
16336                        [
16337                            -682.1913319898163,
16338                            6164.005455594181
16339                        ],
16340                        [
16341                            -685.9962630274074,
16342                            6179.820085585554
16343                        ],
16344                        [
16345                            -674.350907223155,
16346                            6199.434296081794
16347                        ],
16348                        [
16349                            -682.3456918533425,
16350                            6218.468102446361
16351                        ],
16352                        [
16353                            -660.0580844443107,
16354                            6266.051054146411
16355                        ],
16356                        [
16357                            -680.5278504755295,
16358                            6276.022475080784
16359                        ],
16360                        [
16361                            -702.1853140849826,
16362                            6303.370316406081
16363                        ],
16364                        [
16365                            -704.8776019847207,
16366                            6320.584199221349
16367                        ],
16368                        [
16369                            -688.4163415185326,
16370                            6353.477060714877
16371                        ],
16372                        [
16373                            -708.6760681474688,
16374                            6366.191357065475
16375                        ],
16376                        [
16377                            -729.7253615818554,
16378                            6416.504427241975
16379                        ],
16380                        [
16381                            -753.6337911125754,
16382                            6435.570564085444
16383                        ],
16384                        [
16385                            -756.3590371010991,
16386                            6470.857370328935
16387                        ],
16388                        [
16389                            -776.203304303285,
16390                            6506.233047117634
16391                        ],
16392                        [
16393                            -774.8118455347554,
16394                            6531.957168937793
16395                        ],
16396                        [
16397                            -786.3415837653052,
16398                            6541.326436581037
16399                        ],
16400                        [
16401                            -802.2171339435749,
16402                            6591.801476596311
16403                        ],
16404                        [
16405                            -831.6902222201461,
16406                            6627.690063274775
16407                        ],
16408                        [
16409                            -828.5185089322129,
16410                            6712.851844049019
16411                        ],
16412                        [
16413                            -814.9169950321268,
16414                            6728.763338687212
16415                        ],
16416                        [
16417                            -811.3944696570409,
16418                            6795.2538910496005
16419                        ],
16420                        [
16421                            -842.5612917468384,
16422                            6828.358553620263
16423                        ],
16424                        [
16425                            -868.0983407417865,
16426                            6884.762069822542
16427                        ],
16428                        [
16429                            -867.6435769234272,
16430                            6905.555738198727
16431                        ],
16432                        [
16433                            -856.1706602796739,
16434                            6928.764566323287
16435                        ],
16436                        [
16437                            -866.4988319980405,
16438                            6979.612224875388
16439                        ],
16440                        [
16441                            -860.9468102111744,
16442                            7000.835446546904
16443                        ],
16444                        [
16445                            -851.4592786077737,
16446                            7010.666394161395
16447                        ],
16448                        [
16449                            -846.6495828929543,
16450                            7047.261653833892
16451                        ],
16452                        [
16453                            -876.6088251085692,
16454                            7075.518785182303
16455                        ],
16456                        [
16457                            -892.6817911134759,
16458                            7110.637208836906
16459                        ],
16460                        [
16461                            -909.059903953746,
16462                            7106.242867829792
16463                        ],
16464                        [
16465                            -929.3312879724996,
16466                            7118.887429279647
16467                        ],
16468                        [
16469                            -928.3672533685788,
16470                            7131.12769843836
16471                        ],
16472                        [
16473                            -903.8519635900186,
16474                            7161.421411639407
16475                        ],
16476                        [
16477                            -915.8934459478667,
16478                            7206.198310641759
16479                        ],
16480                        [
16481                            -913.098573769158,
16482                            7221.877062741813
16483                        ],
16484                        [
16485                            -920.5937447759263,
16486                            7244.387003475035
16487                        ],
16488                        [
16489                            -945.9865475130124,
16490                            7277.992818287739
16491                        ],
16492                        [
16493                            -959.2160693121626,
16494                            7322.201346456721
16495                        ],
16496                        [
16497                            -996.0465338291268,
16498                            7392.415823336079
16499                        ],
16500                        [
16501                            -995.5516691908988,
16502                            7411.857776169187
16503                        ],
16504                        [
16505                            -979.8707886645152,
16506                            7428.401333829972
16507                        ],
16508                        [
16509                            -981.9911772156391,
16510                            7510.622989362148
16511                        ],
16512                        [
16513                            -965.5201830437941,
16514                            7547.559414995063
16515                        ],
16516                        [
16517                            -955.4975878375647,
16518                            7556.789931782357
16519                        ],
16520                        [
16521                            -949.7336748118743,
16522                            7624.1119120361345
16523                        ],
16524                        [
16525                            -975.9231323779971,
16526                            7685.618123379387
16527                        ],
16528                        [
16529                            -975.6504554904183,
16530                            7704.769006575189
16531                        ],
16532                        [
16533                            -1013.1413661174322,
16534                            7758.710510648403
16535                        ],
16536                        [
16537                            -1004.6259662950548,
16538                            7792.918503640609
16539                        ],
16540                        [
16541                            -1017.0701170944391,
16542                            7817.785819167155
16543                        ],
16544                        [
16545                            -917.0783940641847,
16546                            7919.6182884009095
16547                        ],
16548                        [
16549                            -906.6268464057681,
16550                            7936.911996008212
16551                        ],
16552                        [
16553                            -911.9515771495172,
16554                            7951.726910142119
16555                        ],
16556                        [
16557                            -908.1340293454111,
16558                            7975.252399735813
16559                        ],
16560                        [
16561                            -893.975037975384,
16562                            7983.811905998922
16563                        ],
16564                        [
16565                            -879.7120103475223,
16566                            8006.666890114773
16567                        ],
16568                        [
16569                            -890.0054998696078,
16570                            8014.649765418964
16571                        ],
16572                        [
16573                            -890.4747811286421,
16574                            8026.24510942667
16575                        ],
16576                        [
16577                            -879.7833845944034,
16578                            8033.853864438413
16579                        ],
16580                        [
16581                            -867.9192838542149,
16582                            8028.263243822108
16583                        ],
16584                        [
16585                            -862.5989590585891,
16586                            8040.770172984453
16587                        ],
16588                        [
16589                            -857.5777639795795,
16590                            8107.923828174379
16591                        ],
16592                        [
16593                            -883.6573780768117,
16594                            8139.19184290685
16595                        ],
16596                        [
16597                            -888.8189579576054,
16598                            8156.719822279054
16599                        ],
16600                        [
16601                            -878.6237444414819,
16602                            8168.1209720969
16603                        ],
16604                        [
16605                            -857.2081637461528,
16606                            8155.546492341587
16607                        ],
16608                        [
16609                            -852.1914004428497,
16610                            8164.615818813042
16611                        ],
16612                        [
16613                            -850.796397662527,
16614                            8189.8332436821
16615                        ],
16616                        [
16617                            -865.2940938606282,
16618                            8218.477032963221
16619                        ],
16620                        [
16621                            -864.617119281602,
16622                            8257.246700013016
16623                        ],
16624                        [
16625                            -854.1313634801485,
16626                            8300.061096025485
16627                        ],
16628                        [
16629                            -861.5707974231333,
16630                            8318.928497958004
16631                        ],
16632                        [
16633                            -845.5358434922791,
16634                            8336.500190487515
16635                        ],
16636                        [
16637                            -835.1968800771908,
16638                            8338.8825057884
16639                        ],
16640                        [
16641                            -831.2856183546405,
16642                            8353.437921433448
16643                        ],
16644                        [
16645                            -840.2178288551346,
16646                            8361.800667420515
16647                        ],
16648                        [
16649                            -843.3905989601675,
16650                            8386.031409961648
16651                        ],
16652                        [
16653                            -858.5520760768378,
16654                            8392.54718459717
16655                        ],
16656                        [
16657                            -860.8077419109297,
16658                            8406.038299500875
16659                        ],
16660                        [
16661                            -810.0394312800622,
16662                            8453.749661872998
16663                        ],
16664                        [
16665                            -799.5170576235756,
16666                            8482.615148415776
16667                        ],
16668                        [
16669                            -783.1268412809748,
16670                            8498.930391557415
16671                        ],
16672                        [
16673                            -774.4544396697482,
16674                            8530.742510949993
16675                        ],
16676                        [
16677                            -739.7453399859451,
16678                            8557.500874919295
16679                        ],
16680                        [
16681                            -694.5594584062779,
16682                            8634.06688776102
16683                        ],
16684                        [
16685                            -631.281084789968,
16686                            8780.041781618947
16687                        ],
16688                        [
16689                            -597.713114406957,
16690                            8876.636491388785
16691                        ],
16692                        [
16693                            -540.8321695222103,
16694                            8988.754256935947
16695                        ],
16696                        [
16697                            -543.5275034312967,
16698                            9006.841775757131
16699                        ],
16700                        [
16701                            -533.1693658651961,
16702                            9015.291663016398
16703                        ],
16704                        [
16705                            -531.1359143137015,
16706                            9036.436851624647
16707                        ],
16708                        [
16709                            -518.3940068850852,
16710                            9052.612619094876
16711                        ],
16712                        [
16713                            -503.2631924908761,
16714                            9091.81085400092
16715                        ],
16716                        [
16717                            -508.6051269770936,
16718                            9108.62221606136
16719                        ],
16720                        [
16721                            -494.9620090927436,
16722                            9142.68852395119
16723                        ],
16724                        [
16725                            -497.77371826243495,
16726                            9156.761049792094
16727                        ],
16728                        [
16729                            -475.1254537672869,
16730                            9174.429969493553
16731                        ],
16732                        [
16733                            -473.3938673065329,
16734                            9208.312981018065
16735                        ],
16736                        [
16737                            -484.7708824369287,
16738                            9239.889199161056
16739                        ],
16740                        [
16741                            -465.56668503793003,
16742                            9281.186373997723
16743                        ],
16744                        [
16745                            -443.70332101123427,
16746                            9377.633798544244
16747                        ],
16748                        [
16749                            -447.774430720517,
16750                            9409.231090103616
16751                        ],
16752                        [
16753                            -435.25592094667854,
16754                            9444.279323822695
16755                        ],
16756                        [
16757                            -429.0614830395342,
16758                            9493.773242889634
16759                        ],
16760                        [
16761                            -438.3719539915078,
16762                            9508.124361304965
16763                        ],
16764                        [
16765                            -444.13553290239145,
16766                            9551.135589675858
16767                        ],
16768                        [
16769                            -429.87849539174624,
16770                            9563.497009612332
16771                        ],
16772                        [
16773                            -426.26332230715934,
16774                            9597.262084717218
16775                        ],
16776                        [
16777                            -431.39460668654283,
16778                            9597.877478393213
16779                        ]
16780                    ],
16781                    [
16782                        [
16783                            -953.2947983119985,
16784                            7058.783327054418
16785                        ],
16786                        [
16787                            -963.8355842062647,
16788                            7074.590072593936
16789                        ],
16790                        [
16791                            -950.8961797115664,
16792                            7086.901026638281
16793                        ],
16794                        [
16795                            -928.2595481874529,
16796                            7065.172536280137
16797                        ],
16798                        [
16799                            -923.1759969088047,
16800                            7043.393642485613
16801                        ],
16802                        [
16803                            -942.2243925616392,
16804                            7036.440609721911
16805                        ],
16806                        [
16807                            -953.2947983119985,
16808                            7058.783327054418
16809                        ]
16810                    ]
16811                ]
16812            },
16813            "properties": {
16814                "OBJECTID": 1,
16815                "Shape_Length": 5982094.041632586,
16816                "Shape_Area": 1006407069768.2091,
16817                "hc-group": "admin1",
16818                "hc-middle-x": 0.4,
16819                "hc-middle-y": 0.6,
16820                "hc-key": "us-pac",
16821                "hc-a2": "PAC",
16822                "labelrank": 0,
16823                "hasc": "US.PAC",
16824                "woe-id": null,
16825                "state-fips": "57",
16826                "fips": "US57",
16827                "postal-code": "PAC",
16828                "name": "Pacific",
16829                "country": "United States of America",
16830                "region": "Offshore",
16831                "longitude": "27.598",
16832                "woe-name": "Pacific",
16833                "latitude": "-87.278",
16834                "woe-label": "Pacific, US, United States",
16835                "type": "Outer continental shelf"
16836            }
16837        },
16838        {
16839            "type": "Feature",
16840            "id": 2,
16841            "geometry": {
16842                "type": "Polygon",
16843                "coordinates": [
16844                    [
16845                        [
16846                            6668.528740612335,
16847                            4399.13514953443
16848                        ],
16849                        [
16850                            6473.698080008123,
16851                            4348.186501040629
16852                        ],
16853                        [
16854                            6471.188269154653,
16855                            4375.082092170734
16856                        ],
16857                        [
16858                            6366.818195225449,
16859                            4352.014322634332
16860                        ],
16861                        [
16862                            6352.2718375295235,
16863                            4341.878955124926
16864                        ],
16865                        [
16866                            6327.277552052732,
16867                            4354.294227766652
16868                        ],
16869                        [
16870                            6261.225183704388,
16871                            4335.116765393234
16872                        ],
16873                        [
16874                            6168.970174061459,
16875                            4338.872278959552
16876                        ],
16877                        [
16878                            6164.746534689774,
16879                            4335.947141124015
16880                        ],
16881                        [
16882                            6194.962939616588,
16883                            4280.5947127956815
16884                        ],
16885                        [
16886                            6194.794717870986,
16887                            4241.118673052649
16888                        ],
16889                        [
16890                            6167.917987907847,
16891                            4187.003567800797
16892                        ],
16893                        [
16894                            6118.988252532131,
16895                            4135.2022198718505
16896                        ],
16897                        [
16898                            6138.408851384316,
16899                            4100.999247739669
16900                        ],
16901                        [
16902                            6174.326466072599,
16903                            4088.3814461270067
16904                        ],
16905                        [
16906                            6176.431522810325,
16907                            4061.279844235297
16908                        ],
16909                        [
16910                            6159.241451950027,
16911                            4047.494744651519
16912                        ],
16913                        [
16914                            6156.707149755028,
16915                            4032.2395097297567
16916                        ],
16917                        [
16918                            6135.213478083508,
16919                            4003.947198822031
16920                        ],
16921                        [
16922                            6120.420662483835,
16923                            4002.9594174606536
16924                        ],
16925                        [
16926                            6106.409075339836,
16927                            4017.6541202422904
16928                        ],
16929                        [
16930                            6096.252375904599,
16931                            4014.504188900072
16932                        ],
16933                        [
16934                            6065.294360129784,
16935                            3979.69514264607
16936                        ],
16937                        [
16938                            6048.88137240087,
16939                            3990.843453670708
16940                        ],
16941                        [
16942                            6050.191842431038,
16943                            4045.394793319181
16944                        ],
16945                        [
16946                            6039.357507498028,
16947                            4060.882210309843
16948                        ],
16949                        [
16950                            6017.202994116495,
16951                            4067.0704298188803
16952                        ],
16953                        [
16954                            5919.863355722484,
16955                            4043.570831129404
16956                        ],
16957                        [
16958                            5892.8162535167085,
16959                            4020.3664694585486
16960                        ],
16961                        [
16962                            5851.305448869641,
16963                            4004.6189392952774
16964                        ],
16965                        [
16966                            5833.40929039544,
16967                            4001.1997699014237
16968                        ],
16969                        [
16970                            5802.586706627786,
16971                            4009.7217102678087
16972                        ],
16973                        [
16974                            5757.751205831271,
16975                            3995.0107210927254
16976                        ],
16977                        [
16978                            5717.786266467275,
16979                            3993.706506968603
16980                        ],
16981                        [
16982                            5694.247046882968,
16983                            4005.8671916584544
16984                        ],
16985                        [
16986                            5703.385373379039,
16987                            4026.94339571229
16988                        ],
16989                        [
16990                            5629.967505665924,
16991                            4042.272557580225
16992                        ],
16993                        [
16994                            5598.326740065706,
16995                            4069.029208615353
16996                        ],
16997                        [
16998                            5546.1288049321165,
16999                            4085.6069156371404
17000                        ],
17001                        [
17002                            5530.526053537295,
17003                            4080.95290590028
17004                        ],
17005                        [
17006                            5515.25383722577,
17007                            4089.5691077250403
17008                        ],
17009                        [
17010                            5492.829770931074,
17011                            4079.709544338896
17012                        ],
17013                        [
17014                            5483.945857229031,
17015                            4094.333608962678
17016                        ],
17017                        [
17018                            5444.748982245178,
17019                            4121.920927110479
17020                        ],
17021                        [
17022                            5397.244276711627,
17023                            4106.878801774202
17024                        ],
17025                        [
17026                            5320.266668381475,
17027                            4115.903501772598
17028                        ],
17029                        [
17030                            5180.655491293043,
17031                            4163.271002119214
17032                        ],
17033                        [
17034                            5155.673435168704,
17035                            4154.469471073616
17036                        ],
17037                        [
17038                            5121.984476208567,
17039                            4159.477744382939
17040                        ],
17041                        [
17042                            5059.077418885706,
17043                            4147.115258589922
17044                        ],
17045                        [
17046                            5046.874025498146,
17047                            4125.234876409756
17048                        ],
17049                        [
17050                            5051.101592303405,
17051                            4109.6001490796125
17052                        ],
17053                        [
17054                            5002.683889829824,
17055                            4106.28167338201
17056                        ],
17057                        [
17058                            4872.699111437158,
17059                            4045.5025069478515
17060                        ],
17061                        [
17062                            4857.101318700174,
17063                            4017.0061376077074
17064                        ],
17065                        [
17066                            4783.425502868857,
17067                            3963.5631290147094
17068                        ],
17069                        [
17070                            4731.226396337749,
17071                            3914.484039399853
17072                        ],
17073                        [
17074                            4500.3537592024195,
17075                            3785.7571674796845
17076                        ],
17077                        [
17078                            4471.806554168761,
17079                            3754.8929945218824
17080                        ],
17081                        [
17082                            4393.990255040401,
17083                            3706.7050782582746
17084                        ],
17085                        [
17086                            4341.427232236291,
17087                            3652.3667251621446
17088                        ],
17089                        [
17090                            4278.4076867070235,
17091                            3539.951239553092
17092                        ],
17093                        [
17094                            4259.137732298282,
17095                            3457.8208477518674
17096                        ],
17097                        [
17098                            4261.931997866028,
17099                            3404.9713286818233
17100                        ],
17101                        [
17102                            4299.072558833664,
17103                            3263.0241907816962
17104                        ],
17105                        [
17106                            4310.5407672715955,
17107                            3164.7681084068217
17108                        ],
17109                        [
17110                            4351.692683098751,
17111                            3174.519613483698
17112                        ],
17113                        [
17114                            5157.566986917168,
17115                            3179.1076854449
17116                        ],
17117                        [
17118                            5267.36605041153,
17119                            3123.816575514672
17120                        ],
17121                        [
17122                            5283.321974046757,
17123                            3097.303433110059
17124                        ],
17125                        [
17126                            5590.374710063424,
17127                            3093.5075388488967
17128                        ],
17129                        [
17130                            5867.383392961449,
17131                            3153.351434415452
17132                        ],
17133                        [
17134                            6374.847749953844,
17135                            3168.210677810157
17136                        ],
17137                        [
17138                            6698.368280029002,
17139                            3171.38817561782
17140                        ],
17141                        [
17142                            6709.446559608788,
17143                            3145.794639427326
17144                        ],
17145                        [
17146                            6827.004294563974,
17147                            3079.464651043032
17148                        ],
17149                        [
17150                            7041.5619985589965,
17151                            2977.1474297666464
17152                        ],
17153                        [
17154                            7286.507410455037,
17155                            2882.7450857738486
17156                        ],
17157                        [
17158                            7483.689808991754,
17159                            2827.082330788925
17160                        ],
17161                        [
17162                            7671.624749235569,
17163                            2813.413146729554
17164                        ],
17165                        [
17166                            7732.8049431025465,
17167                            2820.039545685713
17168                        ],
17169                        [
17170                            7707.853203844617,
17171                            2993.210312865608
17172                        ],
17173                        [
17174                            7686.885997988651,
17175                            3005.093061718826
17176                        ],
17177                        [
17178                            7676.516088005612,
17179                            3026.8303805505157
17180                        ],
17181                        [
17182                            7680.185255792894,
17183                            3050.1332121642145
17184                        ],
17185                        [
17186                            7697.4033540232795,
17187                            3069.680737066912
17188                        ],
17189                        [
17190                            7754.065408994355,
17191                            3085.398056961182
17192                        ],
17193                        [
17194                            7782.423771788628,
17195                            3066.7564029382693
17196                        ],
17197                        [
17198                            7786.647190921614,
17199                            3033.124265327444
17200                        ],
17201                        [
17202                            7865.904329884384,
17203                            3044.992115431887
17204                        ],
17205                        [
17206                            7870.438502533159,
17207                            3065.7556951149754
17208                        ],
17209                        [
17210                            7887.106492629,
17211                            3087.572113449897
17212                        ],
17213                        [
17214                            7908.2323537001685,
17215                            3095.7444953219374
17216                        ],
17217                        [
17218                            7932.414991248979,
17219                            3092.6032584775694
17220                        ],
17221                        [
17222                            7961.098964514118,
17223                            3106.2422829838897
17224                        ],
17225                        [
17226                            8054.7810486032195,
17227                            3178.0932667060633
17228                        ],
17229                        [
17230                            8138.559811070114,
17231                            3175.394961580945
17232                        ],
17233                        [
17234                            8081.7911821704165,
17235                            3237.1123598957583
17236                        ],
17237                        [
17238                            8075.295355177894,
17239                            3292.3018839047163
17240                        ],
17241                        [
17242                            8053.719949826231,
17243                            3322.139055168389
17244                        ],
17245                        [
17246                            8015.603699493962,
17247                            3357.236621395514
17248                        ],
17249                        [
17250                            7991.275317225754,
17251                            3366.8551802510538
17252                        ],
17253                        [
17254                            7955.167738677334,
17255                            3362.8770880092197
17256                        ],
17257                        [
17258                            7923.970788568711,
17259                            3390.2965981220786
17260                        ],
17261                        [
17262                            7893.5062330934215,
17263                            3444.4890160791974
17264                        ],
17265                        [
17266                            7874.2688322183,
17267                            3503.501036742169
17268                        ],
17269                        [
17270                            7835.90265980133,
17271                            3498.4861356098536
17272                        ],
17273                        [
17274                            7795.7337446531255,
17275                            3520.8210007707075
17276                        ],
17277                        [
17278                            7761.005482329232,
17279                            3581.140009907971
17280                        ],
17281                        [
17282                            7752.173003285428,
17283                            3612.575462795233
17284                        ],
17285                        [
17286                            7683.640305310861,
17287                            3707.3330729396357
17288                        ],
17289                        [
17290                            7616.899020923145,
17291                            3784.629707354933
17292                        ],
17293                        [
17294                            7605.548130681231,
17295                            3810.459406816206
17296                        ],
17297                        [
17298                            7606.418776283115,
17299                            3837.0338002324606
17300                        ],
17301                        [
17302                            7584.642368369667,
17303                            3858.96350860232
17304                        ],
17305                        [
17306                            7574.675942255757,
17307                            3883.8967780983066
17308                        ],
17309                        [
17310                            7575.11718931332,
17311                            3917.6033545106975
17312                        ],
17313                        [
17314                            7561.593859623108,
17315                            3979.2240400963374
17316                        ],
17317                        [
17318                            7568.358017884908,
17319                            3999.562336505517
17320                        ],
17321                        [
17322                            7585.093847134862,
17323                            4013.4076774779087
17324                        ],
17325                        [
17326                            7590.16375839972,
17327                            4071.9620033849806
17328                        ],
17329                        [
17330                            7563.679224485433,
17331                            4118.849416241304
17332                        ],
17333                        [
17334                            7551.065536969218,
17335                            4169.650774822875
17336                        ],
17337                        [
17338                            7517.036920629516,
17339                            4160.5392465395535
17340                        ],
17341                        [
17342                            7490.4489841769155,
17343                            4170.856484958728
17344                        ],
17345                        [
17346                            7471.6308088375135,
17347                            4209.232247150907
17348                        ],
17349                        [
17350                            7454.197074146514,
17351                            4221.3781307671425
17352                        ],
17353                        [
17354                            7444.9636824851805,
17355                            4241.532111804843
17356                        ],
17357                        [
17358                            7399.355942634702,
17359                            4267.5336270348935
17360                        ],
17361                        [
17362                            7384.013599316322,
17363                            4305.0257206620845
17364                        ],
17365                        [
17366                            7353.075356891137,
17367                            4322.085124231527
17368                        ],
17369                        [
17370                            7330.790929914085,
17371                            4357.894022007624
17372                        ],
17373                        [
17374                            7261.349613241502,
17375                            4388.155814185521
17376                        ],
17377                        [
17378                            7240.300969313606,
17379                            4380.412733182642
17380                        ],
17381                        [
17382                            7236.867807483743,
17383                            4356.155168691259
17384                        ],
17385                        [
17386                            7223.411735827405,
17387                            4337.886274534706
17388                        ],
17389                        [
17390                            7187.435350747762,
17391                            4327.496066198074
17392                        ],
17393                        [
17394                            7175.204132619111,
17395                            4308.829949948344
17396                        ],
17397                        [
17398                            7090.368985845181,
17399                            4243.455404934584
17400                        ],
17401                        [
17402                            7046.349142354049,
17403                            4228.51838370363
17404                        ],
17405                        [
17406                            7003.645733652024,
17407                            4246.113465546573
17408                        ],
17409                        [
17410                            6980.863481282022,
17411                            4238.446423949961
17412                        ],
17413                        [
17414                            6957.951247695248,
17415                            4245.031195913824
17416                        ],
17417                        [
17418                            6935.67773286476,
17419                            4270.4570557899615
17420                        ],
17421                        [
17422                            6919.007287741392,
17423                            4318.862569296021
17424                        ],
17425                        [
17426                            6821.989739051448,
17427                            4375.845463916967
17428                        ],
17429                        [
17430                            6741.280887788226,
17431                            4398.254621836253
17432                        ],
17433                        [
17434                            6668.528740612335,
17435                            4399.13514953443
17436                        ]
17437                    ]
17438                ]
17439            },
17440            "properties": {
17441                "OBJECTID": 2,
17442                "Shape_Length": 4429389.06692539,
17443                "Shape_Area": 664710028696.2069,
17444                "hc-group": "admin1",
17445                "hc-middle-x": 0.5,
17446                "hc-middle-y": 0.5,
17447                "hc-key": "us-gom",
17448                "hc-a2": "GOM",
17449                "labelrank": 0,
17450                "hasc": "US.GOM",
17451                "woe-id": null,
17452                "state-fips": "77",
17453                "fips": "US77",
17454                "postal-code": "GOM",
17455                "name": "Gulf of Mexico",
17456                "country": "United States of America",
17457                "region": "Offshore",
17458                "longitude": "27.598",
17459                "woe-name": "Gulf of Mexico",
17460                "latitude": "-87.278",
17461                "woe-label": "Gulf of Mexico, US, United States",
17462                "type": "Outer continental shelf"
17463            }
17464        }
17465    ]
17466}
17467},{}],19:[function(require,module,exports){
17468'use strict';
17469
17470var ES5ToInteger = require('../5/ToInteger');
17471
17472var ToNumber = require('./ToNumber');
17473
17474// https://262.ecma-international.org/6.0/#sec-tointeger
17475
17476module.exports = function ToInteger(value) {
17477	var number = ToNumber(value);
17478	return ES5ToInteger(number);
17479};
17480
17481},{"../5/ToInteger":53,"./ToNumber":20}],20:[function(require,module,exports){
17482'use strict';
17483
17484var GetIntrinsic = require('get-intrinsic');
17485
17486var $TypeError = require('es-errors/type');
17487var $Number = GetIntrinsic('%Number%');
17488var $RegExp = GetIntrinsic('%RegExp%');
17489var $parseInteger = GetIntrinsic('%parseInt%');
17490
17491var callBound = require('call-bind/callBound');
17492var regexTester = require('safe-regex-test');
17493var isPrimitive = require('../helpers/isPrimitive');
17494
17495var $strSlice = callBound('String.prototype.slice');
17496var isBinary = regexTester(/^0b[01]+$/i);
17497var isOctal = regexTester(/^0o[0-7]+$/i);
17498var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
17499var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
17500var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
17501var hasNonWS = regexTester(nonWSregex);
17502
17503var $trim = require('string.prototype.trim');
17504
17505var ToPrimitive = require('./ToPrimitive');
17506
17507// https://262.ecma-international.org/6.0/#sec-tonumber
17508
17509module.exports = function ToNumber(argument) {
17510	var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
17511	if (typeof value === 'symbol') {
17512		throw new $TypeError('Cannot convert a Symbol value to a number');
17513	}
17514	if (typeof value === 'string') {
17515		if (isBinary(value)) {
17516			return ToNumber($parseInteger($strSlice(value, 2), 2));
17517		} else if (isOctal(value)) {
17518			return ToNumber($parseInteger($strSlice(value, 2), 8));
17519		} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
17520			return NaN;
17521		}
17522		var trimmed = $trim(value);
17523		if (trimmed !== value) {
17524			return ToNumber(trimmed);
17525		}
17526
17527	}
17528	return $Number(value);
17529};
17530
17531},{"../helpers/isPrimitive":66,"./ToPrimitive":22,"call-bind/callBound":13,"es-errors/type":77,"get-intrinsic":101,"safe-regex-test":141,"string.prototype.trim":153}],21:[function(require,module,exports){
17532'use strict';
17533
17534// https://262.ecma-international.org/6.0/#sec-toobject
17535
17536module.exports = require('es-object-atoms/ToObject');
17537
17538},{"es-object-atoms/ToObject":80}],22:[function(require,module,exports){
17539'use strict';
17540
17541var toPrimitive = require('es-to-primitive/es2015');
17542
17543// https://262.ecma-international.org/6.0/#sec-toprimitive
17544
17545module.exports = function ToPrimitive(input) {
17546	if (arguments.length > 1) {
17547		return toPrimitive(input, arguments[1]);
17548	}
17549	return toPrimitive(input);
17550};
17551
17552},{"es-to-primitive/es2015":82}],23:[function(require,module,exports){
17553'use strict';
17554
17555var GetIntrinsic = require('get-intrinsic');
17556
17557var $String = GetIntrinsic('%String%');
17558var $TypeError = require('es-errors/type');
17559
17560// https://262.ecma-international.org/6.0/#sec-tostring
17561
17562module.exports = function ToString(argument) {
17563	if (typeof argument === 'symbol') {
17564		throw new $TypeError('Cannot convert a Symbol value to a string');
17565	}
17566	return $String(argument);
17567};
17568
17569},{"es-errors/type":77,"get-intrinsic":101}
17569],24:[function(require,module,exports){
17570'use strict';
17571
17572var GetIntrinsic = require('get-intrinsic');
17573var callBound = require('call-bind/callBound');
17574
17575var $TypeError = require('es-errors/type');
17576
17577var IsArray = require('./IsArray');
17578
17579var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply');
17580
17581// https://262.ecma-international.org/6.0/#sec-call
17582
17583module.exports = function Call(F, V) {
17584	var argumentsList = arguments.length > 2 ? arguments[2] : [];
17585	if (!IsArray(argumentsList)) {
17586		throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');
17587	}
17588	return $apply(F, V, argumentsList);
17589};
17590
17591},{"./IsArray":30,"call-bind/callBound":13,"es-errors/type":77,"get-intrinsic":101}],25:[function(require,module,exports){
17592'use strict';
17593
17594var $TypeError = require('es-errors/type');
17595
17596var IsPropertyKey = require('./IsPropertyKey');
17597var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
17598var Type = require('./Type');
17599
17600// https://262.ecma-international.org/6.0/#sec-createdataproperty
17601
17602module.exports = function CreateDataProperty(O, P, V) {
17603	if (Type(O) !== 'Object') {
17604		throw new $TypeError('Assertion failed: Type(O) is not Object');
17605	}
17606	if (!IsPropertyKey(P)) {
17607		throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
17608	}
17609	var newDesc = {
17610		'[[Configurable]]': true,
17611		'[[Enumerable]]': true,
17612		'[[Value]]': V,
17613		'[[Writable]]': true
17614	};
17615	return OrdinaryDefineOwnProperty(O, P, newDesc);
17616};
17617
17618},{"./IsPropertyKey":35,"./OrdinaryDefineOwnProperty":37,"./Type":49,"es-errors/type":77}],26:[function(require,module,exports){
17619'use strict';
17620
17621var $TypeError = require('es-errors/type');
17622
17623var isPropertyDescriptor = require('../helpers/records/property-descriptor');
17624var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor');
17625
17626// https://262.ecma-international.org/6.0/#sec-frompropertydescriptor
17627
17628module.exports = function FromPropertyDescriptor(Desc) {
17629	if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) {
17630		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
17631	}
17632
17633	return fromPropertyDescriptor(Desc);
17634};
17635
17636},{"../helpers/fromPropertyDescriptor":62,"../helpers/records/property-descriptor":68,"es-errors/type":77}],27:[function(require,module,exports){
17637'use strict';
17638
17639var $TypeError = require('es-errors/type');
17640
17641var inspect = require('object-inspect');
17642
17643var IsPropertyKey = require('./IsPropertyKey');
17644var Type = require('./Type');
17645
17646// https://262.ecma-international.org/6.0/#sec-get-o-p
17647
17648module.exports = function Get(O, P) {
17649	// 7.3.1.1
17650	if (Type(O) !== 'Object') {
17651		throw new $TypeError('Assertion failed: Type(O) is not Object');
17652	}
17653	// 7.3.1.2
17654	if (!IsPropertyKey(P)) {
17655		throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));
17656	}
17657	// 7.3.1.3
17658	return O[P];
17659};
17660
17661},{"./IsPropertyKey":35,"./Type":49,"es-errors/type":77,"object-inspect":121}],28:[function(require,module,exports){
17662'use strict';
17663
17664var $TypeError = require('es-errors/type');
17665
17666var IsPropertyKey = require('./IsPropertyKey');
17667var Type = require('./Type');
17668
17669// https://262.ecma-international.org/6.0/#sec-hasproperty
17670
17671module.exports = function HasProperty(O, P) {
17672	if (Type(O) !== 'Object') {
17673		throw new $TypeError('Assertion failed: `O` must be an Object');
17674	}
17675	if (!IsPropertyKey(P)) {
17676		throw new $TypeError('Assertion failed: `P` must be a Property Key');
17677	}
17678	return P in O;
17679};
17680
17681},{"./IsPropertyKey":35,"./Type":49,"es-errors/type":77}],29:[function(require,module,exports){
17682'use strict';
17683
17684var $TypeError = require('es-errors/type');
17685
17686var hasOwn = require('hasown');
17687
17688var isPropertyDescriptor = require('../helpers/records/property-descriptor');
17689
17690// https://262.ecma-international.org/5.1/#sec-8.10.1
17691
17692module.exports = function IsAccessorDescriptor(Desc) {
17693	if (typeof Desc === 'undefined') {
17694		return false;
17695	}
17696
17697	if (!isPropertyDescriptor(Desc)) {
17698		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
17699	}
17700
17701	if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) {
17702		return false;
17703	}
17704
17705	return true;
17706};
17707
17708},{"../helpers/records/property-descriptor":68,"es-errors/type":77,"hasown":108}],30:[function(require,module,exports){
17709'use strict';
17710
17711// https://262.ecma-international.org/6.0/#sec-isarray
17712module.exports = require('../helpers/IsArray');
17713
17714},{"../helpers/IsArray":60}],31:[function(require,module,exports){
17715'use strict';
17716
17717// http://262.ecma-international.org/5.1/#sec-9.11
17718
17719module.exports = require('is-callable');
17720
17721},{"is-callable":115}],32:[function(require,module,exports){
17722'use strict';
17723
17724var $TypeError = require('es-errors/type');
17725
17726var hasOwn = require('hasown');
17727
17728var isPropertyDescriptor = require('../helpers/records/property-descriptor');
17729
17730// https://262.ecma-international.org/5.1/#sec-8.10.2
17731
17732module.exports = function IsDataDescriptor(Desc) {
17733	if (typeof Desc === 'undefined') {
17734		return false;
17735	}
17736
17737	if (!isPropertyDescriptor(Desc)) {
17738		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
17739	}
17740
17741	if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) {
17742		return false;
17743	}
17744
17745	return true;
17746};
17747
17748},{"../helpers/records/property-descriptor":68,"es-errors/type":77,"hasown":108}],33:[function(require,module,exports){
17749'use strict';
17750
17751var GetIntrinsic = require('get-intrinsic');
17752
17753var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true);
17754var $isExtensible = GetIntrinsic('%Object.isExtensible%', true);
17755
17756var isPrimitive = require('../helpers/isPrimitive');
17757
17758// https://262.ecma-international.org/6.0/#sec-isextensible-o
17759
17760module.exports = $preventExtensions
17761	? function IsExtensible(obj) {
17762		return !isPrimitive(obj) && $isExtensible(obj);
17763	}
17764	: function IsExtensible(obj) {
17765		return !isPrimitive(obj);
17766	};
17767
17768},{"../helpers/isPrimitive":66,"get-intrinsic":101}],34:[function(require,module,exports){
17769'use strict';
17770
17771var $TypeError = require('es-errors/type');
17772
17773var IsAccessorDescriptor = require('./IsAccessorDescriptor');
17774var IsDataDescriptor = require('./IsDataDescriptor');
17775
17776var isPropertyDescriptor = require('../helpers/records/property-descriptor');
17777
17778// https://262.ecma-international.org/6.0/#sec-isgenericdescriptor
17779
17780module.exports = function IsGenericDescriptor(Desc) {
17781	if (typeof Desc === 'undefined') {
17782		return false;
17783	}
17784
17785	if (!isPropertyDescriptor(Desc)) {
17786		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
17787	}
17788
17789	if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
17790		return true;
17791	}
17792
17793	return false;
17794};
17795
17796},{"../helpers/records/property-descriptor":68,"./IsAccessorDescriptor":29,"./IsDataDescriptor":32,"es-errors/type":77}],35:[function(require,module,exports){
17797'use strict';
17798
17799// https://262.ecma-international.org/6.0/#sec-ispropertykey
17800
17801module.exports = function IsPropertyKey(argument) {
17802	return typeof argument === 'string' || typeof argument === 'symbol';
17803};
17804
17805},{}],36:[function(require,module,exports){
17806'use strict';
17807
17808var $TypeError = require('es-errors/type');
17809
17810var Get = require('./Get');
17811var ToLength = require('./ToLength');
17812var Type = require('./Type');
17813
17814// https://262.ecma-international.org/11.0/#sec-lengthofarraylike
17815
17816module.exports = function LengthOfArrayLike(obj) {
17817	if (Type(obj) !== 'Object') {
17818		throw new $TypeError('Assertion failed: `obj` must be an Object');
17819	}
17820	return ToLength(Get(obj, 'length'));
17821};
17822
17823// TODO: use this all over
17824
17825},{"./Get":27,"./ToLength":44,"./Type":49,"es-errors/type":77}],37:[function(require,module,exports){
17826'use strict';
17827
17828var $gOPD = require('gopd');
17829var $SyntaxError = require('es-errors/syntax');
17830var $TypeError = require('es-errors/type');
17831
17832var isPropertyDescriptor = require('../helpers/records/property-descriptor');
17833
17834var IsAccessorDescriptor = require('./IsAccessorDescriptor');
17835var IsExtensible = require('./IsExtensible');
17836var IsPropertyKey = require('./IsPropertyKey');
17837var ToPropertyDescriptor = require('./ToPropertyDescriptor');
17838var SameValue = require('./SameValue');
17839var Type = require('./Type');
17840var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
17841
17842// https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty
17843
17844module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) {
17845	if (Type(O) !== 'Object') {
17846		throw new $TypeError('Assertion failed: O must be an Object');
17847	}
17848	if (!IsPropertyKey(P)) {
17849		throw new $TypeError('Assertion failed: P must be a Property Key');
17850	}
17851	if (!isPropertyDescriptor(Desc)) {
17852		throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
17853	}
17854	if (!$gOPD) {
17855		// ES3/IE 8 fallback
17856		if (IsAccessorDescriptor(Desc)) {
17857			throw new $SyntaxError('This environment does not support accessor property descriptors.');
17858		}
17859		var creatingNormalDataProperty = !(P in O)
17860			&& Desc['[[Writable]]']
17861			&& Desc['[[Enumerable]]']
17862			&& Desc['[[Configurable]]']
17863			&& '[[Value]]' in Desc;
17864		var settingExistingDataProperty = (P in O)
17865			&& (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]'])
17866			&& (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]'])
17867			&& (!('[[Writable]]' in Desc) || Desc['[[Writable]]'])
17868			&& '[[Value]]' in Desc;
17869		if (creatingNormalDataProperty || settingExistingDataProperty) {
17870			O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign
17871			return SameValue(O[P], Desc['[[Value]]']);
17872		}
17873		throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties');
17874	}
17875	var desc = $gOPD(O, P);
17876	var current = desc && ToPropertyDescriptor(desc);
17877	var extensible = IsExtensible(O);
17878	return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
17879};
17880
17881},{"../helpers/records/property-descriptor":68,"./IsAccessorDescriptor":29,"./IsExtensible":33,"./IsPropertyKey":35,"./SameValue":39,"./ToPropertyDescriptor":47,"./Type":49,"./ValidateAndApplyPropertyDescriptor":50,"es-errors/syntax":76,"es-errors/type":77,"gopd":102}],38:[function(require,module,exports){
17882'use strict';
17883
17884module.exports = require('es-object-atoms/RequireObjectCoercible');
17885
17886},{"es-object-atoms/RequireObjectCoercible":79}],39:[function(require,module,exports){
17887'use strict';
17888
17889var $isNaN = require('../helpers/isNaN');
17890
17891// http://262.ecma-international.org/5.1/#sec-9.12
17892
17893module.exports = function SameValue(x, y) {
17894	if (x === y) { // 0 === -0, but they are not identical.
17895		if (x === 0) { return 1 / x === 1 / y; }
17896		return true;
17897	}
17898	return $isNaN(x) && $isNaN(y);
17899};
17900
17901},{"../helpers/isNaN":65}],40:[function(require,module,exports){
17902'use strict';
17903
17904var $isNaN = require('../helpers/isNaN');
17905
17906// https://262.ecma-international.org/6.0/#sec-samevaluezero
17907
17908module.exports = function SameValueZero(x, y) {
17909	return (x === y) || ($isNaN(x) && $isNaN(y));
17910};
17911
17912},{"../helpers/isNaN":65}],41:[function(require,module,exports){
17913'use strict';
17914
17915var GetIntrinsic = require('get-intrinsic');
17916
17917var $Number = GetIntrinsic('%Number%');
17918var $RegExp = GetIntrinsic('%RegExp%');
17919var $TypeError = require('es-errors/type');
17920var $parseInteger = GetIntrinsic('%parseInt%');
17921
17922var callBound = require('call-bind/callBound');
17923var regexTester = require('safe-regex-test');
17924
17925var $strSlice = callBound('String.prototype.slice');
17926var isBinary = regexTester(/^0b[01]+$/i);
17927var isOctal = regexTester(/^0o[0-7]+$/i);
17928var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
17929var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
17930var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
17931var hasNonWS = regexTester(nonWSregex);
17932
17933var $trim = require('string.prototype.trim');
17934
17935// https://262.ecma-international.org/13.0/#sec-stringtonumber
17936
17937module.exports = function StringToNumber(argument) {
17938	if (typeof argument !== 'string') {
17939		throw new $TypeError('Assertion failed: `argument` is not a String');
17940	}
17941	if (isBinary(argument)) {
17942		return $Number($parseInteger($strSlice(argument, 2), 2));
17943	}
17944	if (isOctal(argument)) {
17945		return $Number($parseInteger($strSlice(argument, 2), 8));
17946	}
17947	if (hasNonWS(argument) || isInvalidHexLiteral(argument)) {
17948		return NaN;
17949	}
17950	var trimmed = $trim(argument);
17951	if (trimmed !== argument) {
17952		return StringToNumber(trimmed);
17953	}
17954	return $Number(argument);
17955};
17956
17957},{"call-bind/callBound":13,"es-errors/type":77,"get-intrinsic":101,"safe-regex-test":141,"string.prototype.trim":153}],42:[function(require,module,exports){
17958'use strict';
17959
17960// http://262.ecma-international.org/5.1/#sec-9.2
17961
17962module.exports = function ToBoolean(value) { return !!value; };
17963
17964},{}],43:[function(require,module,exports){
17965'use strict';
17966
17967var ToNumber = require('./ToNumber');
17968var truncate = require('./truncate');
17969
17970var $isNaN = require('../helpers/isNaN');
17971var $isFinite = require('../helpers/isFinite');
17972
17973// https://262.ecma-international.org/14.0/#sec-tointegerorinfinity
17974
17975module.exports = function ToIntegerOrInfinity(value) {
17976	var number = ToNumber(value);
17977	if ($isNaN(number) || number === 0) { return 0; }
17978	if (!$isFinite(number)) { return number; }
17979	return truncate(number);
17980};
17981
17982},{"../helpers/isFinite":63,"../helpers/isNaN":65,"./ToNumber":45,"./truncate":52}],44:[function(require,module,exports){
17983'use strict';
17984
17985var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
17986
17987var ToIntegerOrInfinity = require('./ToIntegerOrInfinity');
17988
17989module.exports = function ToLength(argument) {
17990	var len = ToIntegerOrInfinity(argument);
17991	if (len <= 0) { return 0; }
17991 // includes converting -0 to +0
17992	if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
17993	return len;
17994};
17995
17996},{"../helpers/maxSafeInteger":67,"./ToIntegerOrInfinity":43}],45:[function(require,module,exports){
17997'use strict';
17998
17999var GetIntrinsic = require('get-intrinsic');
18000
18001var $TypeError = require('es-errors/type');
18002var $Number = GetIntrinsic('%Number%');
18003var isPrimitive = require('../helpers/isPrimitive');
18004
18005var ToPrimitive = require('./ToPrimitive');
18006var StringToNumber = require('./StringToNumber');
18007
18008// https://262.ecma-international.org/13.0/#sec-tonumber
18009
18010module.exports = function ToNumber(argument) {
18011	var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
18012	if (typeof value === 'symbol') {
18013		throw new $TypeError('Cannot convert a Symbol value to a number');
18014	}
18015	if (typeof value === 'bigint') {
18016		throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.');
18017	}
18018	if (typeof value === 'string') {
18019		return StringToNumber(value);
18020	}
18021	return $Number(value);
18022};
18023
18024},{"../helpers/isPrimitive":66,"./StringToNumber":41,"./ToPrimitive":46,"es-errors/type":77,"get-intrinsic":101}],46:[function(require,module,exports){
18025arguments[4][22][0].apply(exports,arguments)
18026},{"dup":22,"es-to-primitive/es2015":82}],47:[function(require,module,exports){
18027'use strict';
18028
18029var hasOwn = require('hasown');
18030
18031var $TypeError = require('es-errors/type');
18032
18033var Type = require('./Type');
18034var ToBoolean = require('./ToBoolean');
18035var IsCallable = require('./IsCallable');
18036
18037// https://262.ecma-international.org/5.1/#sec-8.10.5
18038
18039module.exports = function ToPropertyDescriptor(Obj) {
18040	if (Type(Obj) !== 'Object') {
18041		throw new $TypeError('ToPropertyDescriptor requires an object');
18042	}
18043
18044	var desc = {};
18045	if (hasOwn(Obj, 'enumerable')) {
18046		desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
18047	}
18048	if (hasOwn(Obj, 'configurable')) {
18049		desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
18050	}
18051	if (hasOwn(Obj, 'value')) {
18052		desc['[[Value]]'] = Obj.value;
18053	}
18054	if (hasOwn(Obj, 'writable')) {
18055		desc['[[Writable]]'] = ToBoolean(Obj.writable);
18056	}
18057	if (hasOwn(Obj, 'get')) {
18058		var getter = Obj.get;
18059		if (typeof getter !== 'undefined' && !IsCallable(getter)) {
18060			throw new $TypeError('getter must be a function');
18061		}
18062		desc['[[Get]]'] = getter;
18063	}
18064	if (hasOwn(Obj, 'set')) {
18065		var setter = Obj.set;
18066		if (typeof setter !== 'undefined' && !IsCallable(setter)) {
18067			throw new $TypeError('setter must be a function');
18068		}
18069		desc['[[Set]]'] = setter;
18070	}
18071
18072	if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) {
18073		throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
18074	}
18075	return desc;
18076};
18077
18078},{"./IsCallable":31,"./ToBoolean":42,"./Type":49,"es-errors/type":77,"hasown":108}],48:[function(require,module,exports){
18079arguments[4][23][0].apply(exports,arguments)
18080},{"dup":23,"es-errors/type":77,"get-intrinsic":101}],49:[function(require,module,exports){
18081'use strict';
18082
18083var ES5Type = require('../5/Type');
18084
18085// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values
18086
18087module.exports = function Type(x) {
18088	if (typeof x === 'symbol') {
18089		return 'Symbol';
18090	}
18091	if (typeof x === 'bigint') {
18092		return 'BigInt';
18093	}
18094	return ES5Type(x);
18095};
18096
18097},{"../5/Type":56}],50:[function(require,module,exports){
18098'use strict';
18099
18100var $TypeError = require('es-errors/type');
18101
18102var DefineOwnProperty = require('../helpers/DefineOwnProperty');
18103var isFullyPopulatedPropertyDescriptor = require('../helpers/isFullyPopulatedPropertyDescriptor');
18104var isPropertyDescriptor = require('../helpers/records/property-descriptor');
18105
18106var FromPropertyDescriptor = require('./FromPropertyDescriptor');
18107var IsAccessorDescriptor = require('./IsAccessorDescriptor');
18108var IsDataDescriptor = require('./IsDataDescriptor');
18109var IsGenericDescriptor = require('./IsGenericDescriptor');
18110var IsPropertyKey = require('./IsPropertyKey');
18111var SameValue = require('./SameValue');
18112var Type = require('./Type');
18113
18114// https://262.ecma-international.org/13.0/#sec-validateandapplypropertydescriptor
18115
18116// see https://github.com/tc39/ecma262/pull/2468 for ES2022 changes
18117
18118// eslint-disable-next-line max-lines-per-function, max-statements
18119module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
18120	var oType = Type(O);
18121	if (oType !== 'Undefined' && oType !== 'Object') {
18122		throw new $TypeError('Assertion failed: O must be undefined or an Object');
18123	}
18124	if (!IsPropertyKey(P)) {
18125		throw new $TypeError('Assertion failed: P must be a Property Key');
18126	}
18127	if (typeof extensible !== 'boolean') {
18128		throw new $TypeError('Assertion failed: extensible must be a Boolean');
18129	}
18130	if (!isPropertyDescriptor(Desc)) {
18131		throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
18132	}
18133	if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) {
18134		throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined');
18135	}
18136
18137	if (typeof current === 'undefined') { // step 2
18138		if (!extensible) {
18139			return false; // step 2.a
18140		}
18141		if (oType === 'Undefined') {
18142			return true; // step 2.b
18143		}
18144		if (IsAccessorDescriptor(Desc)) { // step 2.c
18145			return DefineOwnProperty(
18146				IsDataDescriptor,
18147				SameValue,
18148				FromPropertyDescriptor,
18149				O,
18150				P,
18151				Desc
18152			);
18153		}
18154		// step 2.d
18155		return DefineOwnProperty(
18156			IsDataDescriptor,
18157			SameValue,
18158			FromPropertyDescriptor,
18159			O,
18160			P,
18161			{
18162				'[[Configurable]]': !!Desc['[[Configurable]]'],
18163				'[[Enumerable]]': !!Desc['[[Enumerable]]'],
18164				'[[Value]]': Desc['[[Value]]'],
18165				'[[Writable]]': !!Desc['[[Writable]]']
18166			}
18167		);
18168	}
18169
18170	// 3. Assert: current is a fully populated Property Descriptor.
18171	if (
18172		!isFullyPopulatedPropertyDescriptor(
18173			{
18174				IsAccessorDescriptor: IsAccessorDescriptor,
18175				IsDataDescriptor: IsDataDescriptor
18176			},
18177			current
18178		)
18179	) {
18180		throw new $TypeError('`current`, when present, must be a fully populated and valid Property Descriptor');
18181	}
18182
18183	// 4. If every field in Desc is absent, return true.
18184	// this can't really match the assertion that it's a Property Descriptor in our JS implementation
18185
18186	// 5. If current.[[Configurable]] is false, then
18187	if (!current['[[Configurable]]']) {
18188		if ('[[Configurable]]' in Desc && Desc['[[Configurable]]']) {
18189			// step 5.a
18190			return false;
18191		}
18192		if ('[[Enumerable]]' in Desc && !SameValue(Desc['[[Enumerable]]'], current['[[Enumerable]]'])) {
18193			// step 5.b
18194			return false;
18195		}
18196		if (!IsGenericDescriptor(Desc) && !SameValue(IsAccessorDescriptor(Desc), IsAccessorDescriptor(current))) {
18197			// step 5.c
18198			return false;
18199		}
18200		if (IsAccessorDescriptor(current)) { // step 5.d
18201			if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
18202				return false;
18203			}
18204			if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
18205				return false;
18206			}
18207		} else if (!current['[[Writable]]']) { // step 5.e
18208			if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
18209				return false;
18210			}
18211			if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
18212				return false;
18213			}
18214		}
18215	}
18216
18217	// 6. If O is not undefined, then
18218	if (oType !== 'Undefined') {
18219		var configurable;
18220		var enumerable;
18221		if (IsDataDescriptor(current) && IsAccessorDescriptor(Desc)) { // step 6.a
18222			configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]'];
18223			enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]'];
18224			// Replace the property named P of object O with an accessor property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value.
18225			return DefineOwnProperty(
18226				IsDataDescriptor,
18227				SameValue,
18228				FromPropertyDescriptor,
18229				O,
18230				P,
18231				{
18232					'[[Configurable]]': !!configurable,
18233					'[[Enumerable]]': !!enumerable,
18234					'[[Get]]': ('[[Get]]' in Desc ? Desc : current)['[[Get]]'],
18235					'[[Set]]': ('[[Set]]' in Desc ? Desc : current)['[[Set]]']
18236				}
18237			);
18238		} else if (IsAccessorDescriptor(current) && IsDataDescriptor(Desc)) {
18239			configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]'];
18240			enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]'];
18241			// i. Replace the property named P of object O with a data property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value.
18242			return DefineOwnProperty(
18243				IsDataDescriptor,
18244				SameValue,
18245				FromPropertyDescriptor,
18246				O,
18247				P,
18248				{
18249					'[[Configurable]]': !!configurable,
18250					'[[Enumerable]]': !!enumerable,
18251					'[[Value]]': ('[[Value]]' in Desc ? Desc : current)['[[Value]]'],
18252					'[[Writable]]': !!('[[Writable]]' in Desc ? Desc : current)['[[Writable]]']
18253				}
18254			);
18255		}
18256
18257		// For each field of Desc that is present, set the corresponding attribute of the property named P of object O to the value of the field.
18258		return DefineOwnProperty(
18259			IsDataDescriptor,
18260			SameValue,
18261			FromPropertyDescriptor,
18262			O,
18263			P,
18264			Desc
18265		);
18266	}
18267
18268	return true; // step 7
18269};
18270
18271},{"../helpers/DefineOwnProperty":59,"../helpers/isFullyPopulatedPropertyDescriptor":64,"../helpers/records/property-descriptor":68,"./FromPropertyDescriptor":26,"./IsAccessorDescriptor":29,"./IsDataDescriptor":32,"./IsGenericDescriptor":34,"./IsPropertyKey":35,"./SameValue":39,"./Type":49,"es-errors/type":77}],51:[function(require,module,exports){
18272'use strict';
18273
18274// var modulo = require('./modulo');
18275var $floor = Math.floor;
18276
18277// http://262.ecma-international.org/11.0/#eqn-floor
18278
18279module.exports = function floor(x) {
18280	// return x - modulo(x, 1);
18281	if (typeof x === 'bigint') {
18282		return x;
18283	}
18284	return $floor(x);
18285};
18286
18287},{}],52:[function(require,module,exports){
18288'use strict';
18289
18290var floor = require('./floor');
18291
18292var $TypeError = require('es-errors/type');
18293
18294// https://262.ecma-international.org/14.0/#eqn-truncate
18295
18296module.exports = function truncate(x) {
18297	if (typeof x !== 'number' && typeof x !== 'bigint') {
18298		throw new $TypeError('argument must be a Number or a BigInt');
18299	}
18300	var result = x < 0 ? -floor(-x) : floor(x);
18301	return result === 0 ? 0 : result; // in the spec, these are math values, so we filter out -0 here
18302};
18303
18304},{"./floor":51,"es-errors/type":77}],53:[function(require,module,exports){
18305'use strict';
18306
18307var abs = require('./abs');
18308var floor = require('./floor');
18309var ToNumber = require('./ToNumber');
18310
18311var $isNaN = require('../helpers/isNaN');
18312var $isFinite = require('../helpers/isFinite');
18313var $sign = require('../helpers/sign');
18314
18315// http://262.ecma-international.org/5.1/#sec-9.4
18316
18317module.exports = function ToInteger(value) {
18318	var number = ToNumber(value);
18319	if ($isNaN(number)) { return 0; }
18320	if (number === 0 || !$isFinite(number)) { return number; }
18321	return $sign(number) * floor(abs(number));
18322};
18323
18324},{"../helpers/isFinite":63,"../helpers/isNaN":65,"../helpers/sign":69,"./ToNumber":54,"./abs":57,"./floor":58}],54:[function(require,module,exports){
18325'use strict';
18326
18327var ToPrimitive = require('./ToPrimitive');
18328
18329var callBound = require('call-bind/callBound');
18330
18331var $replace = callBound('String.prototype.replace');
18332
18333var safeRegexTester = require('safe-regex-test');
18334
18335var isNonDecimal = safeRegexTester(/^0[ob]|^[+-]0x/);
18336
18337// http://262.ecma-international.org/5.1/#sec-9.3
18338
18339module.exports = function ToNumber(value) {
18340	var prim = ToPrimitive(value, Number);
18341	if (typeof prim !== 'string') {
18342		return +prim; // eslint-disable-line no-implicit-coercion
18343	}
18344
18345	var trimmed = $replace(
18346		prim,
18347		// eslint-disable-next-line no-control-regex
18348		/^[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+|[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+$/g,
18349		''
18350	);
18351	if (isNonDecimal(trimmed)) {
18352		return NaN;
18353	}
18354
18355	return +trimmed; // eslint-disable-line no-implicit-coercion
18356};
18357
18358},{"./ToPrimitive":55,"call-bind/callBound":13,"safe-regex-test":141}],55:[function(require,module,exports){
18359'use strict';
18360
18361// http://262.ecma-international.org/5.1/#sec-9.1
18362
18363module.exports = require('es-to-primitive/es5');
18364
18365},{"es-to-primitive/es5":83}],56:[function(require,module,exports){
18366'use strict';
18367
18368// https://262.ecma-international.org/5.1/#sec-8
18369
18370module.exports = function Type(x) {
18371	if (x === null) {
18372		return 'Null';
18373	}
18374	if (typeof x === 'undefined') {
18375		return 'Undefined';
18376	}
18377	if (typeof x === 'function' || typeof x === 'object') {
18378		return 'Object';
18379	}
18380	if (typeof x === 'number') {
18381		return 'Number';
18382	}
18383	if (typeof x === 'boolean') {
18384		return 'Boolean';
18385	}
18386	if (typeof x === 'string') {
18387		return 'String';
18388	}
18389};
18390
18391},{}],57:[function(require,module,exports){
18392'use strict';
18393
18394var GetIntrinsic = require('get-intrinsic');
18395
18396var $abs = GetIntrinsic('%Math.abs%');
18397
18398// http://262.ecma-international.org/5.1/#sec-5.2
18399
18400module.exports = function abs(x) {
18401	return $abs(x);
18402};
18403
18404},{"get-intrinsic":101}],58:[function(require,module,exports){
18405'use strict';
18406
18407// var modulo = require('./modulo');
18408var $floor = Math.floor;
18409
18410// http://262.ecma-international.org/5.1/#sec-5.2
18411
18412module.exports = function floor(x) {
18413	// return x - modulo(x, 1);
18414	return $floor(x);
18415};
18416
18417},{}],59:[function(require,module,exports){
18418'use strict';
18419
18420var hasPropertyDescriptors = require('has-property-descriptors');
18421
18422var $defineProperty = require('es-define-property');
18423
18424var hasArrayLengthDefineBug = hasPropertyDescriptors.hasArrayLengthDefineBug();
18425
18426// eslint-disable-next-line global-require
18427var isArray = hasArrayLengthDefineBug && require('../helpers/IsArray');
18428
18429var callBound = require('call-bind/callBound');
18430
18431var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
18432
18433// eslint-disable-next-line max-params
18434module.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {
18435	if (!$defineProperty) {
18436		if (!IsDataDescriptor(desc)) {
18437			// ES3 does not support getters/setters
18438			return false;
18439		}
18440		if (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {
18441			return false;
18442		}
18443
18444		// fallback for ES3
18445		if (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {
18446			// a non-enumerable existing property
18447			return false;
18448		}
18449
18450		// property does not exist at all, or exists but is enumerable
18451		var V = desc['[[Value]]'];
18452		// eslint-disable-next-line no-param-reassign
18453		O[P] = V; // will use [[Define]]
18454		return SameValue(O[P], V);
18455	}
18456	if (
18457		hasArrayLengthDefineBug
18458		&& P === 'length'
18459		&& '[[Value]]' in desc
18460		&& isArray(O)
18461		&& O.length !== desc['[[Value]]']
18462	) {
18463		// eslint-disable-next-line no-param-reassign
18464		O.length = desc['[[Value]]'];
18465		return O.length === desc['[[Value]]'];
18466	}
18467
18468	$defineProperty(O, P, FromPropertyDescriptor(desc));
18469	return true;
18470};
18471
18472},{"../helpers/IsArray":60,"call-bind/callBound":13,"es-define-property":71,"has-property-descriptors":103}],60:[function(require,module,exports){
18473'use strict';
18474
18475var GetIntrinsic = require('get-intrinsic');
18476
18477var $Array = GetIntrinsic('%Array%');
18478
18479// eslint-disable-next-line global-require
18480var toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString');
18481
18482module.exports = $Array.isArray || function IsArray(argument) {
18483	return toStr(argument) === '[object Array]';
18484};
18485
18486},{"call-bind/callBound":13,"get-intrinsic":101}],61:[function(require,module,exports){
18487'use strict';
18488
18489// TODO; semver-major: remove
18490
18491module.exports = require('call-bind');
18492
18493},{"call-bind":14}],62:[function(require,module,exports){
18494'use strict';
18495
18496module.exports = function fromPropertyDescriptor(Desc) {
18497	if (typeof Desc === 'undefined') {
18498		return Desc;
18499	}
18500	var obj = {};
18501	if ('[[Value]]' in Desc) {
18502		obj.value = Desc['[[Value]]'];
18503	}
18504	if ('[[Writable]]' in Desc) {
18505		obj.writable = !!Desc['[[Writable]]'];
18506	}
18507	if ('[[Get]]' in Desc) {
18508		obj.get = Desc['[[Get]]'];
18509	}
18510	if ('[[Set]]' in Desc) {
18511		obj.set = Desc['[[Set]]'];
18512	}
18513	if ('[[Enumerable]]' in Desc) {
18514		obj.enumerable = !!Desc['[[Enumerable]]'];
18515	}
18516	if ('[[Configurable]]' in Desc) {
18517		obj.configurable = !!Desc['[[Configurable]]'];
18518	}
18519	return obj;
18520};
18521
18522},{}],63:[function(require,module,exports){
18523'use strict';
18524
18525var $isNaN = require('./isNaN');
18526
18527module.exports = function (x) { return (typeof x === 'number' || typeof x === 'bigint') && !$isNaN(x) && x !== Infinity && x !== -Infinity; };
18528
18529},{"./isNaN":65}],64:[function(require,module,exports){
18530'use strict';
18531
18532var isPropertyDescriptor = require('./records/property-descriptor');
18533
18534module.exports = function isFullyPopulatedPropertyDescriptor(ES, Desc) {
18535	return isPropertyDescriptor(Desc)
18536		&& typeof Desc === 'object'
18537		&& '[[Enumerable]]' in Desc
18538		&& '[[Configurable]]' in Desc
18539		&& (ES.IsAccessorDescriptor(Desc) || ES.IsDataDescriptor(Desc));
18540};
18541
18542},{"./records/property-descriptor":68}],65:[function(require,module,exports){
18543'use strict';
18544
18545module.exports = Number.isNaN || function isNaN(a) {
18546	return a !== a;
18547};
18548
18549},{}],66:[function(require,module,exports){
18550'use strict';
18551
18552module.exports = function isPrimitive(value) {
18553	return value === null || (typeof value !== 'function' && typeof value !== 'object');
18554};
18555
18556},{}],67:[function(require,module,exports){
18557'use strict';
18558
18559module.exports = Number.MAX_SAFE_INTEGER || 9007199254740991; // Math.pow(2, 53) - 1;
18560
18561},{}],68:[function(require,module,exports){
18562'use strict';
18563
18564var $TypeError = require('es-errors/type');
18565
18566var hasOwn = require('hasown');
18567
18568var allowed = {
18569	__proto__: null,
18570	'[[Configurable]]': true,
18571	'[[Enumerable]]': true,
18572	'[[Get]]': true,
18573	'[[Set]]': true,
18574	'[[Value]]': true,
18575	'[[Writable]]': true
18576};
18577
18578// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type
18579
18580module.exports = function isPropertyDescriptor(Desc) {
18581	if (!Desc || typeof Desc !== 'object') {
18582		return false;
18583	}
18584
18585	for (var key in Desc) { // eslint-disable-line
18586		if (hasOwn(Desc, key) && !allowed[key]) {
18587			return false;
18588		}
18589	}
18590
18591	var isData = hasOwn(Desc, '[[Value]]') || hasOwn(Desc, '[[Writable]]');
18592	var IsAccessor = hasOwn(Desc, '[[Get]]') || hasOwn(Desc, '[[Set]]');
18593	if (isData && IsAccessor) {
18594		throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
18595	}
18596	return true;
18597};
18598
18599},{"es-errors/type":77,"hasown":108}],69:[function(require,module,exports){
18600'use strict';
18601
18602module.exports = function sign(number) {
18603	return number >= 0 ? 1 : -1;
18604};
18605
18606},{}],70:[function(require,module,exports){
18607module.exports = function properlyBoxed(method) {
18608	// Check node 0.6.21 bug where third parameter is not boxed
18609	var properlyBoxesNonStrict = true;
18610	var properlyBoxesStrict = true;
18611	var threwException = false;
18612	if (typeof method === 'function') {
18613		try {
18614			// eslint-disable-next-line max-params
18615			method.call('f', function (_, __, O) {
18616				if (typeof O !== 'object') {
18617					properlyBoxesNonStrict = false;
18618				}
18619			});
18620
18621			method.call(
18622				[null],
18623				function () {
18624					'use strict';
18625
18626					properlyBoxesStrict = typeof this === 'string'; // eslint-disable-line no-invalid-this
18627				},
18628				'x'
18629			);
18630		} catch (e) {
18631			threwException = true;
18632		}
18633		return !threwException && properlyBoxesNonStrict && properlyBoxesStrict;
18634	}
18635	return false;
18636};
18637
18638},{}],71:[function(require,module,exports){
18639'use strict';
18640
18641var GetIntrinsic = require('get-intrinsic');
18642
18643/** @type {import('.')} */
18644var $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false;
18645if ($defineProperty) {
18646	try {
18647		$defineProperty({}, 'a', { value: 1 });
18648	} catch (e) {
18649		// IE 8 has a broken defineProperty
18650		$defineProperty = false;
18651	}
18652}
18653
18654module.exports = $defineProperty;
18655
18656},{"get-intrinsic":101}],72:[function(require,module,exports){
18657'use strict';
18658
18659/** @type {import('./eval')} */
18660module.exports = EvalError;
18661
18662},{}],73:[function(require,module,exports){
18663'use strict';
18664
18665/** @type {import('.')} */
18666module.exports = Error;
18667
18668},{}],74:[function(require,module,exports){
18669'use strict';
18670
18671/** @type {import('./range')} */
18672module.exports = RangeError;
18673
18674},{}],75:[function(require,module,exports){
18675'use strict';
18676
18677/** @type {import('./ref')} */
18678module.exports = ReferenceError;
18679
18680},{}],76:[function(require,module,exports){
18681'use strict';
18682
18683/** @type {import('./syntax')} */
18684module.exports = SyntaxError;
18685
18686},{}],77:[function(require,module,exports){
18687'use strict';
18688
18689/** @type {import('./type')} */
18690module.exports = TypeError;
18691
18692},{}],78:[function(require,module,exports){
18693'use strict';
18694
18695/** @type {import('./uri')} */
18696module.exports = URIError;
18697
18698},{}],79:[function(require,module,exports){
18699'use strict';
18700
18701var $TypeError = require('es-errors/type');
18702
18703/** @type {import('./RequireObjectCoercible')} */
18704module.exports = function RequireObjectCoercible(value) {
18705	if (value == null) {
18706		throw new $TypeError((arguments.length > 0 && arguments[1]) || ('Cannot call method on ' + value));
18707	}
18708	return value;
18709};
18710
18711},{"es-errors/type":77}],80:[function(require,module,exports){
18712'use strict';
18713
18714var $Object = require('./');
18715var RequireObjectCoercible = require('./RequireObjectCoercible');
18716
18717/** @type {import('./ToObject')} */
18718module.exports = function ToObject(value) {
18719	RequireObjectCoercible(value);
18720	return $Object(value);
18721};
18722
18723},{"./":81,"./RequireObjectCoercible":79}],81:[function(require,module,exports){
18724'use strict';
18725
18726/** @type {import('.')} */
18727module.exports = Object;
18728
18729},{}],82:[function(require,module,exports){
18730'use strict';
18731
18732var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
18733
18734var isPrimitive = require('./helpers/isPrimitive');
18735var isCallable = require('is-callable');
18736var isDate = require('is-date-object');
18737var isSymbol = require('is-symbol');
18738
18739var ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {
18740	if (typeof O === 'undefined' || O === null) {
18741		throw new TypeError('Cannot call method on ' + O);
18742	}
18743	if (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {
18744		throw new TypeError('hint must be "string" or "number"');
18745	}
18746	var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
18747	var method, result, i;
18748	for (i = 0; i < methodNames.length; ++i) {
18749		method = O[methodNames[i]];
18750		if (isCallable(method)) {
18751			result = method.call(O);
18752			if (isPrimitive(result)) {
18753				return result;
18754			}
18755		}
18756	}
18757	throw new TypeError('No default value');
18758};
18759
18760var GetMethod = function GetMethod(O, P) {
18761	var func = O[P];
18762	if (func !== null && typeof func !== 'undefined') {
18763		if (!isCallable(func)) {
18764			throw new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');
18765		}
18766		return func;
18767	}
18768	return void 0;
18769};
18770
18771// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
18772module.exports = function ToPrimitive(input) {
18773	if (isPrimitive(input)) {
18774		return input;
18775	}
18776	var hint = 'default';
18777	if (arguments.length > 1) {
18778		if (arguments[1] === String) {
18779			hint = 'string';
18780		} else if (arguments[1] === Number) {
18781			hint = 'number';
18782		}
18783	}
18784
18785	var exoticToPrim;
18786	if (hasSymbols) {
18787		if (Symbol.toPrimitive) {
18788			exoticToPrim = GetMethod(input, Symbol.toPrimitive);
18789		} else if (isSymbol(input)) {
18790			exoticToPrim = Symbol.prototype.valueOf;
18791		}
18792	}
18793	if (typeof exoticToPrim !== 'undefined') {
18794		var result = exoticToPrim.call(input, hint);
18795		if (isPrimitive(result)) {
18796			return result;
18797		}
18798		throw new TypeError('unable to convert exotic object to primitive');
18799	}
18800	if (hint === 'default' && (isDate(input) || isSymbol(input))) {
18801		hint = 'string';
18802	}
18803	return ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);
18804};
18805
18806},{"./helpers/isPrimitive":84,"is-callable":115,"is-date-object":116,"is-symbol":119}],83:[function(require,module,exports){
18807'use strict';
18808
18809var toStr = Object.prototype.toString;
18810
18811var isPrimitive = require('./helpers/isPrimitive');
18812
18813var isCallable = require('is-callable');
18814
18815// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8
18816var ES5internalSlots = {
18817	'[[DefaultValue]]': function (O) {
18818		var actualHint;
18819		if (arguments.length > 1) {
18820			actualHint = arguments[1];
18821		} else {
18822			actualHint = toStr.call(O) === '[object Date]' ? String : Number;
18823		}
18824
18825		if (actualHint === String || actualHint === Number) {
18826			var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
18827			var value, i;
18828			for (i = 0; i < methods.length; ++i) {
18829				if (isCallable(O[methods[i]])) {
18830					value = O[methods[i]]();
18831					if (isPrimitive(value)) {
18832						return value;
18833					}
18834				}
18835			}
18836			throw new TypeError('No default value');
18837		}
18838		throw new TypeError('invalid [[DefaultValue]] hint supplied');
18839	}
18840};
18841
18842// http://ecma-international.org/ecma-262/5.1/#sec-9.1
18843module.exports = function ToPrimitive(input) {
18844	if (isPrimitive(input)) {
18845		return input;
18846	}
18847	if (arguments.length > 1) {
18848		return ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);
18849	}
18850	return ES5internalSlots['[[DefaultValue]]'](input);
18851};
18852
18853},{"./helpers/isPrimitive":84,"is-callable":115}],84:[function(require,module,exports){
18854arguments[4][66][0].apply(exports,arguments)
18855},{"dup":66}],85:[function(require,module,exports){
18856(function (process,global){(function (){
18857/*!
18858 * https://github.com/paulmillr/es6-shim
18859 * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
18860 *   and contributors,  MIT License
18861 * es6-shim: v0.35.4
18862 * see https://github.com/paulmillr/es6-shim/blob/0.35.3/LICENSE
18863 * Details and documentation:
18864 * https://github.com/paulmillr/es6-shim/
18865 */
18866
18867// UMD (Universal Module Definition)
18868// see https://github.com/umdjs/umd/blob/master/returnExports.js
18869(function (root, factory) {
18870  /*global define */
18871  if (typeof define === 'function' && define.amd) {
18872    // AMD. Register as an anonymous module.
18873    define(factory);
18874  } else if (typeof exports === 'object') {
18875    // Node. Does not work with strict CommonJS, but
18876    // only CommonJS-like environments that support module.exports,
18877    // like Node.
18878    module.exports = factory();
18879  } else {
18880    // Browser globals (root is window)
18881    root.returnExports = factory();
18882  }
18883}(this, function () {
18884  'use strict';
18885
18886  var _apply = Function.call.bind(Function.apply);
18887  var _call = Function.call.bind(Function.call);
18888  var isArray = Array.isArray;
18889  var keys = Object.keys;
18890
18891  var not = function notThunker(func) {
18892    return function notThunk() {
18893      return !_apply(func, this, arguments);
18894    };
18895  };
18896  var throwsError = function (func) {
18897    try {
18898      func();
18899      return false;
18900    } catch (e) {
18901      return true;
18902    }
18903  };
18904  var valueOrFalseIfThrows = function valueOrFalseIfThrows(func) {
18905    try {
18906      return func();
18907    } catch (e) {
18908      return false;
18909    }
18910  };
18911
18912  var isCallableWithoutNew = not(throwsError);
18913  var arePropertyDescriptorsSupported = function () {
18914    // if Object.defineProperty exists but throws, it's IE 8
18915    return !throwsError(function () {
18916      return Object.defineProperty({}, 'x', { get: function () { } }); // eslint-disable-line getter-return
18917    });
18918  };
18919  var supportsDescriptors = !!Object.defineProperty && arePropertyDescriptorsSupported();
18920  var functionsHaveNames = (function foo() {}).name === 'foo';
18921
18922  var _forEach = Function.call.bind(Array.prototype.forEach);
18923  var _reduce = Function.call.bind(Array.prototype.reduce);
18924  var _filter = Function.call.bind(Array.prototype.filter);
18925  var _some = Function.call.bind(Array.prototype.some);
18926
18927  var defineProperty = function (object, name, value, force) {
18928    if (!force && name in object) { return; }
18929    if (supportsDescriptors) {
18930      Object.defineProperty(object, name, {
18931        configurable: true,
18932        enumerable: false,
18933        writable: true,
18934        value: value
18935      });
18936    } else {
18937      object[name] = value;
18938    }
18939  };
18940
18941  // Define configurable, writable and non-enumerable props
18942  // if they don’t exist.
18943  var defineProperties = function (object, map, forceOverride) {
18944    _forEach(keys(map), function (name) {
18945      var method = map[name];
18946      defineProperty(object, name, method, !!forceOverride);
18947    });
18948  };
18949
18950  var _toString = Function.call.bind(Object.prototype.toString);
18951  var isCallable = typeof /abc/ === 'function' ? function IsCallableSlow(x) {
18952    // Some old browsers (IE, FF) say that typeof /abc/ === 'function'
18953    return typeof x === 'function' && _toString(x) === '[object Function]';
18954  } : function IsCallableFast(x) { return typeof x === 'function'; };
18955
18956  var Value = {
18957    getter: function (object, name, getter) {
18958      if (!supportsDescriptors) {
18959        throw new TypeError('getters require true ES5 support');
18960      }
18961      Object.defineProperty(object, name, {
18962        configurable: true,
18963        enumerable: false,
18964        get: getter
18965      });
18966    },
18967    proxy: function (originalObject, key, targetObject) {
18968      if (!supportsDescriptors) {
18969        throw new TypeError('getters require true ES5 support');
18970      }
18971      var originalDescriptor = Object.getOwnPropertyDescriptor(originalObject, key);
18972      Object.defineProperty(targetObject, key, {
18973        configurable: originalDescriptor.configurable,
18974        enumerable: originalDescriptor.enumerable,
18975        get: function getKey() { return originalObject[key]; },
18976        set: function setKey(value) { originalObject[key] = value; }
18977      });
18978    },
18979    redefine: function (object, property, newValue) {
18980      if (supportsDescriptors) {
18981        var descriptor = Object.getOwnPropertyDescriptor(object, property);
18982        descriptor.value = newValue;
18983        Object.defineProperty(object, property, descriptor);
18984      } else {
18985        object[property] = newValue;
18986      }
18987    },
18988    defineByDescriptor: function (object, property, descriptor) {
18989      if (supportsDescriptors) {
18990        Object.defineProperty(object, property, descriptor);
18991      } else if ('value' in descriptor) {
18992        object[property] = descriptor.value;
18993      }
18994    },
18995    preserveToString: function (target, source) {
18996      if (source && isCallable(source.toString)) {
18997        defineProperty(target, 'toString', source.toString.bind(source), true);
18998      }
18999    }
19000  };
19001
19002  // Simple shim for Object.create on ES3 browsers
19003  // (unlike real shim, no attempt to support `prototype === null`)
19004  var create = Object.create || function (prototype, properties) {
19005    var Prototype = function Prototype() {};
19006    Prototype.prototype = prototype;
19007    var object = new Prototype();
19008    if (typeof properties !== 'undefined') {
19009      keys(properties).forEach(function (key) {
19010        Value.defineByDescriptor(object, key, properties[key]);
19011      });
19012    }
19013    return object;
19014  };
19015
19016  var supportsSubclassing = function (C, f) {
19017    if (!Object.setPrototypeOf) { return false; /* skip test on IE < 11 */ }
19018    return valueOrFalseIfThrows(function () {
19019      var Sub = function Subclass(arg) {
19020        var o = new C(arg);
19021        Object.setPrototypeOf(o, Subclass.prototype);
19022        return o;
19023      };
19024      Object.setPrototypeOf(Sub, C);
19025      Sub.prototype = create(C.prototype, {
19026        constructor: { value: Sub }
19027      });
19028      return f(Sub);
19029    });
19030  };
19031
19032  var getGlobal = function () {
19033    /* global self, window */
19034    // the only reliable means to get the global object is
19035    // `Function('return this')()`
19036    // However, this causes CSP violations in Chrome apps.
19037    if (typeof self !== 'undefined') { return self; }
19038    if (typeof window !== 'undefined') { return window; }
19039    if (typeof global !== 'undefined') { return global; }
19040    throw new Error('unable to locate global object');
19041  };
19042
19043  var globals = getGlobal();
19044  var globalIsFinite = globals.isFinite;
19045  var _indexOf = Function.call.bind(String.prototype.indexOf);
19046  var _arrayIndexOfApply = Function.apply.bind(Array.prototype.indexOf);
19047  var _concat = Function.call.bind(Array.prototype.concat);
19048  // var _sort = Function.call.bind(Array.prototype.sort);
19049  var _strSlice = Function.call.bind(String.prototype.slice);
19050  var _push = Function.call.bind(Array.prototype.push);
19051  var _pushApply = Function.apply.bind(Array.prototype.push);
19052  var _join = Function.call.bind(Array.prototype.join);
19053  var _shift = Function.call.bind(Array.prototype.shift);
19054  var _max = Math.max;
19055  var _min = Math.min;
19056  var _floor = Math.floor;
19057  var _abs = Math.abs;
19058  var _exp = Math.exp;
19059  var _log = Math.log;
19060  var _sqrt = Math.sqrt;
19061  var _hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);
19062  var ArrayIterator; // make our implementation private
19063  var noop = function () {};
19064
19065  var OrigMap = globals.Map;
19066  var origMapDelete = OrigMap && OrigMap.prototype['delete'];
19067  var origMapGet = OrigMap && OrigMap.prototype.get;
19068  var origMapHas = OrigMap && OrigMap.prototype.has;
19069  var origMapSet = OrigMap && OrigMap.prototype.set;
19070
19071  var Symbol = globals.Symbol || {};
19072  var symbolSpecies = Symbol.species || '@@species';
19073
19074  var numberIsNaN = Number.isNaN || function isNaN(value) {
19075    // NaN !== NaN, but they are identical.
19076    // NaNs are the only non-reflexive value, i.e., if x !== x,
19077    // then x is NaN.
19078    // isNaN is broken: it converts its argument to number, so
19079    // isNaN('foo') => true
19080    return value !== value;
19081  };
19082  var numberIsFinite = Number.isFinite || function isFinite(value) {
19083    return typeof value === 'number' && globalIsFinite(value);
19084  };
19085  var _sign = isCallable(Math.sign) ? Math.sign : function sign(value) {
19086    var number = Number(value);
19087    if (number === 0) { return number; }
19088    if (numberIsNaN(number)) { return number; }
19089    return number < 0 ? -1 : 1;
19090  };
19091  var _log1p = function log1p(value) {
19092    var x = Number(value);
19093    if (x < -1 || numberIsNaN(x)) { return NaN; }
19094    if (x === 0 || x === Infinity) { return x; }
19095    if (x === -1) { return -Infinity; }
19096
19097    return (1 + x) - 1 === 0 ? x : x * (_log(1 + x) / ((1 + x) - 1));
19098  };
19099
19100  // taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js
19101  // can be replaced with require('is-arguments') if we ever use a build process instead
19102  var isStandardArguments = function isArguments(value) {
19103    return _toString(value) === '[object Arguments]';
19104  };
19105  var isLegacyArguments = function isArguments(value) {
19106    return value !== null
19107      && typeof value === 'object'
19108      && typeof value.length === 'number'
19109      && value.length >= 0
19110      && _toString(value) !== '[object Array]'
19111      && _toString(value.callee) === '[object Function]';
19112  };
19113  var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;
19114
19115  var Type = {
19116    primitive: function (x) { return x === null || (typeof x !== 'function' && typeof x !== 'object'); },
19117    string: function (x) { return _toString(x) === '[object String]'; },
19118    regex: function (x) { return _toString(x) === '[object RegExp]'; },
19119    symbol: function (x) {
19120      return typeof globals.Symbol === 'function' && typeof x === 'symbol';
19121    }
19122  };
19123
19124  var overrideNative = function overrideNative(object, property, replacement) {
19125    var original = object[property];
19126    defineProperty(object, property, replacement, true);
19127    Value.preserveToString(object[property], original);
19128  };
19129
19130  // eslint-disable-next-line no-restricted-properties
19131  var hasSymbols = typeof Symbol === 'function' && typeof Symbol['for'] === 'function' && Type.symbol(Symbol());
19132
19133  // This is a private name in the es6 spec, equal to '[Symbol.iterator]'
19134  // we're going to use an arbitrary _-prefixed name to make our shims
19135  // work properly with each other, even though we don't have full Iterator
19136  // support.  That is, `Array.from(map.keys())` will work, but we don't
19137  // pretend to export a "real" Iterator interface.
19138  var $iterator$ = Type.symbol(Symbol.iterator) ? Symbol.iterator : '_es6-shim iterator_';
19139  // Firefox ships a partial implementation using the name @@iterator.
19140  // https://bugzilla.mozilla.org/show_bug.cgi?id=907077#c14
19141  // So use that name if we detect it.
19142  if (globals.Set && typeof new globals.Set()['@@iterator'] === 'function') {
19143    $iterator$ = '@@iterator';
19144  }
19145
19146  // Reflect
19147  if (!globals.Reflect) {
19148    defineProperty(globals, 'Reflect', {}, true);
19149  }
19150  var Reflect = globals.Reflect;
19151
19152  var $String = String;
19153
19154  /* global document */
19155  var domAll = (typeof document === 'undefined' || !document) ? null : document.all;
19156  var isNullOrUndefined = domAll == null ? function isNullOrUndefined(x) {
19157    return x == null;
19158  } : function isNullOrUndefinedAndNotDocumentAll(x) {
19159    return x == null && x !== domAll;
19160  };
19161
19162  var ES = {
19163    // http://www.ecma-international.org/ecma-262/6.0/#sec-call
19164    Call: function Call(F, V) {
19165      var args = arguments.length > 2 ? arguments[2] : [];
19166      if (!ES.IsCallable(F)) {
19167        throw new TypeError(F + ' is not a function');
19168      }
19169      return _apply(F, V, args);
19170    },
19171
19172    RequireObjectCoercible: function (x, optMessage) {
19173      if (isNullOrUndefined(x)) {
19174        throw new TypeError(optMessage || 'Cannot call method on ' + x);
19175      }
19176      return x;
19177    },
19178
19179    // This might miss the "(non-standard exotic and does not implement
19180    // [[Call]])" case from
19181    // http://www.ecma-international.org/ecma-262/6.0/#sec-typeof-operator-runtime-semantics-evaluation
19182    // but we can't find any evidence these objects exist in practice.
19183    // If we find some in the future, you could test `Object(x) === x`,
19184    // which is reliable according to
19185    // http://www.ecma-international.org/ecma-262/6.0/#sec-toobject
19186    // but is not well optimized by runtimes and creates an object
19187    // whenever it returns false, and thus is very slow.
19188    TypeIsObject: function (x) {
19189      if (x === void 0 || x === null || x === true || x === false) {
19190        return false;
19191      }
19192      return typeof x === 'function' || typeof x === 'object' || x === domAll;
19193    },
19194
19195    ToObject: function (o, optMessage) {
19196      return Object(ES.RequireObjectCoercible(o, optMessage));
19197    },
19198
19199    IsCallable: isCallable,
19200
19201    IsConstructor: function (x) {
19202      // We can't tell callables from constructors in ES5
19203      return ES.IsCallable(x);
19204    },
19205
19206    ToInt32: function (x) {
19207      return ES.ToNumber(x) >> 0;
19208    },
19209
19210    ToUint32: function (x) {
19211      return ES.ToNumber(x) >>> 0;
19212    },
19213
19214    ToNumber: function (value) {
19215      if (hasSymbols && _toString(value) === '[object Symbol]') {
19216        throw new TypeError('Cannot convert a Symbol value to a number');
19217      }
19218      return +value;
19219    },
19220
19221    ToInteger: function (value) {
19222      var number = ES.ToNumber(value);
19223      if (numberIsNaN(number)) { return 0; }
19224      if (number === 0 || !numberIsFinite(number)) { return number; }
19225      return (number > 0 ? 1 : -1) * _floor(_abs(number));
19226    },
19227
19228    ToLength: function (value) {
19229      var len = ES.ToInteger(value);
19230      if (len <= 0) { return 0; } // includes converting -0 to +0
19231      if (len > Number.MAX_SAFE_INTEGER) { return Number.MAX_SAFE_INTEGER; }
19232      return len;
19233    },
19234
19235    SameValue: function (a, b) {
19236      if (a === b) {
19237        // 0 === -0, but they are not identical.
19238        if (a === 0) { return 1 / a === 1 / b; }
19239        return true;
19240      }
19241      return numberIsNaN(a) && numberIsNaN(b);
19242    },
19243
19244    SameValueZero: function (a, b) {
19245      // same as SameValue except for SameValueZero(+0, -0) == true
19246      return (a === b) || (numberIsNaN(a) && numberIsNaN(b));
19247    },
19248
19249    GetIterator: function (o) {
19250      if (isArguments(o)) {
19251        // special case support for `arguments`
19252        return new ArrayIterator(o, 'value');
19253      }
19254      var itFn = ES.GetMethod(o, $iterator$);
19255      if (!ES.IsCallable(itFn)) {
19256        // Better diagnostics if itFn is null or undefined
19257        throw new TypeError('value is not an iterable');
19258      }
19259      var it = ES.Call(itFn, o);
19260      if (!ES.TypeIsObject(it)) {
19261        throw new TypeError('bad iterator');
19262      }
19263      return it;
19264    },
19265
19266    GetMethod: function (o, p) {
19267      var func = ES.ToObject(o)[p];
19268      if (isNullOrUndefined(func)) {
19269        return void 0;
19270      }
19271      if (!ES.IsCallable(func)) {
19272        throw new TypeError('Method not callable: ' + p);
19273      }
19274      return func;
19275    },
19276
19277    IteratorComplete: function (iterResult) {
19278      return !!iterResult.done;
19279    },
19280
19281    IteratorClose: function (iterator, completionIsThrow) {
19282      var returnMethod = ES.GetMethod(iterator, 'return');
19283      if (returnMethod === void 0) {
19284        return;
19285      }
19286      var innerResult, innerException;
19287      try {
19288        innerResult = ES.Call(returnMethod, iterator);
19289      } catch (e) {
19290        innerException = e;
19291      }
19292      if (completionIsThrow) {
19293        return;
19294      }
19295      if (innerException) {
19296        throw innerException;
19297      }
19298      if (!ES.TypeIsObject(innerResult)) {
19299        throw new TypeError("Iterator's return method returned a non-object.");
19300      }
19301    },
19302
19303    IteratorNext: function (it) {
19304      var result = arguments.length > 1 ? it.next(arguments[1]) : it.next();
19305      if (!ES.TypeIsObject(result)) {
19306        throw new TypeError('bad iterator');
19307      }
19308      return result;
19309    },
19310
19311    IteratorStep: function (it) {
19312      var result = ES.IteratorNext(it);
19313      var done = ES.IteratorComplete(result);
19314      return done ? false : result;
19315    },
19316
19317    Construct: function (C, args, newTarget, isES6internal) {
19318      var target = typeof newTarget === 'undefined' ? C : newTarget;
19319
19320      if (!isES6internal && Reflect.construct) {
19321        // Try to use Reflect.construct if available
19322        return Reflect.construct(C, args, target);
19323      }
19324      // OK, we have to fake it.  This will only work if the
19325      // C.[[ConstructorKind]] == "base" -- but that's the only
19326      // kind we can make in ES5 code anyway.
19327
19328      // OrdinaryCreateFromConstructor(target, "%ObjectPrototype%")
19329      var proto = target.prototype;
19330      if (!ES.TypeIsObject(proto)) {
19331        proto = Object.prototype;
19332      }
19333      var obj = create(proto);
19334      // Call the constructor.
19335      var result = ES.Call(C, obj, args);
19336      return ES.TypeIsObject(result) ? result : obj;
19337    },
19338
19339    SpeciesConstructor: function (O, defaultConstructor) {
19340      var C = O.constructor;
19341      if (C === void 0) {
19342        return defaultConstructor;
19343      }
19344      if (!ES.TypeIsObject(C)) {
19345        throw new TypeError('Bad constructor');
19346      }
19347      var S = C[symbolSpecies];
19348      if (isNullOrUndefined(S)) {
19349        return defaultConstructor;
19350      }
19351      if (!ES.IsConstructor(S)) {
19352        throw new TypeError('Bad @@species');
19353      }
19354      return S;
19355    },
19356
19357    CreateHTML: function (string, tag, attribute, value) {
19358      var S = ES.ToString(string);
19359      var p1 = '<' + tag;
19360      if (attribute !== '') {
19361        var V = ES.ToString(value);
19362        var escapedV = V.replace(/"/g, '&quot;');
19363        p1 += ' ' + attribute + '="' + escapedV + '"';
19364      }
19365      var p2 = p1 + '>';
19366      var p3 = p2 + S;
19367      return p3 + '</' + tag + '>';
19368    },
19369
19370    IsRegExp: function IsRegExp(argument) {
19371      if (!ES.TypeIsObject(argument)) {
19372        return false;
19373      }
19374      var isRegExp = argument[Symbol.match];
19375      if (typeof isRegExp !== 'undefined') {
19376        return !!isRegExp;
19377      }
19378      return Type.regex(argument);
19379    },
19380
19381    ToString: function ToString(string) {
19382      if (hasSymbols && _toString(string) === '[object Symbol]') {
19383        throw new TypeError('Cannot convert a Symbol value to a number');
19384      }
19385      return $String(string);
19386    }
19387  };
19388
19389  // Well-known Symbol shims
19390  if (supportsDescriptors && hasSymbols) {
19391    var defineWellKnownSymbol = function defineWellKnownSymbol(name) {
19392      if (Type.symbol(Symbol[name])) {
19393        return Symbol[name];
19394      }
19395      // eslint-disable-next-line no-restricted-properties
19396      var sym = Symbol['for']('Symbol.' + name);
19397      Object.defineProperty(Symbol, name, {
19398        configurable: false,
19399        enumerable: false,
19400        writable: false,
19401        value: sym
19402      });
19403      return sym;
19404    };
19405    if (!Type.symbol(Symbol.search)) {
19406      var symbolSearch = defineWellKnownSymbol('search');
19407      var originalSearch = String.prototype.search;
19408      defineProperty(RegExp.prototype, symbolSearch, function search(string) {
19409        return ES.Call(originalSearch, string, [this]);
19410      });
19411      var searchShim = function search(regexp) {
19412        var O = ES.RequireObjectCoercible(this);
19413        if (!isNullOrUndefined(regexp)) {
19414          var searcher = ES.GetMethod(regexp, symbolSearch);
19415          if (typeof searcher !== 'undefined') {
19416            return ES.Call(searcher, regexp, [O]);
19417          }
19418        }
19419        return ES.Call(originalSearch, O, [ES.ToString(regexp)]);
19420      };
19421      overrideNative(String.prototype, 'search', searchShim);
19422    }
19423    if (!Type.symbol(Symbol.replace)) {
19424      var symbolReplace = defineWellKnownSymbol('replace');
19425      var originalReplace = String.prototype.replace;
19426      defineProperty(RegExp.prototype, symbolReplace, function replace(string, replaceValue) {
19427        return ES.Call(originalReplace, string, [this, replaceValue]);
19428      });
19429      var replaceShim = function replace(searchValue, replaceValue) {
19430        var O = ES.RequireObjectCoercible(this);
19431        if (!isNullOrUndefined(searchValue)) {
19432          var replacer = ES.GetMethod(searchValue, symbolReplace);
19433          if (typeof replacer !== 'undefined') {
19434            return ES.Call(replacer, searchValue, [O, replaceValue]);
19435          }
19436        }
19437        return ES.Call(originalReplace, O, [ES.ToString(searchValue), replaceValue]);
19438      };
19439      overrideNative(String.prototype, 'replace', replaceShim);
19440    }
19441    if (!Type.symbol(Symbol.split)) {
19442      var symbolSplit = defineWellKnownSymbol('split');
19443      var originalSplit = String.prototype.split;
19444      defineProperty(RegExp.prototype, symbolSplit, function split(string, limit) {
19445        return ES.Call(originalSplit, string, [this, limit]);
19446      });
19447      var splitShim = function split(separator, limit) {
19448        var O = ES.RequireObjectCoercible(this);
19449        if (!isNullOrUndefined(separator)) {
19450          var splitter = ES.GetMethod(separator, symbolSplit);
19451          if (typeof splitter !== 'undefined') {
19452            return ES.Call(splitter, separator, [O, limit]);
19453          }
19454        }
19455        return ES.Call(originalSplit, O, [ES.ToString(separator), limit]);
19456      };
19457      overrideNative(String.prototype, 'split', splitShim);
19458    }
19459    var symbolMatchExists = Type.symbol(Symbol.match);
19460    var stringMatchIgnoresSymbolMatch = symbolMatchExists && (function () {
19461      // Firefox 41, through Nightly 45 has Symbol.match, but Str
19461ing#match ignores it.
19462      // Firefox 40 and below have Symbol.match but String#match works fine.
19463      var o = {};
19464      o[Symbol.match] = function () { return 42; };
19465      return 'a'.match(o) !== 42;
19466    }());
19467    if (!symbolMatchExists || stringMatchIgnoresSymbolMatch) {
19468      var symbolMatch = defineWellKnownSymbol('match');
19469
19470      var originalMatch = String.prototype.match;
19471      defineProperty(RegExp.prototype, symbolMatch, function match(string) {
19472        return ES.Call(originalMatch, string, [this]);
19473      });
19474
19475      var matchShim = function match(regexp) {
19476        var O = ES.RequireObjectCoercible(this);
19477        if (!isNullOrUndefined(regexp)) {
19478          var matcher = ES.GetMethod(regexp, symbolMatch);
19479          if (typeof matcher !== 'undefined') {
19480            return ES.Call(matcher, regexp, [O]);
19481          }
19482        }
19483        return ES.Call(originalMatch, O, [ES.ToString(regexp)]);
19484      };
19485      overrideNative(String.prototype, 'match', matchShim);
19486    }
19487  }
19488
19489  var wrapConstructor = function wrapConstructor(original, replacement, keysToSkip) {
19490    Value.preserveToString(replacement, original);
19491    if (Object.setPrototypeOf) {
19492      // sets up proper prototype chain where possible
19493      Object.setPrototypeOf(original, replacement);
19494    }
19495    if (supportsDescriptors) {
19496      _forEach(Object.getOwnPropertyNames(original), function (key) {
19497        if (key in noop || keysToSkip[key]) { return; }
19498        Value.proxy(original, key, replacement);
19499      });
19500    } else {
19501      _forEach(Object.keys(original), function (key) {
19502        if (key in noop || keysToSkip[key]) { return; }
19503        replacement[key] = original[key];
19504      });
19505    }
19506    replacement.prototype = original.prototype;
19507    Value.redefine(original.prototype, 'constructor', replacement);
19508  };
19509
19510  var defaultSpeciesGetter = function () { return this; };
19511  var addDefaultSpecies = function (C) {
19512    if (supportsDescriptors && !_hasOwnProperty(C, symbolSpecies)) {
19513      Value.getter(C, symbolSpecies, defaultSpeciesGetter);
19514    }
19515  };
19516
19517  var addIterator = function (prototype, impl) {
19518    var implementation = impl || function iterator() { return this; };
19519    defineProperty(prototype, $iterator$, implementation);
19520    if (!prototype[$iterator$] && Type.symbol($iterator$)) {
19521      // implementations are buggy when $iterator$ is a Symbol
19522      prototype[$iterator$] = implementation;
19523    }
19524  };
19525
19526  var createDataProperty = function createDataProperty(object, name, value) {
19527    if (supportsDescriptors) {
19528      Object.defineProperty(object, name, {
19529        configurable: true,
19530        enumerable: true,
19531        writable: true,
19532        value: value
19533      });
19534    } else {
19535      object[name] = value;
19536    }
19537  };
19538  var createDataPropertyOrThrow = function createDataPropertyOrThrow(object, name, value) {
19539    createDataProperty(object, name, value);
19540    if (!ES.SameValue(object[name], value)) {
19541      throw new TypeError('property is nonconfigurable');
19542    }
19543  };
19544
19545  var emulateES6construct = function (o, defaultNewTarget, defaultProto, slots) {
19546    // This is an es5 approximation to es6 construct semantics.  in es6,
19547    // 'new Foo' invokes Foo.[[Construct]] which (for almost all objects)
19548    // just sets the internal variable NewTarget (in es6 syntax `new.target`)
19549    // to Foo and then returns Foo().
19550
19551    // Many ES6 object then have constructors of the form:
19552    // 1. If NewTarget is undefined, throw a TypeError exception
19553    // 2. Let xxx by OrdinaryCreateFromConstructor(NewTarget, yyy, zzz)
19554
19555    // So we're going to emulate those first two steps.
19556    if (!ES.TypeIsObject(o)) {
19557      throw new TypeError('Constructor requires `new`: ' + defaultNewTarget.name);
19558    }
19559    var proto = defaultNewTarget.prototype;
19560    if (!ES.TypeIsObject(proto)) {
19561      proto = defaultProto;
19562    }
19563    var obj = create(proto);
19564    for (var name in slots) {
19565      if (_hasOwnProperty(slots, name)) {
19566        var value = slots[name];
19567        defineProperty(obj, name, value, true);
19568      }
19569    }
19570    return obj;
19571  };
19572
19573  // Firefox 31 reports this function's length as 0
19574  // https://bugzilla.mozilla.org/show_bug.cgi?id=1062484
19575  if (String.fromCodePoint && String.fromCodePoint.length !== 1) {
19576    var originalFromCodePoint = String.fromCodePoint;
19577    overrideNative(String, 'fromCodePoint', function fromCodePoint(codePoints) {
19578      return ES.Call(originalFromCodePoint, this, arguments);
19579    });
19580  }
19581
19582  var StringShims = {
19583    fromCodePoint: function fromCodePoint(codePoints) {
19584      var result = [];
19585      var next;
19586      for (var i = 0, length = arguments.length; i < length; i++) {
19587        next = Number(arguments[i]);
19588        if (!ES.SameValue(next, ES.ToInteger(next)) || next < 0 || next > 0x10FFFF) {
19589          throw new RangeError('Invalid code point ' + next);
19590        }
19591
19592        if (next < 0x10000) {
19593          _push(result, String.fromCharCode(next));
19594        } else {
19595          next -= 0x10000;
19596          _push(result, String.fromCharCode((next >> 10) + 0xD800));
19597          _push(result, String.fromCharCode((next % 0x400) + 0xDC00));
19598        }
19599      }
19600      return _join(result, '');
19601    },
19602
19603    raw: function raw(template) {
19604      var numberOfSubstitutions = arguments.length - 1;
19605      var cooked = ES.ToObject(template, 'bad template');
19606      var raw = ES.ToObject(cooked.raw, 'bad raw value');
19607      var len = raw.length;
19608      var literalSegments = ES.ToLength(len);
19609      if (literalSegments <= 0) {
19610        return '';
19611      }
19612
19613      var stringElements = [];
19614      var nextIndex = 0;
19615      var nextKey, next, nextSeg, nextSub;
19616      while (nextIndex < literalSegments) {
19617        nextKey = ES.ToString(nextIndex);
19618        nextSeg = ES.ToString(raw[nextKey]);
19619        _push(stringElements, nextSeg);
19620        if (nextIndex + 1 >= literalSegments) {
19621          break;
19622        }
19623        next = nextIndex + 1 < arguments.length ? arguments[nextIndex + 1] : '';
19624        nextSub = ES.ToString(next);
19625        _push(stringElements, nextSub);
19626        nextIndex += 1;
19627      }
19628      return _join(stringElements, '');
19629    }
19630  };
19631  if (String.raw && String.raw({ raw: { 0: 'x', 1: 'y', length: 2 } }) !== 'xy') {
19632    // IE 11 TP has a broken String.raw implementation
19633    overrideNative(String, 'raw', StringShims.raw);
19634  }
19635  defineProperties(String, StringShims);
19636
19637  // Fast repeat, uses the `Exponentiation by squaring` algorithm.
19638  // Perf: http://jsperf.com/string-repeat2/2
19639  var stringRepeat = function repeat(s, times) {
19640    if (times < 1) { return ''; }
19641    if (times % 2) { return repeat(s, times - 1) + s; }
19642    var half = repeat(s, times / 2);
19643    return half + half;
19644  };
19645  var stringMaxLength = Infinity;
19646
19647  var StringPrototypeShims = {
19648    repeat: function repeat(times) {
19649      var thisStr = ES.ToString(ES.RequireObjectCoercible(this));
19650      var numTimes = ES.ToInteger(times);
19651      if (numTimes < 0 || numTimes >= stringMaxLength) {
19652        throw new RangeError('repeat count must be less than infinity and not overflow maximum string size');
19653      }
19654      return stringRepeat(thisStr, numTimes);
19655    },
19656
19657    startsWith: function startsWith(searchString) {
19658      var S = ES.ToString(ES.RequireObjectCoercible(this));
19659      if (ES.IsRegExp(searchString)) {
19660        throw new TypeError('Cannot call method "startsWith" with a regex');
19661      }
19662      var searchStr = ES.ToString(searchString);
19663      var position;
19664      if (arguments.length > 1) {
19665        position = arguments[1];
19666      }
19667      var start = _max(ES.ToInteger(position), 0);
19668      return _strSlice(S, start, start + searchStr.length) === searchStr;
19669    },
19670
19671    endsWith: function endsWith(searchString) {
19672      var S = ES.ToString(ES.RequireObjectCoercible(this));
19673      if (ES.IsRegExp(searchString)) {
19674        throw new TypeError('Cannot call method "endsWith" with a regex');
19675      }
19676      var searchStr = ES.ToString(searchString);
19677      var len = S.length;
19678      var endPosition;
19679      if (arguments.length > 1) {
19680        endPosition = arguments[1];
19681      }
19682      var pos = typeof endPosition === 'undefined' ? len : ES.ToInteger(endPosition);
19683      var end = _min(_max(pos, 0), len);
19684      return _strSlice(S, end - searchStr.length, end) === searchStr;
19685    },
19686
19687    includes: function includes(searchString) {
19688      if (ES.IsRegExp(searchString)) {
19689        throw new TypeError('"includes" does not accept a RegExp');
19690      }
19691      var searchStr = ES.ToString(searchString);
19692      var position;
19693      if (arguments.length > 1) {
19694        position = arguments[1];
19695      }
19696      // Somehow this trick makes method 100% compat with the spec.
19697      return _indexOf(this, searchStr, position) !== -1;
19698    },
19699
19700    codePointAt: function codePointAt(pos) {
19701      var thisStr = ES.ToString(ES.RequireObjectCoercible(this));
19702      var position = ES.ToInteger(pos);
19703      var length = thisStr.length;
19704      if (position >= 0 && position < length) {
19705        var first = thisStr.charCodeAt(position);
19706        var isEnd = position + 1 === length;
19707        if (first < 0xD800 || first > 0xDBFF || isEnd) { return first; }
19708        var second = thisStr.charCodeAt(position + 1);
19709        if (second < 0xDC00 || second > 0xDFFF) { return first; }
19710        return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
19711      }
19712    }
19713  };
19714  if (String.prototype.includes && 'a'.includes('a', Infinity) !== false) {
19715    overrideNative(String.prototype, 'includes', StringPrototypeShims.includes);
19716  }
19717
19718  if (String.prototype.startsWith && String.prototype.endsWith) {
19719    var startsWithRejectsRegex = throwsError(function () {
19720      /* throws if spec-compliant */
19721      return '/a/'.startsWith(/a/);
19722    });
19723    var startsWithHandlesInfinity = valueOrFalseIfThrows(function () {
19724      return 'abc'.startsWith('a', Infinity) === false;
19725    });
19726    if (!startsWithRejectsRegex || !startsWithHandlesInfinity) {
19727      // Firefox (< 37?) and IE 11 TP have a noncompliant startsWith implementation
19728      overrideNative(String.prototype, 'startsWith', StringPrototypeShims.startsWith);
19729      overrideNative(String.prototype, 'endsWith', StringPrototypeShims.endsWith);
19730    }
19731  }
19732  if (hasSymbols) {
19733    var startsWithSupportsSymbolMatch = valueOrFalseIfThrows(function () {
19734      var re = /a/;
19735      re[Symbol.match] = false;
19736      return '/a/'.startsWith(re);
19737    });
19738    if (!startsWithSupportsSymbolMatch) {
19739      overrideNative(String.prototype, 'startsWith', StringPrototypeShims.startsWith);
19740    }
19741    var endsWithSupportsSymbolMatch = valueOrFalseIfThrows(function () {
19742      var re = /a/;
19743      re[Symbol.match] = false;
19744      return '/a/'.endsWith(re);
19745    });
19746    if (!endsWithSupportsSymbolMatch) {
19747      overrideNative(String.prototype, 'endsWith', StringPrototypeShims.endsWith);
19748    }
19749    var includesSupportsSymbolMatch = valueOrFalseIfThrows(function () {
19750      var re = /a/;
19751      re[Symbol.match] = false;
19752      return '/a/'.includes(re);
19753    });
19754    if (!includesSupportsSymbolMatch) {
19755      overrideNative(String.prototype, 'includes', StringPrototypeShims.includes);
19756    }
19757  }
19758
19759  defineProperties(String.prototype, StringPrototypeShims);
19760
19761  // whitespace from: http://es5.github.io/#x15.5.4.20
19762  // implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
19763  var ws = [
19764    '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
19765    '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
19766    '\u2029\uFEFF'
19767  ].join('');
19768  var trimRegexp = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
19769  var trimShim = function trim() {
19770    return ES.ToString(ES.RequireObjectCoercible(this)).replace(trimRegexp, '');
19771  };
19772  var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
19773  var nonWSregex = new RegExp('[' + nonWS + ']', 'g');
19774  var isBadHexRegex = /^[-+]0x[0-9a-f]+$/i;
19775  var hasStringTrimBug = nonWS.trim().length !== nonWS.length;
19776  defineProperty(String.prototype, 'trim', trimShim, hasStringTrimBug);
19777
19778  // Given an argument x, it will return an IteratorResult object,
19779  // with value set to x and done to false.
19780  // Given no arguments, it will return an iterator completion object.
19781  var iteratorResult = function (x) {
19782    return { value: x, done: arguments.length === 0 };
19783  };
19784
19785  // see http://www.ecma-international.org/ecma-262/6.0/#sec-string.prototype-@@iterator
19786  var StringIterator = function (s) {
19787    ES.RequireObjectCoercible(s);
19788    defineProperty(this, '_s', ES.ToString(s));
19789    defineProperty(this, '_i', 0);
19790  };
19791  StringIterator.prototype.next = function () {
19792    var s = this._s;
19793    var i = this._i;
19794    if (typeof s === 'undefined' || i >= s.length) {
19795      this._s = void 0;
19796      return iteratorResult();
19797    }
19798    var first = s.charCodeAt(i);
19799    var second, len;
19800    if (first < 0xD800 || first > 0xDBFF || (i + 1) === s.length) {
19801      len = 1;
19802    } else {
19803      second = s.charCodeAt(i + 1);
19804      len = (second < 0xDC00 || second > 0xDFFF) ? 1 : 2;
19805    }
19806    this._i = i + len;
19807    return iteratorResult(s.substr(i, len));
19808  };
19809  addIterator(StringIterator.prototype);
19810  addIterator(String.prototype, function () {
19811    return new StringIterator(this);
19812  });
19813
19814  var ArrayShims = {
19815    from: function from(items) {
19816      var C = this;
19817      var mapFn;
19818      if (arguments.length > 1) {
19819        mapFn = arguments[1];
19820      }
19821      var mapping, T;
19822      if (typeof mapFn === 'undefined') {
19823        mapping = false;
19824      } else {
19825        if (!ES.IsCallable(mapFn)) {
19826          throw new TypeError('Array.from: when provided, the second argument must be a function');
19827        }
19828        if (arguments.length > 2) {
19829          T = arguments[2];
19830        }
19831        mapping = true;
19832      }
19833
19834      // Note that that Arrays will use ArrayIterator:
19835      // https://bugs.ecmascript.org/show_bug.cgi?id=2416
19836      var usingIterator = typeof (isArguments(items) || ES.GetMethod(items, $iterator$)) !== 'undefined';
19837
19838      var length, result, i;
19839      if (usingIterator) {
19840        result = ES.IsConstructor(C) ? Object(new C()) : [];
19841        var iterator = ES.GetIterator(items);
19842        var next, nextValue;
19843
19844        i = 0;
19845        while (true) {
19846          next = ES.IteratorStep(iterator);
19847          if (next === false) {
19848            break;
19849          }
19850          nextValue = next.value;
19851          try {
19852            if (mapping) {
19853              nextValue = typeof T === 'undefined' ? mapFn(nextValue, i) : _call(mapFn, T, nextValue, i);
19854            }
19855            result[i] = nextValue;
19856          } catch (e) {
19857            ES.IteratorClose(iterator, true);
19858            throw e;
19859          }
19860          i += 1;
19861        }
19862        length = i;
19863      } else {
19864        var arrayLike = ES.ToObject(items);
19865        length = ES.ToLength(arrayLike.length);
19866        result = ES.IsConstructor(C) ? Object(new C(length)) : new Array(length);
19867        var value;
19868        for (i = 0; i < length; ++i) {
19869          value = arrayLike[i];
19870          if (mapping) {
19871            value = typeof T === 'undefined' ? mapFn(value, i) : _
19871call(mapFn, T, value, i);
19872          }
19873          createDataPropertyOrThrow(result, i, value);
19874        }
19875      }
19876
19877      result.length = length;
19878      return result;
19879    },
19880
19881    of: function of() {
19882      var len = arguments.length;
19883      var C = this;
19884      var A = isArray(C) || !ES.IsCallable(C) ? new Array(len) : ES.Construct(C, [len]);
19885      for (var k = 0; k < len; ++k) {
19886        createDataPropertyOrThrow(A, k, arguments[k]);
19887      }
19888      A.length = len;
19889      return A;
19890    }
19891  };
19892  defineProperties(Array, ArrayShims);
19893  addDefaultSpecies(Array);
19894
19895  // Our ArrayIterator is private; see
19896  // https://github.com/paulmillr/es6-shim/issues/252
19897  ArrayIterator = function (array, kind) {
19898    defineProperty(this, 'i', 0);
19899    defineProperty(this, 'array', array);
19900    defineProperty(this, 'kind', kind);
19901  };
19902
19903  defineProperties(ArrayIterator.prototype, {
19904    next: function () {
19905      var i = this.i;
19906      var array = this.array;
19907      if (!(this instanceof ArrayIterator)) {
19908        throw new TypeError('Not an ArrayIterator');
19909      }
19910      if (typeof array !== 'undefined') {
19911        var len = ES.ToLength(array.length);
19912        if (i < len) {
19913        //for (; i < len; i++) {
19914          var kind = this.kind;
19915          var retval;
19916          if (kind === 'key') {
19917            retval = i;
19918          } else if (kind === 'value') {
19919            retval = array[i];
19920          } else if (kind === 'entry') {
19921            retval = [i, array[i]];
19922          }
19923          this.i = i + 1;
19924          return iteratorResult(retval);
19925        }
19926      }
19927      this.array = void 0;
19928      return iteratorResult();
19929    }
19930  });
19931  addIterator(ArrayIterator.prototype);
19932
19933  /*
19934  var orderKeys = function orderKeys(a, b) {
19935    var aNumeric = String(ES.ToInteger(a)) === a;
19936    var bNumeric = String(ES.ToInteger(b)) === b;
19937    if (aNumeric && bNumeric) {
19938      return b - a;
19939    } else if (aNumeric && !bNumeric) {
19940      return -1;
19941    } else if (!aNumeric && bNumeric) {
19942      return 1;
19943    } else {
19944      return a.localeCompare(b);
19945    }
19946  };
19947
19948  var getAllKeys = function getAllKeys(object) {
19949    var ownKeys = [];
19950    var keys = [];
19951
19952    for (var key in object) {
19953      _push(_hasOwnProperty(object, key) ? ownKeys : keys, key);
19954    }
19955    _sort(ownKeys, orderKeys);
19956    _sort(keys, orderKeys);
19957
19958    return _concat(ownKeys, keys);
19959  };
19960  */
19961
19962  // note: this is positioned here because it depends on ArrayIterator
19963  var arrayOfSupportsSubclassing = Array.of === ArrayShims.of || (function () {
19964    // Detects a bug in Webkit nightly r181886
19965    var Foo = function Foo(len) { this.length = len; };
19966    Foo.prototype = [];
19967    var fooArr = Array.of.apply(Foo, [1, 2]);
19968    return fooArr instanceof Foo && fooArr.length === 2;
19969  }());
19970  if (!arrayOfSupportsSubclassing) {
19971    overrideNative(Array, 'of', ArrayShims.of);
19972  }
19973
19974  var ArrayPrototypeShims = {
19975    copyWithin: function copyWithin(target, start) {
19976      var o = ES.ToObject(this);
19977      var len = ES.ToLength(o.length);
19978      var relativeTarget = ES.ToInteger(target);
19979      var relativeStart = ES.ToInteger(start);
19980      var to = relativeTarget < 0 ? _max(len + relativeTarget, 0) : _min(relativeTarget, len);
19981      var from = relativeStart < 0 ? _max(len + relativeStart, 0) : _min(relativeStart, len);
19982      var end;
19983      if (arguments.length > 2) {
19984        end = arguments[2];
19985      }
19986      var relativeEnd = typeof end === 'undefined' ? len : ES.ToInteger(end);
19987      var finalItem = relativeEnd < 0 ? _max(len + relativeEnd, 0) : _min(relativeEnd, len);
19988      var count = _min(finalItem - from, len - to);
19989      var direction = 1;
19990      if (from < to && to < (from + count)) {
19991        direction = -1;
19992        from += count - 1;
19993        to += count - 1;
19994      }
19995      while (count > 0) {
19996        if (from in o) {
19997          o[to] = o[from];
19998        } else {
19999          delete o[to];
20000        }
20001        from += direction;
20002        to += direction;
20003        count -= 1;
20004      }
20005      return o;
20006    },
20007
20008    fill: function fill(value) {
20009      var start;
20010      if (arguments.length > 1) {
20011        start = arguments[1];
20012      }
20013      var end;
20014      if (arguments.length > 2) {
20015        end = arguments[2];
20016      }
20017      var O = ES.ToObject(this);
20018      var len = ES.ToLength(O.length);
20019      start = ES.ToInteger(typeof start === 'undefined' ? 0 : start);
20020      end = ES.ToInteger(typeof end === 'undefined' ? len : end);
20021
20022      var relativeStart = start < 0 ? _max(len + start, 0) : _min(start, len);
20023      var relativeEnd = end < 0 ? len + end : end;
20024
20025      for (var i = relativeStart; i < len && i < relativeEnd; ++i) {
20026        O[i] = value;
20027      }
20028      return O;
20029    },
20030
20031    find: function find(predicate) {
20032      var list = ES.ToObject(this);
20033      var length = ES.ToLength(list.length);
20034      if (!ES.IsCallable(predicate)) {
20035        throw new TypeError('Array#find: predicate must be a function');
20036      }
20037      var thisArg = arguments.length > 1 ? arguments[1] : null;
20038      for (var i = 0, value; i < length; i++) {
20039        value = list[i];
20040        if (thisArg) {
20041          if (_call(predicate, thisArg, value, i, list)) {
20042            return value;
20043          }
20044        } else if (predicate(value, i, list)) {
20045          return value;
20046        }
20047      }
20048    },
20049
20050    findIndex: function findIndex(predicate) {
20051      var list = ES.ToObject(this);
20052      var length = ES.ToLength(list.length);
20053      if (!ES.IsCallable(predicate)) {
20054        throw new TypeError('Array#findIndex: predicate must be a function');
20055      }
20056      var thisArg = arguments.length > 1 ? arguments[1] : null;
20057      for (var i = 0; i < length; i++) {
20058        if (thisArg) {
20059          if (_call(predicate, thisArg, list[i], i, list)) {
20060            return i;
20061          }
20062        } else if (predicate(list[i], i, list)) {
20063          return i;
20064        }
20065      }
20066      return -1;
20067    },
20068
20069    keys: function keys() {
20070      return new ArrayIterator(this, 'key');
20071    },
20072
20073    values: function values() {
20074      return new ArrayIterator(this, 'value');
20075    },
20076
20077    entries: function entries() {
20078      return new ArrayIterator(this, 'entry');
20079    }
20080  };
20081  // Safari 7.1 defines Array#keys and Array#entries natively,
20082  // but the resulting ArrayIterator objects don't have a "next" method.
20083  if (Array.prototype.keys && !ES.IsCallable([1].keys().next)) {
20084    delete Array.prototype.keys;
20085  }
20086  if (Array.prototype.entries && !ES.IsCallable([1].entries().next)) {
20087    delete Array.prototype.entries;
20088  }
20089
20090  // Chrome 38 defines Array#keys and Array#entries, and Array#@@iterator, but not Array#values
20091  if (Array.prototype.keys && Array.prototype.entries && !Array.prototype.values && Array.prototype[$iterator$]) {
20092    defineProperties(Array.prototype, {
20093      values: Array.prototype[$iterator$]
20094    });
20095    if (Type.symbol(Symbol.unscopables)) {
20096      Array.prototype[Symbol.unscopables].values = true;
20097    }
20098  }
20099  // Chrome 40 defines Array#values with the incorrect name, although Array#{keys,entries} have the correct name
20100  if (functionsHaveNames && Array.prototype.values && Array.prototype.values.name !== 'values') {
20101    var originalArrayPrototypeValues = Array.prototype.values;
20102    overrideNative(Array.prototype, 'values', function values() { return ES.Call(originalArrayPrototypeValues, this, arguments); });
20103    defineProperty(Array.prototype, $iterator$, Array.prototype.values, true);
20104  }
20105  defineProperties(Array.prototype, ArrayPrototypeShims);
20106
20107  if (1 / [true].indexOf(true, -0) < 0) {
20108    // indexOf when given a position arg of -0 should return +0.
20109    // https://github.com/tc39/ecma262/pull/316
20110    defineProperty(Array.prototype, 'indexOf', function indexOf(searchElement) {
20111      var value = _arrayIndexOfApply(this, arguments);
20112      if (value === 0 && (1 / value) < 0) {
20113        return 0;
20114      }
20115      return value;
20116    }, true);
20117  }
20118
20119  addIterator(Array.prototype, function () { return this.values(); });
20120  // Chrome defines keys/values/entries on Array, but doesn't give us
20121  // any way to identify its iterator.  So add our own shimmed field.
20122  if (Object.getPrototypeOf) {
20123    var ChromeArrayIterator = Object.getPrototypeOf([].values());
20124    if (ChromeArrayIterator) { // in WSH, this is `undefined`
20125      addIterator(ChromeArrayIterator);
20126    }
20127  }
20128
20129  // note: this is positioned here because it relies on Array#entries
20130  var arrayFromSwallowsNegativeLengths = (function () {
20131    // Detects a Firefox bug in v32
20132    // https://bugzilla.mozilla.org/show_bug.cgi?id=1063993
20133    return valueOrFalseIfThrows(function () {
20134      return Array.from({ length: -1 }).length === 0;
20135    });
20136  }());
20137  var arrayFromHandlesIterables = (function () {
20138    // Detects a bug in Webkit nightly r181886
20139    var arr = Array.from([0].entries());
20140    return arr.length === 1 && isArray(arr[0]) && arr[0][0] === 0 && arr[0][1] === 0;
20141  }());
20142  if (!arrayFromSwallowsNegativeLengths || !arrayFromHandlesIterables) {
20143    overrideNative(Array, 'from', ArrayShims.from);
20144  }
20145  var arrayFromHandlesUndefinedMapFunction = (function () {
20146    // Microsoft Edge v0.11 throws if the mapFn argument is *provided* but undefined,
20147    // but the spec doesn't care if it's provided or not - undefined doesn't throw.
20148    return valueOrFalseIfThrows(function () {
20149      return Array.from([0], void 0);
20150    });
20151  }());
20152  if (!arrayFromHandlesUndefinedMapFunction) {
20153    var origArrayFrom = Array.from;
20154    overrideNative(Array, 'from', function from(items) {
20155      if (arguments.length > 1 && typeof arguments[1] !== 'undefined') {
20156        return ES.Call(origArrayFrom, this, arguments);
20157      }
20158      return _call(origArrayFrom, this, items);
20159
20160    });
20161  }
20162
20163  var int32sAsOne = -(Math.pow(2, 32) - 1);
20164  var toLengthsCorrectly = function (method, reversed) {
20165    var obj = { length: int32sAsOne };
20166    obj[reversed ? (obj.length >>> 0) - 1 : 0] = true;
20167    return valueOrFalseIfThrows(function () {
20168      _call(method, obj, function () {
20169        // note: in nonconforming browsers, this will be called
20170        // -1 >>> 0 times, which is 4294967295, so the throw matters.
20171        throw new RangeError('should not reach here');
20172      }, []);
20173      return true;
20174    });
20175  };
20176  if (!toLengthsCorrectly(Array.prototype.forEach)) {
20177    var originalForEach = Array.prototype.forEach;
20178    overrideNative(Array.prototype, 'forEach', function forEach(callbackFn) {
20179      return ES.Call(originalForEach, this.length >
20179= 0 ? this : [], arguments);
20180    });
20181  }
20182  if (!toLengthsCorrectly(Array.prototype.map)) {
20183    var originalMap = Array.prototype.map;
20184    overrideNative(Array.prototype, 'map', function map(callbackFn) {
20185      return ES.Call(originalMap, this.length >= 0 ? this : [], arguments);
20186    });
20187  }
20188  if (!toLengthsCorrectly(Array.prototype.filter)) {
20189    var originalFilter = Array.prototype.filter;
20190    overrideNative(Array.prototype, 'filter', function filter(callbackFn) {
20191      return ES.Call(originalFilter, this.length >= 0 ? this : [], arguments);
20192    });
20193  }
20194  if (!toLengthsCorrectly(Array.prototype.some)) {
20195    var originalSome = Array.prototype.some;
20196    overrideNative(Array.prototype, 'some', function some(callbackFn) {
20197      return ES.Call(originalSome, this.length >= 0 ? this : [], arguments);
20198    });
20199  }
20200  if (!toLengthsCorrectly(Array.prototype.every)) {
20201    var originalEvery = Array.prototype.every;
20202    overrideNative(Array.prototype, 'every', function every(callbackFn) {
20203      return ES.Call(originalEvery, this.length >= 0 ? this : [], arguments);
20204    });
20205  }
20206  if (!toLengthsCorrectly(Array.prototype.reduce)) {
20207    var originalReduce = Array.prototype.reduce;
20208    overrideNative(Array.prototype, 'reduce', function reduce(callbackFn) {
20209      return ES.Call(originalReduce, this.length >= 0 ? this : [], arguments);
20210    });
20211  }
20212  if (!toLengthsCorrectly(Array.prototype.reduceRight, true)) {
20213    var originalReduceRight = Array.prototype.reduceRight;
20214    overrideNative(Array.prototype, 'reduceRight', function reduceRight(callbackFn) {
20215      return ES.Call(originalReduceRight, this.length >= 0 ? this : [], arguments);
20216    });
20217  }
20218
20219  var lacksOctalSupport = Number('0o10') !== 8;
20220  var lacksBinarySupport = Number('0b10') !== 2;
20221  var trimsNonWhitespace = _some(nonWS, function (c) {
20222    return Number(c + 0 + c) === 0;
20223  });
20224  if (lacksOctalSupport || lacksBinarySupport || trimsNonWhitespace) {
20225    var OrigNumber = Number;
20226    var binaryRegex = /^0b[01]+$/i;
20227    var octalRegex = /^0o[0-7]+$/i;
20228    // Note that in IE 8, RegExp.prototype.test doesn't seem to exist: ie, "test" is an own property of regexes. wtf.
20229    var isBinary = binaryRegex.test.bind(binaryRegex);
20230    var isOctal = octalRegex.test.bind(octalRegex);
20231    var toPrimitive = function (O, hint) { // need to replace this with `es-to-primitive/es6`
20232      var result;
20233      if (typeof O.valueOf === 'function') {
20234        result = O.valueOf();
20235        if (Type.primitive(result)) {
20236          return result;
20237        }
20238      }
20239      if (typeof O.toString === 'function') {
20240        result = O.toString();
20241        if (Type.primitive(result)) {
20242          return result;
20243        }
20244      }
20245      throw new TypeError('No default value');
20246    };
20247    var hasNonWS = nonWSregex.test.bind(nonWSregex);
20248    var isBadHex = isBadHexRegex.test.bind(isBadHexRegex);
20249    var NumberShim = (function () {
20250      // this is wrapped in an IIFE because of IE 6-8's wacky scoping issues with named function expressions.
20251      var NumberShim = function Number(value) {
20252        var primValue;
20253        if (arguments.length > 0) {
20254          primValue = Type.primitive(value) ? value : toPrimitive(value, 'number');
20255        } else {
20256          primValue = 0;
20257        }
20258        if (typeof primValue === 'string') {
20259          primValue = ES.Call(trimShim, primValue);
20260          if (isBinary(primValue)) {
20261            primValue = parseInt(_strSlice(primValue, 2), 2);
20262          } else if (isOctal(primValue)) {
20263            primValue = parseInt(_strSlice(primValue, 2), 8);
20264          } else if (hasNonWS(primValue) || isBadHex(primValue)) {
20265            primValue = NaN;
20266          }
20267        }
20268        var receiver = this;
20269        var valueOfSucceeds = valueOrFalseIfThrows(function () {
20270          OrigNumber.prototype.valueOf.call(receiver);
20271          return true;
20272        });
20273        if (receiver instanceof NumberShim && !valueOfSucceeds) {
20274          return new OrigNumber(primValue);
20275        }
20276        return OrigNumber(primValue);
20277      };
20278      return NumberShim;
20279    }());
20280    wrapConstructor(OrigNumber, NumberShim, {});
20281    // this is necessary for ES3 browsers, where these properties are non-enumerable.
20282    defineProperties(NumberShim, {
20283      NaN: OrigNumber.NaN,
20284      MAX_VALUE: OrigNumber.MAX_VALUE,
20285      MIN_VALUE: OrigNumber.MIN_VALUE,
20286      NEGATIVE_INFINITY: OrigNumber.NEGATIVE_INFINITY,
20287      POSITIVE_INFINITY: OrigNumber.POSITIVE_INFINITY
20288    });
20289    Number = NumberShim; // eslint-disable-line no-global-assign
20290    Value.redefine(globals, 'Number', NumberShim);
20291  }
20292
20293  var maxSafeInteger = Math.pow(2, 53) - 1;
20294  defineProperties(Number, {
20295    MAX_SAFE_INTEGER: maxSafeInteger,
20296    MIN_SAFE_INTEGER: -maxSafeInteger,
20297    EPSILON: 2.220446049250313e-16,
20298
20299    parseInt: globals.parseInt,
20300    parseFloat: globals.parseFloat,
20301
20302    isFinite: numberIsFinite,
20303
20304    isInteger: function isInteger(value) {
20305      return numberIsFinite(value) && ES.ToInteger(value) === value;
20306    },
20307
20308    isSafeInteger: function isSafeInteger(value) {
20309      return Number.isInteger(value) && _abs(value) <= Number.MAX_SAFE_INTEGER;
20310    },
20311
20312    isNaN: numberIsNaN
20313  });
20314  // Firefox 37 has a conforming Number.parseInt, but it's not === to the global parseInt (fixed in v40)
20315  defineProperty(Number, 'parseInt', globals.parseInt, Number.parseInt !== globals.parseInt);
20316
20317  // Work around bugs in Array#find and Array#findIndex -- early
20318  // implementations skipped holes in sparse arrays. (Note that the
20319  // implementations of find/findIndex indirectly use shimmed
20320  // methods of Number, so this test has to happen down here.)
20321  /* eslint-disable no-sparse-arrays */
20322  if ([, 1].find(function () { return true; }) === 1) {
20323    overrideNative(Array.prototype, 'find', ArrayPrototypeShims.find);
20324  }
20325  if ([, 1].findIndex(function () { return true; }) !== 0) {
20326    overrideNative(Array.prototype, 'findIndex', ArrayPrototypeShims.findIndex);
20327  }
20328  /* eslint-enable no-sparse-arrays */
20329
20330  var isEnumerableOn = Function.bind.call(Function.bind, Object.prototype.propertyIsEnumerable);
20331  var ensureEnumerable = function ensureEnumerable(obj, prop) {
20332    if (supportsDescriptors && isEnumerableOn(obj, prop)) {
20333      Object.defineProperty(obj, prop, { enumerable: false });
20334    }
20335  };
20336  var sliceArgs = function sliceArgs() {
20337    // per https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
20338    // and https://gist.github.com/WebReflection/4327762cb87a8c634a29
20339    var initial = Number(this);
20340    var len = arguments.length;
20341    var desiredArgCount = len - initial;
20342    var args = new Array(desiredArgCount < 0 ? 0 : desiredArgCount);
20343    for (var i = initial; i < len; ++i) {
20344      args[i - initial] = arguments[i];
20345    }
20346    return args;
20347  };
20348  var assignTo = function assignTo(source) {
20349    return function assignToSource(target, key) {
20350      target[key] = source[key];
20351      return target;
20352    };
20353  };
20354  var assignReducer = function (target, source) {
20355    var sourceKeys = keys(Object(source));
20356    var symbols;
20357    if (ES.IsCallable(Object.getOwnPropertySymbols)) {
20358      symbols = _filter(Object.getOwnPropertySymbols(Object(source)), isEnumerableOn(source));
20359    }
20360    return _reduce(_concat(sourceKeys, symbols || []), assignTo(source), target);
20361  };
20362
20363  var ObjectShims = {
20364    // 19.1.3.1
20365    assign: function (target, source) {
20366      var to = ES.ToObject(target, 'Cannot convert undefined or null to object');
20367      return _reduce(ES.Call(sliceArgs, 1, arguments), assignReducer, to);
20368    },
20369
20370    // Added in WebKit in https://bugs.webkit.org/show_bug.cgi?id=143865
20371    is: function is(a, b) {
20372      return ES.SameValue(a, b);
20373    }
20374  };
20375  var assignHasPendingExceptions = Object.assign && Object.preventExtensions && (function () {
20376    // Firefox 37 still has "pending exception" logic in its Object.assign implementation,
20377    // which is 72% slower than our shim, and Firefox 40's native implementation.
20378    var thrower = Object.preventExtensions({ 1: 2 });
20379    try {
20380      Object.assign(thrower, 'xy');
20381    } catch (e) {
20382      return thrower[1] === 'y';
20383    }
20384  }());
20385  if (assignHasPendingExceptions) {
20386    overrideNative(Object, 'assign', ObjectShims.assign);
20387  }
20388  defineProperties(Object, ObjectShims);
20389
20390  if (supportsDescriptors) {
20391    var ES5ObjectShims = {
20392      // 19.1.3.9
20393      // shim from https://gist.github.com/WebReflection/5593554
20394      setPrototypeOf: (function (Object) {
20395        var set;
20396
20397        var checkArgs = function (O, proto) {
20398          if (!ES.TypeIsObject(O)) {
20399            throw new TypeError('cannot set prototype on a non-object');
20400          }
20401          if (!(proto === null || ES.TypeIsObject(proto))) {
20402            throw new TypeError('can only set prototype to an object or null' + proto);
20403          }
20404        };
20405
20406        var setPrototypeOf = function (O, proto) {
20407          checkArgs(O, proto);
20408          _call(set, O, proto);
20409          return O;
20410        };
20411
20412        try {
20413          // this works already in Firefox and Safari
20414          set = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
20415          _call(set, {}, null);
20416        } catch (e) {
20417          if (Object.prototype !== ({}).__proto__) { // eslint-disable-line no-proto
20418            // IE < 11 cannot be shimmed
20419            return;
20420          }
20421          // probably Chrome or some old Mobile stock browser
20422          set = function (proto) {
20423            this.__proto__ = proto; // eslint-disable-line no-proto
20424          };
20425          // please note that this will **not** work
20426          // in those browsers that do not inherit
20427          // __proto__ by mistake from Object.prototype
20428          // in these cases we should probably throw an error
20429          // or at least be informed about the issue
20430          setPrototypeOf.polyfill = setPrototypeOf(
20431            setPrototypeOf({}, null),
20432            Object.prototype
20433          ) instanceof Object;
20434          // setPrototypeOf.polyfill === true means it works as meant
20435          // setPrototypeOf.polyfill === false means it's not 100% reliable
20436          // setPrototypeOf.polyfill === undefined
20437          // or
20438          // setPrototypeOf.polyfill ==  null means it's not a polyfill
20439          // which means it works as expected
20440          // we can even delete Object.prototype.__proto__;
20441        }
20442        return setPrototypeOf;
20443      }(Object))
20444    };
20445
20446    defineProperties(Object, ES5ObjectShims);
20447  }
20448
20449  // Workaround bug in Opera 12 where setPrototypeOf(x, null) doesn't work,
20450  // but Object.create(null) does.
20451  if (
20452    Object.setPrototypeOf
20453    && Object.getPrototypeOf
20454    && Object.getPrototypeOf(Object.setPrototypeOf({}, null)) !== null
20455    && Object.getPrototypeOf(Object.create(null)) === null
20456  ) {
20457    (function () {
20458      var FAKENULL = Object.create(null);
20459      var gpo = Object.getPrototypeOf;
20460      var spo = Object.setPrototypeOf;
20461      Object.getPrototypeOf = function (o) {
20462        var result = gpo(o);
20463        return result === FAKENULL ? null : result;
20464      };
20465      Object.setPrototypeOf = function (o, p) {
20466        var proto = p === null ? FAKENULL : p;
20467        return spo(o, proto);
20468      };
20469      Object.setPrototypeOf.polyfill = false;
20470    }());
20471  }
20472
20473  var objectKeysAcceptsPrimitives = !throwsError(function () { return Object.keys('foo'); });
20474  if (!objectKeysAcceptsPrimitives) {
20475    var originalObjectKeys = Object.keys;
20476    overrideNative(Object, 'keys', function keys(value) {
20477      return originalObjectKeys(ES.ToObject(value));
20478    });
20479    keys = Object.keys;
20480  }
20481  var objectKeysRejectsRegex = throwsError(function () { return Object.keys(/a/g); });
20482  if (objectKeysRejectsRegex) {
20483    var regexRejectingObjectKeys = Object.keys;
20484    overrideNative(Object, 'keys', function keys(value) {
20485      if (Type.regex(value)) {
20486        var regexKeys = [];
20487        for (var k in value) {
20488          if (_hasOwnProperty(value, k)) {
20489            _push(regexKeys, k);
20490          }
20491        }
20492        return regexKeys;
20493      }
20494      return regexRejectingObjectKeys(value);
20495    });
20496    keys = Object.keys;
20497  }
20498
20499  if (Object.getOwnPropertyNames) {
20500    var objectGOPNAcceptsPrimitives = !throwsError(function () { return Object.getOwnPropertyNames('foo'); });
20501    if (!objectGOPNAcceptsPrimitives) {
20502      var cachedWindowNames = typeof window === 'object' ? Object.getOwnPropertyNames(window) : [];
20503      var originalObjectGetOwnPropertyNames = Object.getOwnPropertyNames;
20504      overrideNative(Object, 'getOwnPropertyNames', function getOwnPropertyNames(value) {
20505        var val = ES.ToObject(value);
20506        if (_toString(val) === '[object Window]') {
20507          try {
20508            return originalObjectGetOwnPropertyNames(val);
20509          } catch (e) {
20510            // IE bug where layout engine calls userland gOPN for cross-domain `window` objects
20511            return _concat([], cachedWindowNames);
20512          }
20513        }
20514        return originalObjectGetOwnPropertyNames(val);
20515      });
20516    }
20517  }
20518  if (Object.getOwnPropertyDescriptor) {
20519    var objectGOPDAcceptsPrimitives = !throwsError(function () { return Object.getOwnPropertyDescriptor('foo', 'bar'); });
20520    if (!objectGOPDAcceptsPrimitives) {
20521      var originalObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
20522      overrideNative(Object, 'getOwnPropertyDescriptor', function getOwnPropertyDescriptor(value, property) {
20523        return originalObjectGetOwnPropertyDescriptor(ES.ToObject(value), property);
20524      });
20525    }
20526  }
20527  if (Object.seal) {
20528    var objectSealAcceptsPrimitives = !throwsError(function () { return Object.seal('foo'); });
20529    if (!objectSealAcceptsPrimitives) {
20530      var originalObjectSeal = Object.seal;
20531      overrideNative(Object, 'seal', function seal(value) {
20532        if (!ES.TypeIsObject(value)) { return value; }
20533        return originalObjectSeal(value);
20534      });
20535    }
20536  }
20537  if (Object.isSealed) {
20538    var objectIsSealedAcceptsPrimitives = !throwsError(function () { return Object.isSealed('foo'); });
20539    if (!objectIsSealedAcceptsPrimitives) {
20540      var originalObjectIsSealed = Object.isSealed;
20541      overrideNative(Object, 'isSealed', function isSealed(value) {
20542        if (!ES.TypeIsObject(value)) { return true; }
20543        return originalObjectIsSealed(value);
20544      });
20545    }
20546  }
20547  if (Object.freeze) {
20548    var objectFreezeAcceptsPrimitives = !throwsError(function () { return Object.freeze('foo'); });
20549    if (!objectFreezeAcceptsPrimitives) {
20550      var originalObjectFreeze = Object.freeze;
20551      overrideNative(Object, 'freeze', function freeze(value) {
20552        if (!ES.TypeIsObject(value)) { return value; }
20553        return originalObjectFreeze(value);
20554      });
20555    }
20556  }
20557  if (Object.isFrozen) {
20558    var objectIsFrozenAcceptsPrimitives = !throwsError(function () { return Object.isFrozen('foo'); });
20559    if (!objectIsFrozenAcceptsPrimitives) {
20560      var originalObjectIsFrozen = Object.isFrozen;
20561      overrideNative(Object, 'isFrozen', function isFrozen(value) {
20562        if (!ES.TypeIsObject(value)) { return true; }
20563        return originalObjectIsFrozen(value);
20564      });
20565    }
20566  }
20567  if (Object.preventExtensions) {
20568    var objectPreventExtensionsAcceptsPrimitives = !throwsError(function () { return Object.preventExtensions('foo'); });
20569    if (!objectPreventExtensionsAcceptsPrimitives) {
20570      var originalObjectPreventExtensions = Object.preventExtensions;
20571      overrideNative(Object, 'preventExtensions', function preventExtensions(value) {
20572        if (!ES.TypeIsObject(value)) { return value; }
20573        return originalObjectPreventExtensions(value);
20574      });
20575    }
20576  }
20577  if (Object.isExtensible) {
20578    var objectIsExtensibleAcceptsPrimitives = !throwsError(function () { return Object.isExtensible('foo'); });
20579    if (!objectIsExtensibleAcceptsPrimitives) {
20580      var originalObjectIsExtensible = Object.isExtensible;
20581      overrideNative(Object, 'isExtensible', function isExtensible(value) {
20582        if (!ES.TypeIsObject(value)) { return false; }
20583        return originalObjectIsExtensible(value);
20584      });
20585    }
20586  }
20587  if (Object.getPrototypeOf) {
20588    var objectGetProtoAcceptsPrimitives = !throwsError(function () { return Object.getPrototypeOf('foo'); });
20589    if (!objectGetProtoAcceptsPrimitives) {
20590      var originalGetProto = Object.getPrototypeOf;
20591      overrideNative(Object, 'getPrototypeOf', function getPrototypeOf(value) {
20592        return originalGetProto(ES.ToObject(value));
20593      });
20594    }
20595  }
20596
20597  var hasFlags = supportsDescriptors && (function () {
20598    var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags');
20599    return desc && ES.IsCallable(desc.get);
20600  }());
20601  if (supportsDescriptors && !hasFlags) {
20602    var regExpFlagsGetter = function flags() {
20603      if (!ES.TypeIsObject(this)) {
20604        throw new TypeError('Method called on incompatible type: must be an object.');
20605      }
20606      var result = '';
20607      if (this.global) {
20608        result += 'g';
20609      }
20610      if (this.ignoreCase) {
20611        result += 'i';
20612      }
20613      if (this.multiline) {
20614        result += 'm';
20615      }
20616      if (this.unicode) {
20617        result += 'u';
20618      }
20619      if (this.sticky) {
20620        result += 'y';
20621      }
20622      return result;
20623    };
20624
20625    Value.getter(RegExp.prototype, 'flags', regExpFlagsGetter);
20626  }
20627
20628  var regExpSupportsFlagsWithRegex = supportsDescriptors && valueOrFalseIfThrows(function () {
20629    return String(new RegExp(/a/g, 'i')) === '/a/i';
20630  });
20631  var regExpNeedsToSupportSymbolMatch = hasSymbols && supportsDescriptors && (function () {
20632    // Edge 0.12 supports flags fully, but does not support Symbol.match
20633    var regex = /./;
20634    regex[Symbol.match] = false;
20635    return RegExp(regex) === regex;
20636  }());
20637
20638  var regexToStringIsGeneric = valueOrFalseIfThrows(function () {
20639    return RegExp.prototype.toString.call({ source: 'abc' }) === '/abc/';
20640  });
20641  var regexToStringSupportsGenericFlags = regexToStringIsGeneric && valueOrFalseIfThrows(function () {
20642    return RegExp.prototype.toString.call({ source: 'a', flags: 'b' }) === '/a/b';
20643  });
20644  if (!regexToStringIsGeneric || !regexToStringSupportsGenericFlags) {
20645    var origRegExpToString = RegExp.prototype.toString;
20646    defineProperty(RegExp.prototype, 'toString', function toString() {
20647      var R = ES.RequireObjectCoercible(this);
20648      if (Type.regex(R)) {
20649        return _call(origRegExpToString, R);
20650      }
20651      var pattern = $String(R.source);
20652      var flags = $String(R.flags);
20653      return '/' + pattern + '/' + flags;
20654    }, true);
20655    Value.preserveToString(RegExp.prototype.toString, origRegExpToString);
20656    RegExp.prototype.toString.prototype = void 0;
20657  }
20658
20659  if (supportsDescriptors && (!regExpSupportsFlagsWithRegex || regExpNeedsToSupportSymbolMatch)) {
20660    var flagsGetter = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get;
20661    var sourceDesc = Object.getOwnPropertyDescriptor(RegExp.prototype, 'source') || {};
20662    var legacySourceGetter = function () {
20663      // prior to it being a getter, it's own + nonconfigurable
20664      return this.source;
20665    };
20666    var sourceGetter = ES.IsCallable(sourceDesc.get) ? sourceDesc.get : legacySourceGetter;
20667
20668    var OrigRegExp = RegExp;
20669    var RegExpShim = (function () {
20670      return function RegExp(pattern, flags) {
20671        var patternIsRegExp = ES.IsRegExp(pattern);
20672        var calledWithNew = this instanceof RegExp;
20673        if (!calledWithNew && patternIsRegExp && typeof flags === 'undefined' && pattern.constructor === RegExp) {
20674          return pattern;
20675        }
20676
20677        var P = pattern;
20678        var F = flags;
20679        if (Type.regex(pattern)) {
20680          P = ES.Call(sourceGetter, pattern);
20681          F = typeof flags === 'undefined' ? ES.Call(flagsGetter, pattern) : flags;
20682          return new RegExp(P, F);
20683        } else if (patternIsRegExp) {
20684          P = pattern.source;
20685          F = typeof flags === 'undefined' ? pattern.flags : flags;
20686        }
20687        return new OrigRegExp(pattern, flags);
20688      };
20689    }());
20690    wrapConstructor(OrigRegExp, RegExpShim, {
20691      $input: true // Chrome < v39 & Opera < 26 have a nonstandard "$input" property
20692    });
20693    RegExp = RegExpShim; // eslint-disable-line no-global-assign
20694    Value.redefine(globals, 'RegExp', RegExpShim);
20695  }
20696
20697  if (supportsDescriptors) {
20698    var regexGlobals = {
20699      input: '$_',
20700      lastMatch: '$&',
20701      lastParen: '$+',
20702      leftContext: '$`',
20703      rightContext: '$\''
20704    };
20705    _forEach(keys(regexGlobals), function (prop) {
20706      if (prop in RegExp && !(regexGlobals[prop] in RegExp)) {
20707        Value.getter(RegExp, regexGlobals[prop], function get() {
20708          return RegExp[prop];
20709        });
20710      }
20711    });
20712  }
20713  addDefaultSpecies(RegExp);
20714
20715  var inverseEpsilon = 1 / Number.EPSILON;
20716  var roundTiesToEven = function roundTiesToEven(n) {
20717    // Even though this reduces down to `return n`, it takes advantage of built-in rounding.
20718    return (n + inverseEpsilon) - inverseEpsilon;
20719  };
20720  var BINARY_32_EPSILON = Math.pow(2, -23);
20721  var BINARY_32_MAX_VALUE = Math.pow(2, 127) * (2 - BINARY_32_EPSILON);
20722  var BINARY_32_MIN_VALUE = Math.pow(2, -126);
20723  var E = Math.E;
20724  var LOG2E = Math.LOG2E;
20725  var LOG10E = Math.LOG10E;
20726  var numberCLZ = Number.prototype.clz;
20727  delete Number.prototype.clz; // Safari 8 has Number#clz
20728
20729  var MathShims = {
20730    acosh: function acosh(value) {
20731      var x = Number(value);
20732      if (numberIsNaN(x) || value < 1) { return NaN; }
20733      if (x === 1) { return 0; }
20734      if (x === Infinity) { return x; }
20735
20736      var xInvSquared = 1 / (x * x);
20737      if (x < 2) {
20738        return _log1p(x - 1 + (_sqrt(1 - xInvSquared) * x));
20739      }
20740      var halfX = x / 2;
20741      return _log1p(halfX + (_sqrt(1 - xInvSquared) * halfX) - 1) + (1 / LOG2E);
20742    },
20743
20744    asinh: function asinh(value) {
20745      var x = Number(value);
20746      if (x === 0 || !globalIsFinite(x)) {
20747        return x;
20748      }
20749
20750      var a = _abs(x);
20751      var aSquared = a * a;
20752      var s = _sign(x);
20753      if (a < 1) {
20754        return s * _log1p(a + (aSquared / (_sqrt(aSquared + 1) + 1)));
20755      }
20756      return s * (_log1p((a / 2) + (_sqrt(1 + (1 / aSquared)) * a / 2) - 1) + (1 / LOG2E));
20757    },
20758
20759    atanh: function atanh(value) {
20760      var x = Number(value);
20761
20762      if (x === 0) { return x; }
20763      if (x === -1) { return -Infinity; }
20764      if (x === 1) { return Infinity; }
20765      if (numberIsNaN(x) || x < -1 || x > 1) {
20766        return NaN;
20767      }
20768
20769      var a = _abs(x);
20770      return _sign(x) * _log1p(2 * a / (1 - a)) / 2;
20771    },
20772
20773    cbrt: function cbrt(value) {
20774      var x = Number(value);
20775      if (x === 0) { return x; }
20776      var negate = x < 0;
20777      var result;
20778      if (negate) { x = -x; }
20779      if (x === Infinity) {
20780        result = Infinity;
20781      } else {
20782        result = _exp(_log(x) / 3);
20783        // from http://en.wikipedia.org/wiki/Cube_root#Numerical_methods
20784        result = ((x / (result * result)) + (2 * result)) / 3;
20785      }
20786      return negate ? -result : result;
20787    },
20788
20789    clz32: function clz32(value) {
20790      // See https://bugs.ecmascript.org/show_bug.cgi?id=2465
20791      var x = Number(value);
20792      var number = ES.ToUint32(x);
20793      if (number === 0) {
20794        return 32;
20795      }
20796      return numberCLZ ? ES.Call(numberCLZ, number) : 31 - _floor(_log(number + 0.5) * LOG2E);
20797    },
20798
20799    cosh: function cosh(value) {
20800      var x = Number(value);
20801      if (x === 0) { return 1; } // +0 or -0
20802      if (numberIsNaN(x)) { return NaN; }
20803      if (!globalIsFinite(x)) { return Infinity; }
20804
20805      var t = _exp(_abs(x) - 1);
20806      return (t + (1 / (t * E * E))) * (E / 2);
20807    },
20808
20809    expm1: function expm1(value) {
20810      var x = Number(value);
20811      if (x === -Infinity) { return -1; }
20812      if (!globalIsFinite(x) || x === 0) { return x; }
20813      if (_abs(x) > 0.5) {
20814        return _exp(x) - 1;
20815      }
20816      // A more precise approximation using Taylor series expansion
20817      // from https://github.com/paulmillr/es6-shim/issues/314#issuecomment-70293986
20818      var t = x;
20819      var sum = 0;
20820      var n = 1;
20821      while (sum + t !== sum) {
20822        sum += t;
20823        n += 1;
20824        t *= x / n;
20825      }
20826      return sum;
20827    },
20828
20829    hypot: function hypot(x, y) {
20830      var result = 0;
20831      var largest = 0;
20832      for (var i = 0; i < arguments.length; ++i) {
20833        var value = _abs(Number(arguments[i]));
20834        if (largest < value) {
20835          result *= (largest / value) * (largest / value);
20836          result += 1;
20837          largest = value;
20838        } else {
20839          result += value > 0 ? (value / largest) * (value / largest) : value;
20840        }
20841      }
20842      return largest === Infinity ? Infinity : largest * _sqrt(result);
20843    },
20844
20845    log2: function log2(value) {
20846      return _log(value) * LOG2E;
20847    },
20848
20849    log10: function log10(value) {
20850      return _log(value) * LOG10E;
20851    },
20852
20853    log1p: _log1p,
20854
20855    sign: _sign,
20856
20857    sinh: function sinh(value) {
20858      var x = Number(value);
20859      if (!globalIsFinite(x) || x === 0) { return x; }
20860
20861      var a = _abs(x);
20862      if (a < 1) {
20863        var u = Math.expm1(a);
20864        return _sign(x) * u * (1 + (1 / (u + 1))) / 2;
20865      }
20866      var t = _exp(a - 1);
20867      return _sign(x) * (t - (1 / (t * E * E))) * (E / 2);
20868    },
20869
20870    tanh: function tanh(value) {
20871      var x = Number(value);
20872      if (numberIsNaN(x) || x === 0) { return x; }
20873      // can exit early at +-20 as JS loses precision for true value at this integer
20874      if (x >= 20) { return 1; }
20875      if (x <= -20) { return -1; }
20876
20877      return (Math.expm1(x) - Math.expm1(-x)) / (_exp(x) + _exp(-x));
20878    },
20879
20880    trunc: function trunc(value) {
20881      var x = Number(value);
20882      return x < 0 ? -_floor(-x) : _floor(x);
20883    },
20884
20885    imul: function imul(x, y) {
20886      // taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul
20887      var a = ES.ToUint32(x);
20888      var b = ES.ToUint32(y);
20889      var ah = (a >>> 16) & 0xffff;
20890      var al = a & 0xffff;
20891      var bh = (b >>> 16) & 0xffff;
20892      var bl = b & 0xffff;
20893      // the shift by 0 fixes the sign on the high part
20894      // the final |0 converts the unsigned value into a signed value
20895      return (al * bl) + ((((ah * bl) + (al * bh)) << 16) >>> 0) | 0;
20896    },
20897
20898    fround: function fround(x) {
20899      var v = Number(x);
20900      if (v === 0 || v === Infinity || v === -Infinity || numberIsNaN(v)) {
20901        return v;
20902      }
20903      var sign = _sign(v);
20904      var abs = _abs(v);
20905      if (abs < BINARY_32_MIN_VALUE) {
20906        return sign * roundTiesToEven(abs / BINARY_32_MIN_VALUE / BINARY_32_EPSILON) * BINARY_32_MIN_VALUE * BINARY_32_EPSILON;
20907      }
20908      // Veltkamp's splitting (?)
20909      var a = (1 + (BINARY_32_EPSILON / Number.EPSILON)) * abs;
20910      var result = a - (a - abs);
20911      if (result > BINARY_32_MAX_VALUE || numberIsNaN(result)) {
20912        return sign * Infinity;
20913      }
20914      return sign * result;
20915    }
20916  };
20917
20918  var withinULPDistance = function withinULPDistance(result, expected, distance) {
20919    return _abs(1 - (result / expected)) / Number.EPSILON < (distance || 8);
20920  };
20921
20922  defineProperties(Math, MathShims);
20923  // Chrome < 40 sinh returns ∞ for large numbers
20924  defineProperty(Math, 'sinh', MathShims.sinh, Math.sinh(710) === Infinity);
20925  // Chrome < 40 cosh returns ∞ for large numbers
20926  defineProperty(Math, 'cosh', MathShims.cosh, Math.cosh(710) === Infinity);
20927  // IE 11 TP has an imprecise log1p: reports Math.log1p(-1e-17) as 0
20928  defineProperty(Math, 'log1p', MathShims.log1p, Math.log1p(-1e-17) !== -1e-17);
20929  // IE 11 TP has an imprecise asinh: reports Math.asinh(-1e7) as not exactly equal to -Math.asinh(1e7)
20930  defineProperty(Math, 'asinh', MathShims.asinh, Math.asinh(-1e7) !== -Math.asinh(1e7));
20931  // Chrome < 54 asinh returns ∞ for large numbers and should not
20932  defineProperty(Math, 'asinh', MathShims.asinh, Math.asinh(1e+300) === Infinity);
20933  // Chrome < 54 atanh incorrectly returns 0 for large numbers
20934  defineProperty(Math, 'atanh', MathShims.atanh, Math.atanh(1e-300) === 0);
20935  // Chrome 40 has an imprecise Math.tanh with very small numbers
20936  defineProperty(Math, 'tanh', MathShims.tanh, Math.tanh(-2e-17) !== -2e-17);
20937  // Chrome 40 loses Math.acosh precision with high numbers
20938  defineProperty(Math, 'acosh', MathShims.acosh, Math.acosh(Number.MAX_VALUE) === Infinity);
20939  // Chrome < 54 has an inaccurate acosh for EPSILON deltas
20940  defineProperty(Math, 'acosh', MathShims.acosh, !withinULPDistance(Math.acosh(1 + Number.EPSILON), Math.sqrt(2 * Number.EPSILON)));
20941  // Firefox 38 on Windows
20942  defineProperty(Math, 'cbrt', MathShims.cbrt, !withinULPDistance(Math.cbrt(1e-300), 1e-100));
20943  // node 0.11 has an imprecise Math.sinh with very small numbers
20944  defineProperty(Math, 'sinh', MathShims.sinh, Math.sinh(-2e-17) !== -2e-17);
20945  // FF 35 on Linux reports 22025.465794806725 for Math.expm1(10)
20946  var expm1OfTen = Math.expm1(10);
20947  defineProperty(Math, 'expm1', MathShims.expm1, expm1OfTen > 22025.465794806719 || expm1OfTen < 22025.4657948067165168);
20948  // node v12.11 - v12.15 report NaN
20949  defineProperty(Math, 'hypot', MathShims.hypot, Math.hypot(Infinity, NaN) !== Infinity);
20950
20951  var origMathRound = Math.round;
20952  // breaks in e.g. Safari 8, Internet Explorer 11, Opera 12
20953  var roundHandlesBoundaryConditions = Math.round(0.5 - (Number.EPSILON / 4)) === 0
20954    && Math.round(-0.5 + (Number.EPSILON / 3.99)) === 1;
20955
20956  // When engines use Math.floor(x + 0.5) internally, Math.round can be buggy for large integers.
20957  // This behavior should be governed by "round to nearest, ties to even mode"
20958  // see http://www.ecma-international.org/ecma-262/6.0/#sec-terms-and-definitions-number-type
20959  // These are the boundary cases where it breaks.
20960  var smallestPositiveNumberWhereRoundBreaks = inverseEpsilon + 1;
20961  var largestPositiveNumberWhereRoundBreaks = (2 * inverseEpsilon) - 1;
20962  var roundDoesNotIncreaseIntegers = [
20963    smallestPositiveNumberWhereRoundBreaks,
20964    largestPositiveNumberWhereRoundBreaks
20965  ].every(function (num) {
20966    return Math.round(num) === num;
20967  });
20968  defineProperty(Math, 'round', function round(x) {
20969    var floor = _floor(x);
20970    var ceil = floor === -1 ? -0 : floor + 1;
20971    return x - floor < 0.5 ? floor : ceil;
20972  }, !roundHandlesBoundaryConditions || !roundDoesNotIncreaseIntegers);
20973  Value.preserveToString(Math.round, origMathRound);
20974
20975  var origImul = Math.imul;
20976  if (Math.imul(0xffffffff, 5) !== -5) {
20977    // Safari 6.1, at least, reports "0" for this value
20978    Math.imul = MathShims.imul;
20979    Value.preserveToString(Math.imul, origImul);
20980  }
20981  if (Math.imul.length !== 2) {
20982    // Safari 8.0.4 has a length of 1
20983    // fixed in https://bugs.webkit.org/show_bug.cgi?id=143658
20984    overrideNative(Math, 'imul', function imul(x, y) {
20985      return ES.Call(origImul, Math, arguments);
20986    });
20987  }
20988
20989  // Promises
20990  // Simplest possible implementation; use a 3rd-party library if you
20991  // want the best possible speed and/or long stack traces.
20992  var PromiseShim = (function () {
20993    var setTimeout = globals.setTimeout;
20994    // some environments don't have setTimeout - no way to shim here.
20995    if (typeof setTimeout !== 'function' && typeof setTimeout !== 'object') { return; }
20996
20997    ES.IsPromise = function (promise) {
20998      if (!ES.TypeIsObject(promise)) {
20999        return false;
21000      }
21001      if (typeof promise._promise === 'undefined') {
21002        return false; // uninitialized, or missing our hidden field.
21003      }
21004      return true;
21005    };
21006
21007    // "PromiseCapability" in the spec is what most promise implementations
21008    // call a "deferred".
21009    var PromiseCapability = function (C) {
21010      if (!ES.IsConstructor(C)) {
21011        throw new TypeError('Bad promise constructor');
21012      }
21013      var capability = this;
21014      var resolver = function (resolve, reject) {
21015        if (capability.resolve !== void 0 || capability.reject !== void 0) {
21016          throw new TypeError('Bad Promise implementation!');
21017        }
21018        capability.resolve = resolve;
21019        capability.reject = reject;
21020      };
21021      // Initialize fields to inform optimizers about the object shape.
21022      capability.resolve = void 0;
21023      capability.reject = void 0;
21024      capability.promise = new C(resolver);
21025      if (!(ES.IsCallable(capability.resolve) && ES.IsCallable(capability.reject))) {
21026        throw new TypeError('Bad promise constructor');
21027      }
21028    };
21029
21030    // find an appropriate setImmediate-alike
21031    var makeZeroTimeout;
21032    if (typeof window !== 'undefined' && ES.IsCallable(window.postMessage)) {
21033      makeZeroTimeout = function () {
21034        // from http://dbaron.org/log/20100309-faster-timeouts
21035        var timeouts = [];
21036        var messageName = 'zero-timeout-message';
21037        var setZeroTimeout = function (fn) {
21038          _push(timeouts, fn);
21039          window.postMessage(messageName, '*');
21040        };
21041        var handleMessage = function (event) {
21042          if (event.source === window && event.data === messageName) {
21043            event.stopPropagation();
21044            if (timeouts.length === 0) { return; }
21045            var fn = _shift(timeouts);
21046            fn();
21047          }
21048        };
21049        window.addEventListener('message', handleMessage, true);
21050        return setZeroTimeout;
21051      };
21052    }
21053    var makePromiseAsap = function () {
21054      // An efficient task-scheduler based on a pre-existing Promise
21055      // implementation, which we can use even if we override the
21056      // global Promise below (in order to workaround bugs)
21057      // https://github.com/Raynos/observ-hash/issues/2#issuecomment-35857671
21058      var P = globals.Promise;
21059      var pr = P && P.resolve && P.resolve();
21060      return pr && function (task) {
21061        return pr.then(task);
21062      };
21063    };
21064    var enqueue = ES.IsCallable(globals.setImmediate)
21065      ? globals.setImmediate
21066      : (
21067        typeof process === 'object' && process.nextTick
21068          ? process.nextTick
21069          : makePromiseAsap() || (ES.IsCallable(makeZeroTimeout) ? makeZeroTimeout() : function (task) { setTimeout(task, 0); })
21070      ); // fallback
21071
21072    // Constants for Promise implementation
21073    var PROMISE_IDENTITY = function (x) { return x; };
21074    var PROMISE_THROWER = function (e) { throw e; };
21075    var PROMISE_PENDING = 0;
21076    var PROMISE_FULFILLED = 1;
21077    var PROMISE_REJECTED = 2;
21078    // We store fulfill/reject handlers and capabilities in a single array.
21079    var PROMISE_FULFILL_OFFSET = 0;
21080    var PROMISE_REJECT_OFFSET = 1;
21081    var PROMISE_CAPABILITY_OFFSET = 2;
21082    // This is used in an optimization for chaining promises via then.
21083    var PROMISE_FAKE_CAPABILITY = {};
21084
21085    var enqueuePromiseReactionJob = function (handler, capability, argument) {
21086      enqueue(function () {
21087        promiseReactionJob(handler, capability, argument);
21088      });
21089    };
21090
21091    var promiseReactionJob = function (handler, promiseCapability, argument) {
21092      var handlerResult, f;
21093      if (promiseCapability === PROMISE_FAKE_CAPABILITY) {
21094        // Fast case, when we don't actually need to chain through to a
21095        // (real) promiseCapability.
21096        return handler(argument);
21097      }
21098      try {
21099        handlerResult = handler(argument);
21100        f = promiseCapability.resolve;
21101      } catch (e) {
21102        handlerResult = e;
21103        f = promiseCapability.reject;
21104      }
21105      f(handlerResult);
21106    };
21107
21108    var fulfillPromise = function (promise, value) {
21109      var _promise = promise._promise;
21110      var length = _promise.reactionLength;
21111      if (length > 0) {
21112        enqueuePromiseReactionJob(
21113          _promise.fulfillReactionHandler0,
21114          _promise.reactionCapability0,
21115          value
21116        );
21117        _promise.fulfillReactionHandler0 = void 0;
21118        _promise.rejectReactions0 = void 0;
21119        _promise.reactionCapability0 = void 0;
21120        if (length > 1) {
21121          for (var i = 1, idx = 0; i < length; i++, idx += 3) {
21122            enqueuePromiseReactionJob(
21123              _promise[idx + PROMISE_FULFILL_OFFSET],
21124              _promise[idx + PROMISE_CAPABILITY_OFFSET],
21125              value
21126            );
21127            promise[idx + PROMISE_FULFILL_OFFSET] = void 0;
21128            promise[idx + PROMISE_REJECT_OFFSET] = void 0;
21129            promise[idx + PROMISE_CAPABILITY_OFFSET] = void 0;
21130          }
21131        }
21132      }
21133      _promise.result = value;
21134      _promise.state = PROMISE_FULFILLED;
21135      _promise.reactionLength = 0;
21136    };
21137
21138    var rejectPromise = function (promise, reason) {
21139      var _promise = promise._promise;
21140      var length = _promise.reactionLength;
21141      if (length > 0) {
21142        enqueuePromiseReactionJob(
21143          _promise.rejectReactionHandler0,
21144          _promise.reactionCapability0,
21145          reason
21146        );
21147        _promise.fulfillReactionHandler0 = void 0;
21148        _promise.rejectReactions0 = void 0;
21149        _promise.reactionCapability0 = void 0;
21150        if (length > 1) {
21151          for (var i = 1, idx = 0; i < length; i++, idx += 3) {
21152            enqueuePromiseReactionJob(
21153              _promise[idx + PROMISE_REJECT_OFFSET],
21154              _promise[idx + PROMISE_CAPABILITY_OFFSET],
21155              reason
21156            );
21157            promise[idx + PROMISE_FULFILL_OFFSET] = void 0;
21158            promise[idx + PROMISE_REJECT_OFFSET] = void 0;
21159            promise[idx + PROMISE_CAPABILITY_OFFSET] = void 0;
21160          }
21161        }
21162      }
21163      _promise.result = reason;
21164      _promise.state = PROMISE_REJECTED;
21165      _promise.reactionLength = 0;
21166    };
21167
21168    var createResolvingFunctions = function (promise) {
21169      var alreadyResolved = false;
21170      var resolve = function (resolution) {
21171        var then;
21172        if (alreadyResolved) { return; }
21173        alreadyResolved = true;
21174        if (resolution === promise) {
21175          return rejectPromise(promise, new TypeError('Self resolution'));
21176        }
21177        if (!ES.TypeIsObject(resolution)) {
21178          return fulfillPromise(promise, resolution);
21179        }
21180        try {
21181          then = resolution.then;
21182        } catch (e) {
21183          return rejectPromise(promise, e);
21184        }
21185        if (!ES.IsCallable(then)) {
21186          return fulfillPromise(promise, resolution);
21187        }
21188        enqueue(function () {
21189          promiseResolveThenableJob(promise, resolution, then);
21190        });
21191      };
21192      var reject = function (reason) {
21193        if (alreadyResolved) { return; }
21194        alreadyResolved = true;
21195        return rejectPromise(promise, reason);
21196      };
21197      return { resolve: resolve, reject: reject };
21198    };
21199
21200    var optimizedThen = function (then, thenable, resolve, reject) {
21201      // Optimization: since we discard the result, we can pass our
21202      // own then implementation a special hint to let it know it
21203      // doesn't have to create it.  (The PROMISE_FAKE_CAPABILITY
21204      // object is local to this implementation and unforgeable outside.)
21205      if (then === Promise$prototype$then) {
21206        _call(then, thenable, resolve, reject, PROMISE_FAKE_CAPABILITY);
21207      } else {
21208        _call(then, thenable, resolve, reject);
21209      }
21210    };
21211    var promiseResolveThenableJob = function (promise, thenable, then) {
21212      var resolvingFunctions = createResolvingFunctions(promise);
21213      var resolve = resolvingFunctions.resolve;
21214      var reject = resolvingFunctions.reject;
21215      try {
21216        optimizedThen(then, thenable, resolve, reject);
21217      } catch (e) {
21218        reject(e);
21219      }
21220    };
21221
21222    var Promise$prototype, Promise$prototype$then;
21223    var Promise = (function () {
21224      var PromiseShim = function Promise(resolver) {
21225        if (!(this instanceof PromiseShim)) {
21226          throw new TypeError('Constructor Promise requires "new"');
21227        }
21228        if (this && this._promise) {
21229          throw new TypeError('Bad construction');
21230        }
21231        // see https://bugs.ecmascript.org/show_bug.cgi?id=2482
21232        if (!ES.IsCallable(resolver)) {
21233          throw new TypeError('not a valid resolver');
21234        }
21235        var promise = emulateES6construct(this, PromiseShim, Promise$prototype, {
21236          _promise: {
21237            result: void 0,
21238            state: PROMISE_PENDING,
21239            // The first member of the "reactions" array is inlined here,
21240            // since most promises only have one reaction.
21241            // We've also exploded the 'reaction' object to inline the
21242            // "handler" and "capability" fields, since both fulfill and
21243            // reject reactions share the same capability.
21244            reactionLength: 0,
21245            fulfillReactionHandler0: void 0,
21246            rejectReactionHandler0: void 0,
21247            reactionCapability0: void 0
21248          }
21249        });
21250        var resolvingFunctions = createResolvingFunctions(promise);
21251        var reject = resolvingFunctions.reject;
21252        try {
21253          resolver(resolvingFunctions.resolve, reject);
21254        } catch (e) {
21255          reject(e);
21256        }
21257        return promise;
21258      };
21259      return PromiseShim;
21260    }());
21261    Promise$prototype = Promise.prototype;
21262
21263    var _promiseAllResolver = function (index, values, capability, remaining) {
21264      var alreadyCalled = false;
21265      return function (x) {
21266        if (alreadyCalled) { return; }
21267        alreadyCalled = true;
21268        values[index] = x;
21269        if ((--remaining.count) === 0) {
21270          var resolve = capability.resolve;
21271          resolve(values); // call w/ this===undefined
21272        }
21273      };
21274    };
21275
21276    var performPromiseAll = function (iteratorRecord, C, resultCapability) {
21277      var it = iteratorRecord.iterator;
21278      var values = [];
21279      var remaining = { count: 1 };
21280      var next, nextValue;
21281      var index = 0;
21282      while (true) {
21283        try {
21284          next = ES.IteratorStep(it);
21285          if (next === false) {
21286            iteratorRecord.done = true;
21287            break;
21288          }
21289          nextValue = next.value;
21290        } catch (e) {
21291          iteratorRecord.done = true;
21292          throw e;
21293        }
21294        values[index] = void 0;
21295        var nextPromise = C.resolve(nextValue);
21296        var resolveElement = _promiseAllResolver(
21297          index,
21298          values,
21299          resultCapability,
21300          remaining
21301        );
21302        remaining.count += 1;
21303        optimizedThen(nextPromise.then, nextPromise, resolveElement, resultCapability.reject);
21304        index += 1;
21305      }
21306      if ((--remaining.count) === 0) {
21307        var resolve = resultCapability.resolve;
21308        resolve(values); // call w/ this===undefined
21309      }
21310      return resultCapability.promise;
21311    };
21312
21313    var performPromiseRace = function (iteratorRecord, C, resultCapability) {
21314      var it = iteratorRecord.iterator;
21315      var next, nextValue, nextPromise;
21316      while (true) {
21317        try {
21318          next = ES.IteratorStep(it);
21319          if (next === false) {
21320            // NOTE: If iterable has no items, resulting promise will never
21321            // resolve; see:
21322            // https://github.com/domenic/promises-unwrapping/issues/75
21323            // https://bugs.ecmascript.org/show_bug.cgi?id=2515
21324            iteratorRecord.done = true;
21325            break;
21326          }
21327          nextValue = next.value;
21328        } catch (e) {
21329          iteratorRecord.done = true;
21330          throw e;
21331        }
21332        nextPromise = C.resolve(nextValue);
21333        optimizedThen(nextPromise.then, nextPromise, resultCapability.resolve, resultCapability.reject);
21334      }
21335      return resultCapability.promise;
21336    };
21337
21338    defineProperties(Promise, {
21339      all: function all(iterable) {
21340        var C = this;
21341        if (!ES.TypeIsObject(C)) {
21342          throw new TypeError('Promise is not object');
21343        }
21344        var capability = new PromiseCapability(C);
21345        var iterator, iteratorRecord;
21346        try {
21347          iterator = ES.GetIterator(iterable);
21348          iteratorRecord = { iterator: iterator, done: false };
21349          return performPromiseAll(iteratorRecord, C, capability);
21350        } catch (e) {
21351          var exception = e;
21352          if (iteratorRecord && !iteratorRecord.done) {
21353            try {
21354              ES.IteratorClose(iterator, true);
21355            } catch (ee) {
21356              exception = ee;
21357            }
21358          }
21359          var reject = capability.reject;
21360          reject(exception);
21361          return capability.promise;
21362        }
21363      },
21364
21365      race: function race(iterable) {
21366        var C = this;
21367        if (!ES.TypeIsObject(C)) {
21368          throw new TypeError('Promise is not object');
21369        }
21370        var capability = new PromiseCapability(C);
21371        var iterator, iteratorRecord;
21372        try {
21373          iterator = ES.GetIterator(iterable);
21374          iteratorRecord = { iterator: iterator, done: false };
21375          return performPromiseRace(iteratorRecord, C, capability);
21376        } catch (e) {
21377          var exception = e;
21378          if (iteratorRecord && !iteratorRecord.done) {
21379            try {
21380              ES.IteratorClose(iterator, true);
21381            } catch (ee) {
21382              exception = ee;
21383            }
21384          }
21385          var reject = capability.reject;
21386          reject(exception);
21387          return capability.promise;
21388        }
21389      },
21390
21391      reject: function reject(reason) {
21392        var C = this;
21393        if (!ES.TypeIsObject(C)) {
21394          throw new TypeError('Bad promise constructor');
21395        }
21396        var capability = new PromiseCapability(C);
21397        var rejectFunc = capability.reject;
21398        rejectFunc(reason); // call with this===undefined
21399        return capability.promise;
21400      },
21401
21402      resolve: function resolve(v) {
21403        // See https://esdiscuss.org/topic/fixing-promise-resolve for spec
21404        var C = this;
21405        if (!ES.TypeIsObject(C)) {
21406          throw new TypeError('Bad promise constructor');
21407        }
21408        if (ES.IsPromise(v)) {
21409          var constructor = v.constructor;
21410          if (constructor === C) {
21411            return v;
21412          }
21413        }
21414        var capability = new PromiseCapability(C);
21415        var resolveFunc = capability.resolve;
21416        resolveFunc(v); // call with this===undefined
21417        return capability.promise;
21418      }
21419    });
21420
21421    defineProperties(Promise$prototype, {
21422      'catch': function (onRejected) {
21423        return this.then(null, onRejected);
21424      },
21425
21426      then: function then(onFulfilled, onRejected) {
21427        var promise = this;
21428        if (!ES.IsPromise(promise)) { throw new TypeError('not a promise'); }
21429        var C = ES.SpeciesConstructor(promise, Promise);
21430        var resultCapability;
21431        var returnValueIsIgnored = arguments.length > 2 && arguments[2] === PROMISE_FAKE_CAPABILITY;
21432        if (returnValueIsIgnored && C === Promise) {
21433          resultCapability = PROMISE_FAKE_CAPABILITY;
21434        } else {
21435          resultCapability = new PromiseCapability(C);
21436        }
21437        // PerformPromiseThen(promise, onFulfilled, onRejected, resultCapability)
21438        // Note that we've split the 'reaction' object into its two
21439        // components, "capabilities" and "handler"
21440        // "capabilities" is always equal to `resultCapability`
21441        var fulfillReactionHandler = ES.IsCallable(onFulfilled) ? onFulfilled : PROMISE_IDENTITY;
21442        var rejectReactionHandler = ES.IsCallable(onRejected) ? onRejected : PROMISE_THROWER;
21443        var _promise = promise._promise;
21444        var value;
21445        if (_promise.state === PROMISE_PENDING) {
21446          if (_promise.reactionLength === 0) {
21447            _promise.fulfillReactionHandler0 = fulfillReactionHandler;
21448            _promise.rejectReactionHandler0 = rejectReactionHandler;
21449            _promise.reactionCapability0 = resultCapability;
21450          } else {
21451            var idx = 3 * (_promise.reactionLength - 1);
21452            _promise[idx + PROMISE_FULFILL_OFFSET] = fulfillReactionHandler;
21453            _promise[idx + PROMISE_REJECT_OFFSET] = rejectReactionHandler;
21454            _promise[idx + PROMISE_CAPABILITY_OFFSET] = resultCapability;
21455          }
21456          _promise.reactionLength += 1;
21457        } else if (_promise.state === PROMISE_FULFILLED) {
21458          value = _promise.result;
21459          enqueuePromiseReactionJob(
21460            fulfillReactionHandler,
21461            resultCapability,
21462            value
21463          );
21464        } else if (_promise.state === PROMISE_REJECTED) {
21465          value = _promise.result;
21466          enqueuePromiseReactionJob(
21467            rejectReactionHandler,
21468            resultCapability,
21469            value
21470          );
21471        } else {
21472          throw new TypeError('unexpected Promise state');
21473        }
21474        return resultCapability.promise;
21475      }
21476    });
21477    // This helps the optimizer by ensuring that methods which take
21478    // capabilities aren't polymorphic.
21479    PROMISE_FAKE_CAPABILITY = new PromiseCapability(Promise);
21480    Promise$prototype$then = Promise$prototype.then;
21481
21482    return Promise;
21483  }());
21484
21485  // Chrome's native Promise has extra methods that it shouldn't have. Let's remove them.
21486  if (globals.Promise) {
21487    delete globals.Promise.accept;
21488    delete globals.Promise.defer;
21489    delete globals.Promise.prototype.chain;
21490  }
21491
21492  if (typeof PromiseShim === 'function') {
21493    // export the Promise constructor.
21494    defineProperties(globals, { Promise: PromiseShim });
21495    // In Chrome 33 (and thereabouts) Promise is defined, but the
21496    // implementation is buggy in a number of ways.  Let's check subclassing
21497    // support to see if we have a buggy implementation.
21498    var promiseSupportsSubclassing = supportsSubclassing(globals.Promise, function (S) {
21499      return S.resolve(42).then(function () {}) instanceof S;
21500    });
21501    var promiseIgnoresNonFunctionThenCallbacks = !throwsError(function () {
21502      return globals.Promise.reject(42).then(null, 5).then(null, noop);
21503    });
21504    var promiseRequiresObjectContext = throwsError(function () { return globals.Promise.call(3, noop); });
21505    // Promise.resolve() was errata'ed late in the ES6 process.
21506    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1170742
21507    //      https://code.google.com/p/v8/issues/detail?id=4161
21508    // It serves as a proxy for a number of other bugs in early Promise
21509    // implementations.
21510    var promiseResolveBroken = (function (Promise) {
21511      var p = Promise.resolve(5);
21512      p.constructor = {};
21513      var p2 = Promise.resolve(p);
21514      try {
21515        p2.then(null, noop).then(null, noop); // avoid "uncaught rejection" warnings in console
21516      } catch (e) {
21517        return true; // v8 native Promises break here https://code.google.com/p/chromium/issues/detail?id=575314
21518      }
21519      return p === p2; // This *should* be false!
21520    }(globals.Promise));
21521
21522    // Chrome 46 (probably older too) does not retrieve a thenable's .then synchronously
21523    var getsThenSynchronously = supportsDescriptors && (function () {
21524      var count = 0;
21525      // eslint-disable-next-line getter-return
21526      var thenable = Object.defineProperty({}, 'then', { get: function () { count += 1; } });
21527      Promise.resolve(thenable);
21528      return count === 1;
21529    }());
21530
21531    var BadResolverPromise = function BadResolverPromise(executor) {
21532      var p = new Promise(executor);
21533      executor(3, function () {});
21534      this.then = p.then;
21535      this.constructor = BadResolverPromise;
21536    };
21537    BadResolverPromise.prototype = Promise.prototype;
21538    BadResolverPromise.all = Promise.all;
21539    // Chrome Canary 49 (probably older too) has some implementation bugs
21540    var hasBadResolverPromise = valueOrFalseIfThrows(function () {
21541      return !!BadResolverPromise.all([1, 2]);
21542    });
21543
21544    if (
21545      !promiseSupportsSubclassing
21546      || !promiseIgnoresNonFunctionThenCallbacks
21547      || !promiseRequiresObjectContext
21548      || promiseResolveBroken
21549      || !getsThenSynchronously
21550      || hasBadResolverPromise
21551    ) {
21552      Promise = PromiseShim; // eslint-disable-line no-global-assign
21553      overrideNative(globals, 'Promise', PromiseShim);
21554    }
21555    if (Promise.all.length !== 1) {
21556      var origAll = Promise.all;
21557      overrideNative(Promise, 'all', function all(iterable) {
21558        return ES.Call(origAll, this, arguments);
21559      });
21560    }
21561    if (Promise.race.length !== 1) {
21562      var origRace = Promise.race;
21563      overrideNative(Promise, 'race', function race(iterable) {
21564        return ES.Call(origRace, this, arguments);
21565      });
21566    }
21567    if (Promise.resolve.length !== 1) {
21568      var origResolve = Promise.resolve;
21569      overrideNative(Promise, 'resolve', function resolve(x) {
21570        return ES.Call(origResolve, this, arguments);
21571      });
21572    }
21573    if (Promise.reject.length !== 1) {
21574      var origReject = Promise.reject;
21575      overrideNative(Promise, 'reject', function reject(r) {
21576        return ES.Call(origReject, this, arguments);
21577      });
21578    }
21579    ensureEnumerable(Promise, 'all');
21580    ensureEnumerable(Promise, 'race');
21581    ensureEnumerable(Promise, 'resolve');
21582    ensureEnumerable(Promise, 'reject');
21583    addDefaultSpecies(Promise);
21584  }
21585
21586  // Map and Set require a true ES5 environment
21587  // Their fast path also requires that the environment preserve
21588  // property insertion order, which is not guaranteed by the spec.
21589  var testOrder = function (a) {
21590    var b = keys(_reduce(a, function (o, k) {
21591      o[k] = true;
21592      return o;
21593    }, {}));
21594    return a.join(':') === b.join(':');
21595  };
21596  var preservesInsertionOrder = testOrder(['z', 'a', 'bb']);
21597  // some engines (eg, Chrome) only preserve insertion order for string keys
21598  var preservesNumericInsertionOrder = testOrder(['z', 1, 'a', '3', 2]);
21599
21600  if (supportsDescriptors) {
21601
21602    var fastkey = function fastkey(key, skipInsertionOrderCheck) {
21603      if (!skipInsertionOrderCheck && !preservesInsertionOrder) {
21604        return null;
21605      }
21606      if (isNullOrUndefined(key)) {
21607        return '^' + ES.ToString(key);
21608      } else if (typeof key === 'string') {
21609        return '$' + key;
21610      } else if (typeof key === 'number') {
21611        // note that -0 will get coerced to "0" when used as a property key
21612        if (!preservesNumericInsertionOrder) {
21613          return 'n' + key;
21614        }
21615        return key;
21616      } else if (typeof key === 'boolean') {
21617        return 'b' + key;
21618      }
21619      return null;
21620    };
21621
21622    var emptyObject = function emptyObject() {
21623      // accomodate some older not-quite-ES5 browsers
21624      return Object.create ? Object.create(null) : {};
21625    };
21626
21627    var addIterableToMap = function addIterableToMap(MapConstructor, map, iterable) {
21628      if (isArray(iterable) || Type.string(iterable)) {
21629        _forEach(iterable, function (entry) {
21630          if (!ES.TypeIsObject(entry)) {
21631            throw new TypeError('Iterator value ' + entry + ' is not an entry object');
21632          }
21633          map.set(entry[0], entry[1]);
21634        });
21635      } else if (iterable instanceof MapConstructor) {
21636        _call(MapConstructor.prototype.forEach, iterable, function (value, key) {
21637          map.set(key, value);
21638        });
21639      } else {
21640        var iter, adder;
21641        if (!isNullOrUndefined(iterable)) {
21642          adder = map.set;
21643          if (!ES.IsCallable(adder)) { throw new TypeError('bad map'); }
21644          iter = ES.GetIterator(iterable);
21645        }
21646        if (typeof iter !== 'undefined') {
21647          while (true) {
21648            var next = ES.IteratorStep(iter);
21649            if (next === false) { break; }
21650            var nextItem = next.value;
21651            try {
21652              if (!ES.TypeIsObject(nextItem)) {
21653                throw new TypeError('Iterator value ' + nextItem + ' is not an entry object');
21654              }
21655              _call(adder, map, nextItem[0], nextItem[1]);
21656            } catch (e) {
21657              ES.IteratorClose(iter, true);
21658              throw e;
21659            }
21660          }
21661        }
21662      }
21663    };
21664    var addIterableToSet = function addIterableToSet(SetConstructor, set, iterable) {
21665      if (isArray(iterable) || Type.string(iterable)) {
21666        _forEach(iterable, function (value) {
21667          set.add(value);
21668        });
21669      } else if (iterable instanceof SetConstructor) {
21670        _call(SetConstructor.prototype.forEach, iterable, function (value) {
21671          set.add(value);
21672        });
21673      } else {
21674        var iter, adder;
21675        if (!isNullOrUndefined(iterable)) {
21676          adder = set.add;
21677          if (!ES.IsCallable(adder)) { throw new TypeError('bad set'); }
21678          iter = ES.GetIterator(iterable);
21679        }
21680        if (typeof iter !== 'undefined') {
21681          while (true) {
21682            var next = ES.IteratorStep(iter);
21683            if (next === false) { break; }
21684            var nextValue = next.value;
21685            try {
21686              _call(adder, set, nextValue);
21687            } catch (e) {
21688              ES.IteratorClose(iter, true);
21689              throw e;
21690            }
21691          }
21692        }
21693      }
21694    };
21695
21696    var collectionShims = {
21697      Map: (function () {
21698
21699        var empty = {};
21700
21701        var MapEntry = function MapEntry(key, value) {
21702          this.key = key;
21703          this.value = value;
21704          this.next = null;
21705          this.prev = null;
21706        };
21707
21708        MapEntry.prototype.isRemoved = function isRemoved() {
21709          return this.key === empty;
21710        };
21711
21712        var isMap = function isMap(map) {
21713          return !!map._es6map;
21714        };
21715
21716        var requireMapSlot = function requireMapSlot(map, method) {
21717          if (!ES.TypeIsObject(map) || !isMap(map)) {
21718            throw new TypeError('Method Map.prototype.' + method + ' called on incompatible receiver ' + ES.ToString(map));
21719          }
21720        };
21721
21722        var MapIterator = function MapIterator(map, kind) {
21723          requireMapSlot(map, '[[MapIterator]]');
21724          defineProperty(this, 'head', map._head);
21725          defineProperty(this, 'i', this.head);
21726          defineProperty(this, 'kind', kind);
21727        };
21728
21729        MapIterator.prototype = {
21730          isMapIterator: true,
21731          next: function next() {
21732            if (!this.isMapIterator) {
21733              throw new TypeError('Not a MapIterator');
21734            }
21735            var i = this.i;
21736            var kind = this.kind;
21737            var head = this.head;
21738            if (typeof this.i === 'undefined') {
21739              return iteratorResult();
21740            }
21741            while (i.isRemoved() && i !== head) {
21742              // back up off of removed entries
21743              i = i.prev;
21744            }
21745            // advance to next unreturned element.
21746            var result;
21747            while (i.next !== head) {
21748              i = i.next;
21749              if (!i.isRemoved()) {
21750                if (kind === 'key') {
21751                  result = i.key;
21752                } else if (kind === 'value') {
21753                  result = i.value;
21754                } else {
21755                  result = [i.key, i.value];
21756                }
21757                this.i = i;
21758                return iteratorResult(result);
21759              }
21760            }
21761            // once the iterator is done, it is done forever.
21762            this.i = void 0;
21763            return iteratorResult();
21764          }
21765        };
21766        addIterator(MapIterator.prototype);
21767
21768        var Map$prototype;
21769        var MapShim = function Map() {
21770          if (!(this instanceof Map)) {
21771            throw new TypeError('Constructor Map requires "new"');
21772          }
21773          if (this && this._es6map) {
21774            throw new TypeError('Bad construction');
21775          }
21776          var map = emulateES6construct(this, Map, Map$prototype, {
21777            _es6map: true,
21778            _head: null,
21779            _map: OrigMap ? new OrigMap() : null,
21780            _size: 0,
21781            _storage: emptyObject()
21782          });
21783
21784          var head = new MapEntry(null, null);
21785          // circular doubly-linked list.
21786          /* eslint no-multi-assign: 1 */
21787          head.next = head.prev = head;
21788          map._head = head;
21789
21790          // Optionally initialize map from iterable
21791          if (arguments.length > 0) {
21792            addIterableToMap(Map, map, arguments[0]);
21793          }
21794          return map;
21795        };
21796        Map$prototype = MapShim.prototype;
21797
21798        Value.getter(Map$prototype, 'size', function () {
21799          if (typeof this._size === 'undefined') {
21800            throw new TypeError('size method called on incompatible Map');
21801          }
21802          return this._size;
21803        });
21804
21805        defineProperties(Map$prototype, {
21806          get: function get(key) {
21807            requireMapSlot(this, 'get');
21808            var entry;
21809            var fkey = fastkey(key, true);
21810            if (fkey !== null) {
21811              // fast O(1) path
21812              entry = this._storage[fkey];
21813              if (entry) {
21814                return entry.value;
21815              }
21816              return;
21817
21818            }
21819            if (this._map) {
21820              // fast object key path
21821              entry = origMapGet.call(this._map, key);
21822              if (entry) {
21823                return entry.value;
21824              }
21825              return;
21826
21827            }
21828            var head = this._head;
21829            var i = head;
21830            while ((i = i.next) !== head) {
21831              if (ES.SameValueZero(i.key, key)) {
21832                return i.value;
21833              }
21834            }
21835          },
21836
21837          has: function has(key) {
21838            requireMapSlot(this, 'has');
21839            var fkey = fastkey(key, true);
21840            if (fkey !== null) {
21841              // fast O(1) path
21842              return typeof this._storage[fkey] !== 'undefined';
21843            }
21844            if (this._map) {
21845              // fast object key path
21846              return origMapHas.call(this._map, key);
21847            }
21848            var head = this._head;
21849            var i = head;
21850            while ((i = i.next) !== head) {
21851              if (ES.SameValueZero(i.key, key)) {
21852                return true;
21853              }
21854            }
21855            return false;
21856          },
21857
21858          set: function set(key, value) {
21859            requireMapSlot(this, 'set');
21860            var head = this._head;
21861            var i = head;
21862            var entry;
21863            var fkey = fastkey(key, true);
21864            if (fkey !== null) {
21865              // fast O(1) path
21866              if (typeof this._storage[fkey] !== 'undefined') {
21867                this._storage[fkey].value = value;
21868                return this;
21869              }
21870              entry = this._storage[fkey] = new MapEntry(key, value); /* eslint no-multi-assign: 1 */
21871              i = head.prev;
21872              // fall through
21873
21874            } else if (this._map) {
21875              // fast object key path
21876              if (origMapHas.call(this._map, key)) {
21877                origMapGet.call(this._map, key).value = value;
21878              } else {
21879                entry = new MapEntry(key, value);
21880                origMapSet.call(this._map, key, entry);
21881                i = head.prev;
21882                // fall through
21883              }
21884            }
21885            while ((i = i.next) !== head) {
21886              if (ES.SameValueZero(i.key, key)) {
21887                i.value = value;
21888                return this;
21889              }
21890            }
21891            entry = entry || new MapEntry(key, value);
21892            if (ES.SameValue(-0, key)) {
21893              entry.key = +0; // coerce -0 to +0 in entry
21894            }
21895            entry.next = this._head;
21896            entry.prev = this._head.prev;
21897            entry.prev.next = entry;
21898            entry.next.prev = entry;
21899            this._size += 1;
21900            return this;
21901          },
21902
21903          'delete': function (key) {
21904            requireMapSlot(this, 'delete');
21905            var head = this._head;
21906            var i = head;
21907            var fkey = fastkey(key, true);
21908            if (fkey !== null) {
21909              // fast O(1) path
21910              if (typeof this._storage[fkey] === 'undefined') {
21911                return false;
21912              }
21913              i = this._storage[fkey].prev;
21914              delete this._storage[fkey];
21915              // fall through
21916            } else if (this._map) {
21917              // fast object key path
21918              if (!origMapHas.call(this._map, key)) {
21919                return false;
21920              }
21921              i = origMapGet.call(this._map, key).prev;
21922              origMapDelete.call(this._map, key);
21923              // fall through
21924            }
21925            while ((i = i.next) !== head) {
21926              if (ES.SameValueZero(i.key, key)) {
21927                i.key = empty;
21928                i.value = empty;
21929                i.prev.next = i.next;
21930                i.next.prev = i.prev;
21931                this._size -= 1;
21932                return true;
21933              }
21934            }
21935            return false;
21936          },
21937
21938          clear: function clear() {
21939            /* eslint no-multi-assign: 1 */
21940            requireMapSlot(this, 'clear');
21941            this._map = OrigMap ? new OrigMap() : null;
21942            this._size = 0;
21943            this._storage = emptyObject();
21944            var head = this._head;
21945            var i = head;
21946            var p = i.next;
21947            while ((i = p) !== head) {
21948              i.key = empty;
21949              i.value = empty;
21950              p = i.next;
21951              i.next = i.prev = head;
21952            }
21953            head.next = head.prev = head;
21954          },
21955
21956          keys: function keys() {
21957            requireMapSlot(this, 'keys');
21958            return new MapIterator(this, 'key');
21959          },
21960
21961          values: function values() {
21962            requireMapSlot(this, 'values');
21963            return new MapIterator(this, 'value');
21964          },
21965
21966          entries: function entries() {
21967            requireMapSlot(this, 'entries');
21968            return new MapIterator(this, 'key+value');
21969          },
21970
21971          forEach: function forEach(callback) {
21972            requireMapSlot(this, 'forEach');
21973            var context = arguments.length > 1 ? arguments[1] : null;
21974            var it = this.entries();
21975            for (var entry = it.next(); !entry.done; entry = it.next()) {
21976              if (context) {
21977                _call(callback, context, entry.value[1], entry.value[0], this);
21978              } else {
21979                callback(entry.value[1], entry.value[0], this);
21980              }
21981            }
21982          }
21983        });
21984        addIterator(Map$prototype, Map$prototype.entries);
21985
21986        return MapShim;
21987      }()),
21988
21989      Set: (function () {
21990        var isSet = function isSet(set) {
21991          return set._es6set && typeof set._storage !== 'undefined';
21992        };
21993        var requireSetSlot = function requireSetSlot(set, method) {
21994          if (!ES.TypeIsObject(set) || !isSet(set)) {
21995            // https://github.com/paulmillr/es6-shim/issues/176
21996            throw new TypeError('Set.prototype.' + method + ' called on incompatible receiver ' + ES.ToString(set));
21997          }
21998        };
21999
22000        // Creating a Map is expensive.  To speed up the common case of
22001        // Sets containing only string or numeric keys, we use an object
22002        // as backing storage and lazily create a full Map only when
22003        // required.
22004        var Set$prototype;
22005        var SetShim = function Set() {
22006          if (!(this instanceof Set)) {
22007            throw new TypeError('Constructor Set requires "new"');
22008          }
22009          if (this && this._es6set) {
22010            throw new TypeError('Bad construction');
22011          }
22012          var set = emulateES6construct(this, Set, Set$prototype, {
22013            _es6set: true,
22014            '[[SetData]]': null,
22015            _storage: emptyObject()
22016          });
22017          if (!set._es6set) {
22018            throw new TypeError('bad set');
22019          }
22020
22021          // Optionally initialize Set from iterable
22022          if (arguments.length > 0) {
22023            addIterableToSet(Set, set, arguments[0]);
22024          }
22025          return set;
22026        };
22027        Set$prototype = SetShim.prototype;
22028
22029        var decodeKey = function (key) {
22030          var k = key;
22031          if (k === '^null') {
22032            return null;
22033          } else if (k === '^undefined') {
22034            return void 0;
22035          }
22036          var first = k.charAt(0);
22037          if (first === '$') {
22038            return _strSlice(k, 1);
22039          } else if (first === 'n') {
22040            return +_strSlice(k, 1);
22041          } else if (first === 'b') {
22042            return k === 'btrue';
22043          }
22044
22045          return +k;
22046        };
22047        // Switch from the object backing storage to a full Map.
22048        var ensureMap = function ensureMap(set) {
22049          if (!set['[[SetData]]']) {
22050            var m = new collectionShims.Map();
22051            set['[[SetData]]'] = m;
22052            _forEach(keys(set._storage), function (key) {
22053              var k = decodeKey(key);
22054              m.set(k, k);
22055            });
22056            set['[[SetData]]'] = m;
22057          }
22058          set._storage = null; // free old backing storage
22059        };
22060
22061        Value.getter(SetShim.prototype, 'size', function () {
22062          requireSetSlot(this, 'size');
22063          if (this._storage) {
22064            return keys(this._storage).length;
22065          }
22066          ensureMap(this);
22067          return this['[[SetData]]'].size;
22068        });
22069
22070        defineProperties(SetShim.prototype, {
22071          has: function has(key) {
22072            requireSetSlot(this, 'has');
22073            var fkey;
22074            if (this._storage && (fkey = fastkey(key)) !== null) {
22075              return !!this._storage[fkey];
22076            }
22077            ensureMap(this);
22078            return this['[[SetData]]'].has(key);
22079          },
22080
22081          add: function add(key) {
22082            requireSetSlot(this, 'add');
22083            var fkey;
22084            if (this._storage && (fkey = fastkey(key)) !== null) {
22085              this._storage[fkey] = true;
22086              return this;
22087            }
22088            ensureMap(this);
22089            this['[[SetData]]'].set(key, key);
22090            return this;
22091          },
22092
22093          'delete': function (key) {
22094            requireSetSlot(this, 'delete');
22095            var fkey;
22096            if (this._storage && (fkey = fastkey(key)) !== null) {
22097              var hasFKey = _hasOwnProperty(this._storage, fkey);
22098              return (delete this._storage[fkey]) && hasFKey;
22099            }
22100            ensureMap(this);
22101            return this['[[SetData]]']['delete'](key);
22102          },
22103
22104          clear: function clear() {
22105            requireSetSlot(this, 'clear');
22106            if (this._storage) {
22107              this._storage = emptyObject();
22108            }
22109            if (this['[[SetData]]']) {
22110              this['[[SetData]]'].clear();
22111            }
22112          },
22113
22114          values: function values() {
22115            requireSetSlot(this, 'values');
22116            ensureMap(this);
22117            return new SetIterator(this['[[SetData]]'].values());
22118          },
22119
22120          entries: function entries() {
22121            requireSetSlot(this, 'entries');
22122            ensureMap(this);
22123            return new SetIterator(this['[[SetData]]'].entries());
22124          },
22125
22126          forEach: function forEach(callback) {
22127            requireSetSlot(this, 'forEach');
22128            var context = arguments.length > 1 ? arguments[1] : null;
22129            var entireSet = this;
22130            ensureMap(entireSet);
22131            this['[[SetData]]'].forEach(function (value, key) {
22132              if (context) {
22133                _call(callback, context, key, key, entireSet);
22134              } else {
22135                callback(key, key, entireSet);
22136              }
22137            });
22138          }
22139        });
22140        defineProperty(SetShim.prototype, 'keys', SetShim.prototype.values, true);
22141        addIterator(SetShim.prototype, SetShim.prototype.values);
22142
22143        var SetIterator = function SetIterator(it) {
22144          defineProperty(this, 'it', it);
22145        };
22146        SetIterator.prototype = {
22147          isSetIterator: true,
22148          next: function next() {
22149            if (!this.isSetIterator) {
22150              throw new TypeError('Not a SetIterator');
22151            }
22152            return this.it.next();
22153          }
22154        };
22155        addIterator(SetIterator.prototype);
22156
22157        return SetShim;
22158      }())
22159    };
22160
22161    var isGoogleTranslate = globals.Set && !Set.prototype['delete'] && Set.prototype.remove && Set.prototype.items && Set.prototype.map && Array.isArray(new Set().keys);
22162    if (isGoogleTranslate) {
22163      // special-case force removal of wildly invalid Set implementation in Google Translate iframes
22164      // see https://github.com/paulmillr/es6-shim/issues/438 / https://twitter.com/ljharb/status/849335573114363904
22165      globals.Set = collectionShims.Set;
22166    }
22167    if (globals.Map || globals.Set) {
22168      // Safari 8, for example, doesn't accept an iterable.
22169      var mapAcceptsArguments = valueOrFalseIfThrows(function () { return new Map([[1, 2]]).get(1) === 2; });
22170      if (!mapAcceptsArguments) {
22171        globals.Map = function Map() {
22172          if (!(this instanceof Map)) {
22173            throw new TypeError('Constructor Map requires "new"');
22174          }
22175          var m = new OrigMap();
22176          if (arguments.length > 0) {
22177            addIterableToMap(Map, m, arguments[0]);
22178          }
22179          delete m.constructor;
22180          Object.setPrototypeOf(m, globals.Map.prototype);
22181          return m;
22182        };
22183        globals.Map.prototype = create(OrigMap.prototype);
22184        defineProperty(globals.Map.prototype, 'constructor', globals.Map, true);
22185        Value.preserveToString(globals.Map, OrigMap);
22186      }
22187      var testMap = new Map();
22188      var mapUsesSameValueZero = (function () {
22189        // Chrome 38-42, node 0.11/0.12, iojs 1/2 also have a bug when the Map has a size > 4
22190        var m = new Map([[1, 0], [2, 0], [3, 0], [4, 0]]);
22191        m.set(-0, m);
22192        return m.get(0) === m && m.get(-0) === m && m.has(0) && m.has(-0);
22193      }());
22194      var mapSupportsChaining = testMap.set(1, 2) === testMap;
22195      if (!mapUsesSameValueZero || !mapSupportsChaining) {
22196        overrideNative(Map.prototype, 'set', function set(k, v) {
22197          _call(origMapSet, this, k === 0 ? 0 : k, v);
22198          return this;
22199        });
22200      }
22201      if (!mapUsesSameValueZero) {
22202        defineProperties(Map.prototype, {
22203          get: function get(k) {
22204            return _call(origMapGet, this, k === 0 ? 0 : k);
22205          },
22206          has: function has(k) {
22207            return _call(origMapHas, this, k === 0 ? 0 : k);
22208          }
22209        }, true);
22210        Value.preserveToString(Map.prototype.get, origMapGet);
22211        Value.preserveToString(Map.prototype.has, origMapHas);
22212      }
22213      var testSet = new Set();
22214      var setUsesSameValueZero = Set.prototype['delete'] && Set.prototype.add && Set.prototype.has && (function (s) {
22215        s['delete'](0);
22216        s.add(-0);
22217        return !s.has(0);
22218      }(testSet));
22219      var setSupportsChaining = testSet.add(1) === testSet;
22220      if (!setUsesSameValueZero || !setSupportsChaining) {
22221        var origSetAdd = Set.prototype.add;
22222        Set.prototype.add = function add(v) {
22223          _call(origSetAdd, this, v === 0 ? 0 : v);
22224          return this;
22225        };
22226        Value.preserveToString(Set.prototype.add, origSetAdd);
22227      }
22228      if (!setUsesSameValueZero) {
22229        var origSetHas = Set.prototype.has;
22230        Set.prototype.has = function has(v) {
22231          return _call(origSetHas, this, v === 0 ? 0 : v);
22232        };
22233        Value.preserveToString(Set.prototype.has, origSetHas);
22234        var origSetDel = Set.prototype['delete'];
22235        Set.prototype['delete'] = function SetDelete(v) {
22236          return _call(origSetDel, this, v === 0 ? 0 : v);
22237        };
22238        Value.preserveToString(Set.prototype['delete'], origSetDel);
22239      }
22240      var mapSupportsSubclassing = supportsSubclassing(globals.Map, function (M) {
22241        var m = new M([]);
22242        // Firefox 32 is ok with the instantiating the subclass but will
22243        // throw when the map is used.
22244        m.set(42, 42);
22245        return m instanceof M;
22246      });
22247      // without Object.setPrototypeOf, subclassing is not possible
22248      var mapFailsToSupportSubclassing = Object.setPrototypeOf && !mapSupportsSubclassing;
22249      var mapRequiresNew = (function () {
22250        try {
22251          return !(globals.Map() instanceof globals.Map);
22252        } catch (e) {
22253          return e instanceof TypeError;
22254        }
22255      }());
22256      if (globals.Map.length !== 0 || mapFailsToSupportSubclassing || !mapRequiresNew) {
22257        globals.Map = function Map() {
22258          if (!(this instanceof Map)) {
22259            throw new TypeError('Constructor Map requires "new"');
22260          }
22261          var m = new OrigMap();
22262          if (arguments.length > 0) {
22263            addIterableToMap(Map, m, arguments[0]);
22264          }
22265          delete m.constructor;
22266          Object.setPrototypeOf(m, Map.prototype);
22267          return m;
22268        };
22269        globals.Map.prototype = OrigMap.prototype;
22270        defineProperty(globals.Map.prototype, 'constructor', globals.Map, true);
22271        Value.preserveToString(globals.Map, OrigMap);
22272      }
22273      var setSupportsSubclassing = supportsSubclassing(globals.Set, function (S) {
22274        var s = new S([]);
22275        s.add(42, 42);
22276        return s instanceof S;
22277      });
22278      // without Object.setPrototypeOf, subclassing is not possible
22279      var setFailsToSupportSubclassing = Object.setPrototypeOf && !setSupportsSubclassing;
22280      var setRequiresNew = (function () {
22281        try {
22282          return !(globals.Set() instanceof globals.Set);
22283        } catch (e) {
22284          return e instanceof TypeError;
22285        }
22286      }());
22287      if (globals.Set.length !== 0 || setFailsToSupportSubclassing || !setRequiresNew) {
22288        var OrigSet = globals.Set;
22289        globals.Set = function Set() {
22290          if (!(this instanceof Set)) {
22291            throw new TypeError('Constructor Set requires "new"');
22292          }
22293          var s = new OrigSet();
22294          if (arguments.length > 0) {
22295            addIterableToSet(Set, s, arguments[0]);
22296          }
22297          delete s.constructor;
22298          Object.setPrototypeOf(s, Set.prototype);
22299          return s;
22300        };
22301        globals.Set.prototype = OrigSet.prototype;
22302        defineProperty(globals.Set.prototype, 'constructor', globals.Set, true);
22303        Value.preserveToString(globals.Set, OrigSet);
22304      }
22305      var newMap = new globals.Map();
22306      var mapIterationThrowsStopIterator = !valueOrFalseIfThrows(function () {
22307        return newMap.keys().next().done;
22308      });
22309      /*
22310        - In Firefox < 23, Map#size is a function.
22311        - In all current Firefox, Set#entries/keys/values & Map#clear do not exist
22312        - https://bugzilla.mozilla.org/show_bug.cgi?id=869996
22313        - In Firefox 24, Map and Set do not implement forEach
22314        - In Firefox 25 at least, Map and Set are callable without "new"
22315      */
22316      if (
22317        typeof globals.Map.prototype.clear !== 'function'
22318        || new globals.Set().size !== 0
22319        || newMap.size !== 0
22320        || typeof globals.Map.prototype.keys !== 'function'
22321        || typeof globals.Set.prototype.keys !== 'function'
22322        || typeof globals.Map.prototype.forEach !== 'function'
22323        || typeof globals.Set.prototype.forEach !== 'function'
22324        || isCallableWithoutNew(globals.Map)
22325        || isCallableWithoutNew(globals.Set)
22326        || typeof newMap.keys().next !== 'function' // Safari 8
22327        || mapIterationThrowsStopIterator // Firefox 25
22328        || !mapSupportsSubclassing
22329      ) {
22330        defineProperties(globals, {
22331          Map: collectionShims.Map,
22332          Set: collectionShims.Set
22333        }, true);
22334      }
22335
22336      if (globals.Set.prototype.keys !== globals.Set.prototype.values) {
22337        // Fixed in WebKit with https://bugs.webkit.org/show_bug.cgi?id=144190
22338        defineProperty(globals.Set.prototype, 'keys', globals.Set.prototype.values, true);
22339      }
22340
22341      // Shim incomplete iterator implementations.
22342      addIterator(Object.getPrototypeOf((new globals.Map()).keys()));
22343      addIterator(Object.getPrototypeOf((new globals.Set()).keys()));
22344
22345      if (functionsHaveNames && globals.Set.prototype.has.name !== 'has') {
22346        // Microsoft Edge v0.11.10074.0 is missing a name on Set#has
22347        var anonymousSetHas = globals.Set.prototype.has;
22348        overrideNative(globals.Set.prototype, 'has', function has(key) {
22349          return _call(anonymousSetHas, this, key);
22350        });
22351      }
22352    }
22353    defineProperties(globals, collectionShims);
22354    addDefaultSpecies(globals.Map);
22355    addDefaultSpecies(globals.Set);
22356  }
22357
22358  var throwUnlessTargetIsObject = function throwUnlessTargetIsObject(target) {
22359    if (!ES.TypeIsObject(target)) {
22360      throw new TypeError('target must be an object');
22361    }
22362  };
22363
22364  // Some Reflect methods are basically the same as
22365  // those on the Object global, except that a TypeError is thrown if
22366  // target isn't an object. As well as returning a boolean indicating
22367  // the success of the operation.
22368  var ReflectShims = {
22369    // Apply method in a functional form.
22370    apply: function apply() {
22371      return ES.Call(ES.Call, null, arguments);
22372    },
22373
22374    // New operator in a functional form.
22375    construct: function construct(constructor, args) {
22376      if (!ES.IsConstructor(constructor)) {
22377        throw new TypeError('First argument must be a constructor.');
22378      }
22379      var newTarget = arguments.length > 2 ? arguments[2] : constructor;
22380      if (!ES.IsConstructor(newTarget)) {
22381        throw new TypeError('new.target must be a constructor.');
22382      }
22383      return ES.Construct(constructor, args, newTarget, 'internal');
22384    },
22385
22386    // When deleting a non-existent or configurable property,
22387    // true is returned.
22388    // When attempting to delete a non-configurable property,
22389    // it will return false.
22390    deleteProperty: function deleteProperty(target, key) {
22391      throwUnlessTargetIsObject(target);
22392      if (supportsDescriptors) {
22393        var desc = Object.getOwnPropertyDescriptor(target, key);
22394
22395        if (desc && !desc.configurable) {
22396          return false;
22397        }
22398      }
22399
22400      // Will return true.
22401      return delete target[key];
22402    },
22403
22404    has: function has(target, key) {
22405      throwUnlessTargetIsObject(target);
22406      return key in target;
22407    }
22408  };
22409
22410  if (Object.getOwnPropertyNames) {
22411    Object.assign(ReflectShims, {
22412      // Basically the result of calling the internal [[OwnPropertyKeys]].
22413      // Concatenating propertyNames and propertySymbols should do the trick.
22414      // This should continue to work together with a Symbol shim
22415      // which overrides Object.getOwnPropertyNames and implements
22416      // Object.getOwnPropertySymbols.
22417      ownKeys: function ownKeys(target) {
22418        throwUnlessTargetIsObject(target);
22419        var keys = Object.getOwnPropertyNames(target);
22420
22421        if (ES.IsCallable(Object.getOwnPropertySymbols)) {
22422          _pushApply(keys, Object.getOwnPropertySymbols(target));
22423        }
22424
22425        return keys;
22426      }
22427    });
22428  }
22429
22430  var callAndCatchException = function ConvertExceptionToBoolean(func) {
22431    return !throwsError(func);
22432  };
22433
22434  if (Object.preventExtensions) {
22435    Object.assign(ReflectShims, {
22436      isExtensible: function isExtensible(target) {
22437        throwUnlessTargetIsObject(target);
22438        return Object.isExtensible(target);
22439      },
22440      preventExtensions: function preventExtensions(target) {
22441        throwUnlessTargetIsObject(target);
22442        return callAndCatchException(function () {
22443          return Object.preventExtensions(target);
22444        });
22445      }
22446    });
22447  }
22448
22449  if (supportsDescriptors) {
22450    var internalGet = function get(target, key, receiver) {
22451      var desc = Object.getOwnPropertyDescriptor(target, key);
22452
22453      if (!desc) {
22454        var parent = Object.getPrototypeOf(target);
22455
22456        if (parent === null) {
22457          return void 0;
22458        }
22459
22460        return internalGet(parent, key, receiver);
22461      }
22462
22463      if ('value' in desc) {
22464        return desc.value;
22465      }
22466
22467      if (desc.get) {
22468        return ES.Call(desc.get, receiver);
22469      }
22470
22471      return void 0;
22472    };
22473
22474    var internalSet = function set(target, key, value, receiver) {
22475      var desc = Object.getOwnPropertyDescriptor(target, key);
22476
22477      if (!desc) {
22478        var parent = Object.getPrototypeOf(target);
22479
22480        if (parent !== null) {
22481          return internalSet(parent, key, value, receiver);
22482        }
22483
22484        desc = {
22485          value: void 0,
22486          writable: true,
22487          enumerable: true,
22488          configurable: true
22489        };
22490      }
22491
22492      if ('value' in desc) {
22493        if (!desc.writable) {
22494          return false;
22495        }
22496
22497        if (!ES.TypeIsObject(receiver)) {
22498          return false;
22499        }
22500
22501        var existingDesc = Object.getOwnPropertyDescriptor(receiver, key);
22502
22503        if (existingDesc) {
22504          return Reflect.defineProperty(receiver, key, {
22505            value: value
22506          });
22507        }
22508        return Reflect.defineProperty(receiver, key, {
22509          value: value,
22510          writable: true,
22511          enumerable: true,
22512          configurable: true
22513        });
22514
22515      }
22516
22517      if (desc.set) {
22518        _call(desc.set, receiver, value);
22519        return true;
22520      }
22521
22522      return false;
22523    };
22524
22525    Object.assign(ReflectShims, {
22526      defineProperty: function defineProperty(target, propertyKey, attributes) {
22527        throwUnlessTargetIsObject(target);
22528        return callAndCatchException(function () {
22529          return Object.defineProperty(target, propertyKey, attributes);
22530        });
22531      },
22532
22533      getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {
22534        throwUnlessTargetIsObject(target);
22535        return Object.getOwnPropertyDescriptor(target, propertyKey);
22536      },
22537
22538      // Syntax in a functional form.
22539      get: function get(target, key) {
22540        throwUnlessTargetIsObject(target);
22541        var receiver = arguments.length > 2 ? arguments[2] : target;
22542
22543        return internalGet(target, key, receiver);
22544      },
22545
22546      set: function set(target, key, value) {
22547        throwUnlessTargetIsObject(target);
22548        var receiver = arguments.length > 3 ? arguments[3] : target;
22549
22550        return internalSet(target, key, value, receiver);
22551      }
22552    });
22553  }
22554
22555  if (Object.getPrototypeOf) {
22556    var objectDotGetPrototypeOf = Object.getPrototypeOf;
22557    ReflectShims.getPrototypeOf = function getPrototypeOf(target) {
22558      throwUnlessTargetIsObject(target);
22559      return objectDotGetPrototypeOf(target);
22560    };
22561  }
22562
22563  if (Object.setPrototypeOf && ReflectShims.getPrototypeOf) {
22564    var willCreateCircularPrototype = function (object, lastProto) {
22565      var proto = lastProto;
22566      while (proto) {
22567        if (object === proto) {
22568          return true;
22569        }
22570        proto = ReflectShims.getPrototypeOf(proto);
22571      }
22572      return false;
22573    };
22574
22575    Object.assign(ReflectShims, {
22576      // Sets the prototype of the given object.
22577      // Returns true on success, otherwise false.
22578      setPrototypeOf: function setPrototypeOf(object, proto) {
22579        throwUnlessTargetIsObject(object);
22580        if (proto !== null && !ES.TypeIsObject(proto)) {
22581          throw new TypeError('proto must be an object or null');
22582        }
22583
22584        // If they already are the same, we're done.
22585        if (proto === Reflect.getPrototypeOf(object)) {
22586          return true;
22587        }
22588
22589        // Cannot alter prototype if object not extensible.
22590        if (Reflect.isExtensible && !Reflect.isExtensible(object)) {
22591          return false;
22592        }
22593
22594        // Ensure that we do not create a circular prototype chain.
22595        if (willCreateCircularPrototype(object, proto)) {
22596          return false;
22597        }
22598
22599        Object.setPrototypeOf(object, proto);
22600
22601        return true;
22602      }
22603    });
22604  }
22605  var defineOrOverrideReflectProperty = function (key, shim) {
22606    if (!ES.IsCallable(globals.Reflect[key])) {
22607      defineProperty(globals.Reflect, key, shim);
22608    } else {
22609      var acceptsPrimitives = valueOrFalseIfThrows(function () {
22610        globals.Reflect[key](1);
22611        globals.Reflect[key](NaN);
22612        globals.Reflect[key](true);
22613        return true;
22614      });
22615      if (acceptsPrimitives) {
22616        overrideNative(globals.Reflect, key, shim);
22617      }
22618    }
22619  };
22620  Object.keys(ReflectShims).forEach(function (key) {
22621    defineOrOverrideReflectProperty(key, ReflectShims[key]);
22622  });
22623  var originalReflectGetProto = globals.Reflect.getPrototypeOf;
22624  if (functionsHaveNames && originalReflectGetProto && originalReflectGetProto.name !== 'getPrototypeOf') {
22625    overrideNative(globals.Reflect, 'getPrototypeOf', function getPrototypeOf(target) {
22626      return _call(originalReflectGetProto, globals.Reflect, target);
22627    });
22628  }
22629  if (globals.Reflect.setPrototypeOf) {
22630    if (valueOrFalseIfThrows(function () {
22631      globals.Reflect.setPrototypeOf(1, {});
22632      return true;
22633    })) {
22634      overrideNative(globals.Reflect, 'setPrototypeOf', ReflectShims.setPrototypeOf);
22635    }
22636  }
22637  if (globals.Reflect.defineProperty) {
22638    if (!valueOrFalseIfThrows(function () {
22639      var basic = !globals.Reflect.defineProperty(1, 'test', { value: 1 });
22640      // "extensible" fails on Edge 0.12
22641      var extensible = typeof Object.preventExtensions !== 'function' || !globals.Reflect.defineProperty(Object.preventExtensions({}), 'test', {});
22642      return basic && extensible;
22643    })) {
22644      overrideNative(globals.Reflect, 'defineProperty', ReflectShims.defineProperty);
22645    }
22646  }
22647  if (globals.Reflect.construct) {
22648    if (!valueOrFalseIfThrows(function () {
22649      var F = function F() {};
22650      return globals.Reflect.construct(function () {}, [], F) instanceof F;
22651    })) {
22652      overrideNative(globals.Reflect, 'construct', ReflectShims.construct);
22653    }
22654  }
22655
22656  if (String(new Date(NaN)) !== 'Invalid Date') {
22657    var dateToString = Date.prototype.toString;
22658    var shimmedDateToString = function toString() {
22659      var valueOf = +this;
22660      if (valueOf !== valueOf) {
22661        return 'Invalid Date';
22662      }
22663      return ES.Call(dateToString, this);
22664    };
22665    overrideNative(Date.prototype, 'toString', shimmedDateToString);
22666  }
22667
22668  // Annex B HTML methods
22669  // http://www.ecma-international.org/ecma-262/6.0/#sec-additional-properties-of-the-string.prototype-object
22670  var stringHTMLshims = {
22671    anchor: function anchor(name) { return ES.CreateHTML(this, 'a', 'name', name); },
22672    big: function big() { return ES.CreateHTML(this, 'big', '', ''); },
22673    blink: function blink() { return ES.CreateHTML(this, 'blink', '', ''); },
22674    bold: function bold() { return ES.CreateHTML(this, 'b', '', ''); },
22675    fixed: function fixed() { return ES.CreateHTML(this, 'tt', '', ''); },
22676    fontcolor: function fontcolor(color) { return ES.CreateHTML(this, 'font', 'color', color); },
22677    fontsize: function fontsize(size) { return ES.CreateHTML(this, 'font', 'size', size); },
22678    italics: function italics() { return ES.CreateHTML(this, 'i', '', ''); },
22679    link: function link(url) { return ES.CreateHTML(this, 'a', 'href', url); },
22680    small: function small() { return ES.CreateHTML(this, 'small', '', ''); },
22681    strike: function strike() { return ES.CreateHTML(this, 'strike', '', ''); },
22682    sub: function sub() { return ES.CreateHTML(this, 'sub', '', ''); },
22683    sup: function sub() { return ES.CreateHTML(this, 'sup', '', ''); }
22684  };
22685  _forEach(Object.keys(stringHTMLshims), function (key) {
22686    var method = String.prototype[key];
22687    var shouldOverwrite = false;
22688    if (ES.IsCallable(method)) {
22689      var output = _call(method, '', ' " ');
22690      var quotesCount = _concat([], output.match(/"/g)).length;
22691      shouldOverwrite = output !== output.toLowerCase() || quotesCount > 2;
22692    } else {
22693      shouldOverwrite = true;
22694    }
22695    if (shouldOverwrite) {
22696      overrideNative(String.prototype, key, stringHTMLshims[key]);
22697    }
22698  });
22699
22700  var JSONstringifiesSymbols = (function () {
22701    // Microsoft Edge v0.12 stringifies Symbols incorrectly
22702    if (!hasSymbols) { return false; } // Symbols are not supported
22703    var stringify = typeof JSON === 'object' && typeof JSON.stringify === 'function' ? JSON.stringify : null;
22704    if (!stringify) { return false; } // JSON.stringify is not supported
22705    if (typeof stringify(Symbol()) !== 'undefined') { return true; } // Symbols should become `undefined`
22706    if (stringify([Symbol()]) !== '[null]') { return true; } // Symbols in arrays should become `null`
22707    var obj = { a: Symbol() };
22708    obj[Symbol()] = true;
22709    if (stringify(obj) !== '{}') { return true; } // Symbol-valued keys *and* Symbol-valued properties should be omitted
22710    return false;
22711  }());
22712  var JSONstringifyAcceptsObjectSymbol = valueOrFalseIfThrows(function () {
22713    // Chrome 45 throws on stringifying object symbols
22714    if (!hasSymbols) { return true; } // Symbols are not supported
22715    return JSON.stringify(Object(Symbol())) === '{}' && JSON.stringify([Object(Symbol())]) === '[{}]';
22716  });
22717  if (JSONstringifiesSymbols || !JSONstringifyAcceptsObjectSymbol) {
22718    var origStringify = JSON.stringify;
22719    overrideNative(JSON, 'stringify', function stringify(value) {
22720      if (typeof value === 'symbol') { return; }
22721      var replacer;
22722      if (arguments.length > 1) {
22723        replacer = arguments[1];
22724      }
22725      var args = [value];
22726      if (!isArray(replacer)) {
22727        var replaceFn = ES.IsCallable(replacer) ? replacer : null;
22728        var wrappedReplacer = function (key, val) {
22729          var parsedValue = replaceFn ? _call(replaceFn, this, key, val) : val;
22730          if (typeof parsedValue !== 'symbol') {
22731            if (Type.symbol(parsedValue)) {
22732              return assignTo({})(parsedValue);
22733            }
22734            return parsedValue;
22735
22736          }
22737        };
22738        args.push(wrappedReplacer);
22739      } else {
22740        // create wrapped replacer that handles an array replacer?
22741        args.push(replacer);
22742      }
22743      if (arguments.length > 2) {
22744        args.push(arguments[2]);
22745      }
22746      return origStringify.apply(this, args);
22747    });
22748  }
22749
22750  return globals;
22751}));
22752
22753}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
22754},{"_process":137}],86:[function(require,module,exports){
22755'use strict';
22756
22757var proto = require('./Array.prototype');
22758
22759module.exports = {
22760	prototype: proto,
22761	shim: function shimArray() {
22762		proto.shim();
22763	}
22764};
22765
22766},{"./Array.prototype":88}],87:[function(require,module,exports){
22767'use strict';
22768
22769module.exports = require('array-includes');
22770
22771},{"array-includes":4}],88:[function(require,module,exports){
22772'use strict';
22773
22774var includes = require('./Array.prototype.includes');
22775
22776module.exports = {
22777	includes: includes,
22778	shim: function shimArrayPrototype() {
22779		includes.shim();
22780	}
22781};
22782
22783},{"./Array.prototype.includes":87}],89:[function(require,module,exports){
22784'use strict';
22785
22786var getDescriptors = require('object.getownpropertydescriptors');
22787var entries = require('object.entries');
22788var values = require('object.values');
22789
22790module.exports = {
22791	entries: entries,
22792	getOwnPropertyDescriptors: getDescriptors,
22793	shim: function shimObject() {
22794		getDescriptors.shim();
22795		entries.shim();
22796		values.shim();
22797	},
22798	values: values
22799};
22800
22801},{"object.entries":126,"object.getownpropertydescriptors":130,"object.values":134}],90:[function(require,module,exports){
22802'use strict';
22803
22804var stringPrototype = require('./String.prototype');
22805
22806module.exports = {
22807	prototype: stringPrototype,
22808	shim: function shimString() {
22809		stringPrototype.shim();
22810	}
22811};
22812
22813},{"./String.prototype":92}],91:[function(require,module,exports){
22814'use strict';
22815
22816module.exports = require('string-at');
22817
22818},{"string-at":143}],92:[function(require,module,exports){
22819'use strict';
22820
22821var at = require('./String.prototype.at');
22822var padStart = require('./String.prototype.padStart');
22823var padEnd = require('./String.prototype.padEnd');
22824var trimLeft = require('./String.prototype.trimLeft');
22825var trimRight = require('./String.prototype.trimRight');
22826
22827module.exports = {
22828	at: at,
22829	padStart: padStart,
22830	padEnd: padEnd,
22831	trimLeft: trimLeft,
22832	trimRight: trimRight,
22833	shim: function shimStringPrototype() {
22834		at.shim();
22835		padStart.shim();
22836		padEnd.shim();
22837		trimLeft.shim();
22838		trimRight.shim();
22839	}
22840};
22841
22842},{"./String.prototype.at":91,"./String.prototype.padEnd":93,"./String.prototype.padStart":94,"./String.prototype.trimLeft":95,"./String.prototype.trimRight":96}],93:[function(require,module,exports){
22843'use strict';
22844
22845module.exports = require('string.prototype.padend');
22846
22847},{"string.prototype.padend":145}],94:[function(require,module,exports){
22848'use strict';
22849
22850module.exports = require('string.prototype.padstart');
22851
22852},{"string.prototype.padstart":149}],95:[function(require,module,exports){
22853'use strict';
22854
22855module.exports = require('string.prototype.trimleft');
22856
22857},{"string.prototype.trimleft":158}],96:[function(require,module,exports){
22858'use strict';
22859
22860module.exports = require('string.prototype.trimright');
22861
22862},{"string.prototype.trimright":162}],97:[function(require,module,exports){
22863'use strict';
22864
22865module.exports = require('./es7-shim').shim();
22866
22867},{"./es7-shim":98}],98:[function(require,module,exports){
22868/*!
22869 * https://github.com/es-shims/es7-shim
22870 * @license es7-shim Copyright 2014 by contributors, MIT License
22871 * see https://github.com/es-shims/es7-shim/blob/master/LICENSE
22872 */
22873
22874'use strict';
22875
22876var $Array = require('./Array');
22877var $Object = require('./Object');
22878var $String = require('./String');
22879
22880module.exports = {
22881	Array: $Array,
22882	Object: $Object,
22883	String: $String,
22884	shim: function shimES7() {
22885		$Array.shim();
22886		$Object.shim();
22887		$String.shim();
22888	}
22889};
22890
22891},{"./Array":86,"./Object":89,"./String":90}],99:[function(require,module,exports){
22892'use strict';
22893
22894/* eslint no-invalid-this: 1 */
22895
22896var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
22897var toStr = Object.prototype.toString;
22898var max = Math.max;
22899var funcType = '[object Function]';
22900
22901var concatty = function concatty(a, b) {
22902    var arr = [];
22903
22904    for (var i = 0; i < a.length; i += 1) {
22905        arr[i] = a[i];
22906    }
22907    for (var j = 0; j < b.length; j += 1) {
22908        arr[j + a.length] = b[j];
22909    }
22910
22911    return arr;
22912};
22913
22914var slicy = function slicy(arrLike, offset) {
22915    var arr = [];
22916    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {
22917        arr[j] = arrLike[i];
22918    }
22919    return arr;
22920};
22921
22922var joiny = function (arr, joiner) {
22923    var str = '';
22924    for (var i = 0; i < arr.length; i += 1) {
22925        str += arr[i];
22926        if (i + 1 < arr.length) {
22927            str += joiner;
22928        }
22929    }
22930    return str;
22931};
22932
22933module.exports = function bind(that) {
22934    var target = this;
22935    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {
22936        throw new TypeError(ERROR_MESSAGE + target);
22937    }
22938    var args = slicy(arguments, 1);
22939
22940    var bound;
22941    var binder = function () {
22942        if (this instanceof bound) {
22943            var result = target.apply(
22944                this,
22945                concatty(args, arguments)
22946            );
22947            if (Object(result) === result) {
22948                return result;
22949            }
22950            return this;
22951        }
22952        return target.apply(
22953            that,
22954            concatty(args, arguments)
22955        );
22956
22957    };
22958
22959    var boundLength = max(0, target.length - args.length);
22960    var boundArgs = [];
22961    for (var i = 0; i < boundLength; i++) {
22962        boundArgs[i] = '$' + i;
22963    }
22964
22965    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);
22966
22967    if (target.prototype) {
22968        var Empty = function Empty() {};
22969        Empty.prototype = target.prototype;
22970        bound.prototype = new Empty();
22971        Empty.prototype = null;
22972    }
22973
22974    return bound;
22975};
22976
22977},{}],100:[function(require,module,exports){
22978'use strict';
22979
22980var implementation = require('./implementation');
22981
22982module.exports = Function.prototype.bind || implementation;
22983
22984},{"./implementation":99}],101:[function(require,module,exports){
22985'use strict';
22986
22987var undefined;
22988
22989var $Error = require('es-errors');
22990var $EvalError = require('es-errors/eval');
22991var $RangeError = require('es-errors/range');
22992var $ReferenceError = require('es-errors/ref');
22993var $SyntaxError = require('es-errors/syntax');
22994var $TypeError = require('es-errors/type');
22995var $URIError = require('es-errors/uri');
22996
22997var $Function = Function;
22998
22999// eslint-disable-next-line consistent-return
23000var getEvalledConstructor = function (expressionSyntax) {
23001	try {
23002		return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
23003	} catch (e) {}
23004};
23005
23006var $gOPD = Object.getOwnPropertyDescriptor;
23007if ($gOPD) {
23008	try {
23009		$gOPD({}, '');
23010	} catch (e) {
23011		$gOPD = null; // this is IE 8, which has a broken gOPD
23012	}
23013}
23014
23015var throwTypeError = function () {
23016	throw new $TypeError();
23017};
23018var ThrowTypeError = $gOPD
23019	? (function () {
23020		try {
23021			// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
23022			arguments.callee; // IE 8 does not throw here
23023			return throwTypeError;
23024		} catch (calleeThrows) {
23025			try {
23026				// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
23027				return $gOPD(arguments, 'callee').get;
23028			} catch (gOPDthrows) {
23029				return throwTypeError;
23030			}
23031		}
23032	}())
23033	: throwTypeError;
23034
23035var hasSymbols = require('has-symbols')();
23036var hasProto = require('has-proto')();
23037
23038var getProto = Object.getPrototypeOf || (
23039	hasProto
23040		? function (x) { return x.__proto__; } // eslint-disable-line no-proto
23041		: null
23042);
23043
23044var needsEval = {};
23045
23046var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);
23047
23048var INTRINSICS = {
23049	__proto__: null,
23050	'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,
23051	'%Array%': Array,
23052	'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
23053	'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,
23054	'%AsyncFromSyncIteratorPrototype%': undefined,
23055	'%AsyncFunction%': needsEval,
23056	'%AsyncGenerator%': needsEval,
23057	'%AsyncGeneratorFunction%': needsEval,
23058	'%AsyncIteratorPrototype%': needsEval,
23059	'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
23060	'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,
23061	'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,
23062	'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,
23063	'%Boolean%': Boolean,
23064	'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
23065	'%Date%': Date,
23066	'%decodeURI%': decodeURI,
23067	'%decodeURIComponent%': decodeURIComponent,
23068	'%encodeURI%': encodeURI,
23069	'%encodeURIComponent%': encodeURIComponent,
23070	'%Error%': $Error,
23071	'%eval%': eval, // eslint-disable-line no-eval
23072	'%EvalError%': $EvalError,
23073	'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
23074	'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
23075	'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,
23076	'%Function%': $Function,
23077	'%GeneratorFunction%': needsEval,
23078	'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
23079	'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
23080	'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
23081	'%isFinite%': isFinite,
23082	'%isNaN%': isNaN,
23083	'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,
23084	'%JSON%': typeof JSON === 'object' ? JSON : undefined,
23085	'%Map%': typeof Map === 'undefined' ? undefined : Map,
23086	'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),
23087	'%Math%': Math,
23088	'%Number%': Number,
23089	'%Object%': Object,
23090	'%parseFloat%': parseFloat,
23091	'%parseInt%': parseInt,
23092	'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
23093	'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
23094	'%RangeError%': $RangeError,
23095	'%ReferenceError%': $ReferenceError,
23096	'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
23097	'%RegExp%': RegExp,
23098	'%Set%': typeof Set === 'undefined' ? undefined : Set,
23099	'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),
23100	'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
23101	'%String%': String,
23102	'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,
23103	'%Symbol%': hasSymbols ? Symbol : undefined,
23104	'%SyntaxError%': $SyntaxError,
23105	'%ThrowTypeError%': ThrowTypeError,
23106	'%TypedArray%': TypedArray,
23107	'%TypeError%': $TypeError,
23108	'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
23109	'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
23110	'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
23111	'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
23112	'%URIError%': $URIError,
23113	'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
23114	'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,
23115	'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet
23116};
23117
23118if (getProto) {
23119	try {
23120		null.error; // eslint-disable-line no-unused-expressions
23121	} catch (e) {
23122		// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229
23123		var errorProto = getProto(getProto(e));
23124		INTRINSICS['%Error.prototype%'] = errorProto;
23125	}
23126}
23127
23128var doEval = function doEval(name) {
23129	var value;
23130	if (name === '%AsyncFunction%') {
23131		value = getEvalledConstructor('async function () {}');
23132	} else if (name === '%GeneratorFunction%') {
23133		value = getEvalledConstructor('function* () {}');
23134	} else if (name === '%AsyncGeneratorFunction%') {
23135		value = getEvalledConstructor('async function* () {}');
23136	} else if (name === '%AsyncGenerator%') {
23137		var fn = doEval('%AsyncGeneratorFunction%');
23138		if (fn) {
23139			value = fn.prototype;
23140		}
23141	} else if (name === '%AsyncIteratorPrototype%') {
23142		var gen = doEval('%AsyncGenerator%');
23143		if (gen && getProto) {
23144			value = getProto(gen.prototype);
23145		}
23146	}
23147
23148	INTRINSICS[name] = value;
23149
23150	return value;
23151};
23152
23153var LEGACY_ALIASES = {
23154	__proto__: null,
23155	'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],
23156	'%ArrayPrototype%': ['Array', 'prototype'],
23157	'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],
23158	'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],
23159	'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],
23160	'%ArrayProto_values%': ['Array', 'prototype', 'values'],
23161	'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],
23162	'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],
23163	'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],
23164	'%BooleanPrototype%': ['Boolean', 'prototype'],
23165	'%DataViewPrototype%': ['DataView', 'prototype'],
23166	'%DatePrototype%': ['Date', 'prototype'],
23167	'%ErrorPrototype%': ['Error', 'prototype'],
23168	'%EvalErrorPrototype%': ['EvalError', 'prototype'],
23169	'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],
23170	'%Float6
vendor: 9,302 bytes, lines 23170-23437
231704ArrayPrototype%': ['Float64Array', 'prototype'],
23171	'%FunctionPrototype%': ['Function', 'prototype'],
23172	'%Generator%': ['GeneratorFunction', 'prototype'],
23173	'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],
23174	'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],
23175	'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],
23176	'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],
23177	'%JSONParse%': ['JSON', 'parse'],
23178	'%JSONStringify%': ['JSON', 'stringify'],
23179	'%MapPrototype%': ['Map', 'prototype'],
23180	'%NumberPrototype%': ['Number', 'prototype'],
23181	'%ObjectPrototype%': ['Object', 'prototype'],
23182	'%ObjProto_toString%': ['Object', 'prototype', 'toString'],
23183	'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],
23184	'%PromisePrototype%': ['Promise', 'prototype'],
23185	'%PromiseProto_then%': ['Promise', 'prototype', 'then'],
23186	'%Promise_all%': ['Promise', 'all'],
23187	'%Promise_reject%': ['Promise', 'reject'],
23188	'%Promise_resolve%': ['Promise', 'resolve'],
23189	'%RangeErrorPrototype%': ['RangeError', 'prototype'],
23190	'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],
23191	'%RegExpPrototype%': ['RegExp', 'prototype'],
23192	'%SetPrototype%': ['Set', 'prototype'],
23193	'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],
23194	'%StringPrototype%': ['String', 'prototype'],
23195	'%SymbolPrototype%': ['Symbol', 'prototype'],
23196	'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],
23197	'%TypedArrayPrototype%': ['TypedArray', 'prototype'],
23198	'%TypeErrorPrototype%': ['TypeError', 'prototype'],
23199	'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],
23200	'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],
23201	'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],
23202	'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],
23203	'%URIErrorPrototype%': ['URIError', 'prototype'],
23204	'%WeakMapPrototype%': ['WeakMap', 'prototype'],
23205	'%WeakSetPrototype%': ['WeakSet', 'prototype']
23206};
23207
23208var bind = require('function-bind');
23209var hasOwn = require('hasown');
23210var $concat = bind.call(Function.call, Array.prototype.concat);
23211var $spliceApply = bind.call(Function.apply, Array.prototype.splice);
23212var $replace = bind.call(Function.call, String.prototype.replace);
23213var $strSlice = bind.call(Function.call, String.prototype.slice);
23214var $exec = bind.call(Function.call, RegExp.prototype.exec);
23215
23216/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
23217var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
23218var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
23219var stringToPath = function stringToPath(string) {
23220	var first = $strSlice(string, 0, 1);
23221	var last = $strSlice(string, -1);
23222	if (first === '%' && last !== '%') {
23223		throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');
23224	} else if (last === '%' && first !== '%') {
23225		throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');
23226	}
23227	var result = [];
23228	$replace(string, rePropName, function (match, number, quote, subString) {
23229		result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;
23230	});
23231	return result;
23232};
23233/* end adaptation */
23234
23235var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
23236	var intrinsicName = name;
23237	var alias;
23238	if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
23239		alias = LEGACY_ALIASES[intrinsicName];
23240		intrinsicName = '%' + alias[0] + '%';
23241	}
23242
23243	if (hasOwn(INTRINSICS, intrinsicName)) {
23244		var value = INTRINSICS[intrinsicName];
23245		if (value === needsEval) {
23246			value = doEval(intrinsicName);
23247		}
23248		if (typeof value === 'undefined' && !allowMissing) {
23249			throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
23250		}
23251
23252		return {
23253			alias: alias,
23254			name: intrinsicName,
23255			value: value
23256		};
23257	}
23258
23259	throw new $SyntaxError('intrinsic ' + name + ' does not exist!');
23260};
23261
23262module.exports = function GetIntrinsic(name, allowMissing) {
23263	if (typeof name !== 'string' || name.length === 0) {
23264		throw new $TypeError('intrinsic name must be a non-empty string');
23265	}
23266	if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
23267		throw new $TypeError('"allowMissing" argument must be a boolean');
23268	}
23269
23270	if ($exec(/^%?[^%]*%?$/, name) === null) {
23271		throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');
23272	}
23273	var parts = stringToPath(name);
23274	var intrinsicBaseName = parts.length > 0 ? parts[0] : '';
23275
23276	var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);
23277	var intrinsicRealName = intrinsic.name;
23278	var value = intrinsic.value;
23279	var skipFurtherCaching = false;
23280
23281	var alias = intrinsic.alias;
23282	if (alias) {
23283		intrinsicBaseName = alias[0];
23284		$spliceApply(parts, $concat([0, 1], alias));
23285	}
23286
23287	for (var i = 1, isOwn = true; i < parts.length; i += 1) {
23288		var part = parts[i];
23289		var first = $strSlice(part, 0, 1);
23290		var last = $strSlice(part, -1);
23291		if (
23292			(
23293				(first === '"' || first === "'" || first === '`')
23294				|| (last === '"' || last === "'" || last === '`')
23295			)
23296			&& first !== last
23297		) {
23298			throw new $SyntaxError('property names with quotes must have matching quotes');
23299		}
23300		if (part === 'constructor' || !isOwn) {
23301			skipFurtherCaching = true;
23302		}
23303
23304		intrinsicBaseName += '.' + part;
23305		intrinsicRealName = '%' + intrinsicBaseName + '%';
23306
23307		if (hasOwn(INTRINSICS, intrinsicRealName)) {
23308			value = INTRINSICS[intrinsicRealName];
23309		} else if (value != null) {
23310			if (!(part in value)) {
23311				if (!allowMissing) {
23312					throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
23313				}
23314				return void undefined;
23315			}
23316			if ($gOPD && (i + 1) >= parts.length) {
23317				var desc = $gOPD(value, part);
23318				isOwn = !!desc;
23319
23320				// By convention, when a data property is converted to an accessor
23321				// property to emulate a data property that does not suffer from
23322				// the override mistake, that accessor's getter is marked with
23323				// an `originalValue` property. Here, when we detect this, we
23324				// uphold the illusion by pretending to see that original data
23325				// property, i.e., returning the value rather than the getter
23326				// itself.
23327				if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {
23328					value = desc.get;
23329				} else {
23330					value = value[part];
23331				}
23332			} else {
23333				isOwn = hasOwn(value, part);
23334				value = value[part];
23335			}
23336
23337			if (isOwn && !skipFurtherCaching) {
23338				INTRINSICS[intrinsicRealName] = value;
23339			}
23340		}
23341	}
23342	return value;
23343};
23344
23345},{"es-errors":73,"es-errors/eval":72,"es-errors/range":74,"es-errors/ref":75,"es-errors/syntax":76,"es-errors/type":77,"es-errors/uri":78,"function-bind":100,"has-proto":104,"has-symbols":105,"hasown":108}],102:[function(require,module,exports){
23346'use strict';
23347
23348var GetIntrinsic = require('get-intrinsic');
23349
23350var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
23351
23352if ($gOPD) {
23353	try {
23354		$gOPD([], 'length');
23355	} catch (e) {
23356		// IE 8 has a broken gOPD
23357		$gOPD = null;
23358	}
23359}
23360
23361module.exports = $gOPD;
23362
23363},{"get-intrinsic":101}],103:[function(require,module,exports){
23364'use strict';
23365
23366var $defineProperty = require('es-define-property');
23367
23368var hasPropertyDescriptors = function hasPropertyDescriptors() {
23369	return !!$defineProperty;
23370};
23371
23372hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {
23373	// node v0.6 has a bug where array lengths can be Set but not Defined
23374	if (!$defineProperty) {
23375		return null;
23376	}
23377	try {
23378		return $defineProperty([], 'length', { value: 1 }).length !== 1;
23379	} catch (e) {
23380		// In Firefox 4-22, defining length on an array throws an exception.
23381		return true;
23382	}
23383};
23384
23385module.exports = hasPropertyDescriptors;
23386
23387},{"es-define-property":71}],104:[function(require,module,exports){
23388'use strict';
23389
23390var test = {
23391	__proto__: null,
23392	foo: {}
23393};
23394
23395var $Object = Object;
23396
23397/** @type {import('.')} */
23398module.exports = function hasProto() {
23399	// @ts-expect-error: TS errors on an inherited property for some reason
23400	return { __proto__: test }.foo === test.foo
23401		&& !(test instanceof $Object);
23402};
23403
23404},{}],105:[function(require,module,exports){
23405'use strict';
23406
23407var origSymbol = typeof Symbol !== 'undefined' && Symbol;
23408var hasSymbolSham = require('./shams');
23409
23410module.exports = function hasNativeSymbols() {
23411	if (typeof origSymbol !== 'function') { return false; }
23412	if (typeof Symbol !== 'function') { return false; }
23413	if (typeof origSymbol('foo') !== 'symbol') { return false; }
23414	if (typeof Symbol('bar') !== 'symbol') { return false; }
23415
23416	return hasSymbolSham();
23417};
23418
23419},{"./shams":106}],106:[function(require,module,exports){
23420'use strict';
23421
23422/* eslint complexity: [2, 18], max-statements: [2, 33] */
23423module.exports = function hasSymbols() {
23424	if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
23425	if (typeof Symbol.iterator === 'symbol') { return true; }
23426
23427	var obj = {};
23428	var sym = Symbol('test');
23429	var symObj = Object(sym);
23430	if (typeof sym === 'string') { return false; }
23431
23432	if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
23433	if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
23434
23435	// temp disabled per https://github.com/ljharb/object.assign/issues/17
23436	// if (sym instanceof Symbol) { return false; }
23437	// temp disabled per https://github.com/WebReflection/get-own-property-symbol
23437s/issues/4
23438	// if (!(symObj instanceof Symbol)) { return false; }
23439
23440	// if (typeof Symbol.prototype.toString !== 'function') { return false; }
23441	// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
23442
23443	var symVal = 42;
23444	obj[sym] = symVal;
23445	for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
23446	if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
23447
23448	if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
23449
23450	var syms = Object.getOwnPropertySymbols(obj);
23451	if (syms.length !== 1 || syms[0] !== sym) { return false; }
23452
23453	if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
23454
23455	if (typeof Object.getOwnPropertyDescriptor === 'function') {
23456		var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
23457		if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
23458	}
23459
23460	return true;
23461};
23462
23463},{}],107:[function(require,module,exports){
23464'use strict';
23465
23466var hasSymbols = require('has-symbols/shams');
23467
23468/** @type {import('.')} */
23469module.exports = function hasToStringTagShams() {
23470	return hasSymbols() && !!Symbol.toStringTag;
23471};
23472
23473},{"has-symbols/shams":106}],108:[function(require,module,exports){
23474'use strict';
23475
23476var call = Function.prototype.call;
23477var $hasOwn = Object.prototype.hasOwnProperty;
23478var bind = require('function-bind');
23479
23480/** @type {import('.')} */
23481module.exports = bind.call(call, $hasOwn);
23482
23483},{"function-bind":100}],109:[function(require,module,exports){
23484!/**
23485 * Highcharts JS v11.4.3 (2024-05-22)
23486 *
23487 * (c) 2009-2024 Torstein Honsi
23488 *
23489 * License: www.highcharts.com/license
23490 */function(t){"object"==typeof module&&module.exports?(t.default=t,module.exports=t):"function"==typeof define&&define.amd?define("highcharts/highcharts-more",["highcharts"],function(e){return t(e),t.Highcharts=e,t}):t("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(t){"use strict";var e=t?t._modules:{};function i(t,e,i,s){t.hasOwnProperty(e)||(t[e]=s.apply(null,i),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:e,module:t[e]}})))}i(e,"Extensions/Pane/PaneComposition.js",[e["Core/Utilities.js"]],function(t){let{addEvent:e,correctFloat:i,defined:s,pick:o}=t;function a(t){let e;let i=this;return t&&i.pane.forEach(s=>{r(t.chartX-i.plotLeft,t.chartY-i.plotTop,s.center)&&(e=s)}),e}function r(t,e,o,a,r){let n=!0,l=o[0],h=o[1];if(s(a)&&s(r)){let s=Math.atan2(i(e-h,8),i(t-l,8));r!==a&&(n=a>r?s>=a&&s<=Math.PI||s<=r&&s>=-Math.PI:s>=a&&s<=i(r,8))}return Math.sqrt(Math.pow(t-l,2)+Math.pow(e-h,2))<=Math.ceil(o[2]/2)&&n}function n(t){this.polar&&(t.options.inverted&&([t.x,t.y]=[t.y,t.x]),t.isInsidePlot=this.pane.some(e=>r(t.x,t.y,e.center,e.axis&&e.axis.normalizedStartAngleRad,e.axis&&e.axis.normalizedEndAngleRad)))}function l(t){let e=this.chart;t.hoverPoint&&t.hoverPoint.plotX&&t.hoverPoint.plotY&&e.hoverPane&&!r(t.hoverPoint.plotX,t.hoverPoint.plotY,e.hoverPane.center)&&(t.hoverPoint=void 0)}function h(t){let e=this.chart;e.polar?(e.hoverPane=e.getHoverPane(t),t.filter=function(i){return i.visible&&!(!t.shared&&i.directTouch)&&o(i.options.enableMouseTracking,!0)&&(!e.hoverPane||i.xAxis.pane===e.hoverPane)}):e.hoverPane=void 0}return{compose:function(t,i){let s=t.prototype;s.getHoverPane||(s.collectionsWithUpdate.push("pane"),s.getHoverPane=a,e(t,"afterIsInsidePlot",n),e(i,"afterGetHoverData",l),e(i,"beforeGetHoverData",h))}}}),i(e,"Extensions/Pane/PaneDefaults.js",[],function(){return{pane:{center:["50%","50%"],size:"85%",innerSize:"0%",startAngle:0},background:{shape:"circle",borderRadius:0,borderWidth:1,borderColor:"#cccccc",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#ffffff"],[1,"#e6e6e6"]]},from:-Number.MAX_VALUE,innerRadius:0,to:Number.MAX_VALUE,outerRadius:"105%"}}}),i(e,"Extensions/Pane/Pane.js",[e["Series/CenteredUtilities.js"],e["Extensions/Pane/PaneComposition.js"],e["Extensions/Pane/PaneDefaults.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{extend:o,merge:a,splat:r}=s;class n{constructor(t,e){this.coll="pane",this.init(t,e)}init(t,e){this.chart=e,this.background=[],e.pane.push(this),this.setOptions(t)}setOptions(t){this.options=t=a(i.pane,this.chart.angular?{background:{}}:void 0,t)}render(){let t=this.options,e=this.chart.renderer;this.group||(this.group=e.g("pane-group").attr({zIndex:t.zIndex||
234900}).add()),this.updateCenter();let s=this.options.background;if(s){let t=Math.max((s=r(s)).length,this.background.length||0);for(let e=0;e<t;e++)s[e]&&this.axis?this.renderBackground(a(i.background,s[e]),e):this.background[e]&&(this.background[e]=this.background[e].destroy(),this.background.splice(e,1))}}renderBackground(t,e){let i={class:"highcharts-pane "+(t.className||"")},s="animate";this.chart.styledMode||o(i,{fill:t.backgroundColor,stroke:t.borderColor,"stroke-width":t.borderWidth}),this.background[e]||(this.background[e]=this.chart.renderer.path().add(this.group),s="attr"),this.background[e][s]({d:this.axis.getPlotBandPath(t.from,t.to,t)}).attr(i)}updateCenter(e){this.center=(e||this.axis||{}).center=t.getCenter.call(this)}update(t,e){a(!0,this.options,t),this.setOptions(this.options),this.render(),this.chart.axes.forEach(function(t){t.pane===this&&(t.pane=null,t.update({},e))},this)}}return n.compose=e.compose,n}),i(e,"Series/AreaRange/AreaRangePoint.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{area:{prototype:{pointClass:i,pointClass:{prototype:s}}}}=t.seriesTypes,{defined:o,isNumber:a}=e;return class extends i{setState(){let t=this.state,e=this.series,i=e.chart.polar;o(this.plotHigh)||(this.plotHigh=e.yAxis.toPixels(this.high,!0)),o(this.plotLow)||(this.plotLow=this.plotY=e.yAxis.toPixels(this.low,!0)),e.lowerStateMarkerGraphic=e.stateMarkerGraphic,e.stateMarkerGraphic=e.upperStateMarkerGraphic,this.graphic=this.graphics&&this.graphics[1],this.plotY=this.plotHigh,i&&a(this.plotHighX)&&(this.plotX=this.plotHighX),s.setState.apply(this,arguments),this.state=t,this.plotY=this.plotLow,this.graphic=this.graphics&&this.graphics[0],i&&a(this.plotLowX)&&(this.plotX=this.plotLowX),e.upperStateMarkerGraphic=e.stateMarkerGraphic,e.stateMarkerGraphic=e.lowerStateMarkerGraphic,e.lowerStateMarkerGraphic=void 0;let r=e.modifyMarkerSettings();s.setState.apply(this,arguments),e.restoreMarkerSettings(r)}haloPath(){let t=this.series.chart.polar,e=[];return this.plotY=this.plotLow,t&&a(this.plotLowX)&&(this.plotX=this.plotLowX),this.isInside&&(e=s.haloPath.apply(this,arguments)),this.plotY=this.plotHigh,t&&a(this.plotHighX)&&(this.plotX=this.plotHighX),this.isTopInside&&(e=e.concat(s.haloPath.apply(this,arguments))),e}isValid(){return a(this.low)&&a(this.high)}}}),i(e,"Series/AreaRange/AreaRangeSeries.js",[e["Series/AreaRange/AreaRangePoint.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{noop:o}=e,{area:a,area:{prototype:r},column:{prototype:n}}=i.seriesTypes,{addEvent:l,defined:h,extend:p,isArray:d,isNumber:c,pick:u,merge:g}=s;class f extends a{toYData(t){return[t.low,t.high]}highToXY(t){let e=this.chart,i=this.xAxis.postTranslate(t.rectPlotX||0,this.yAxis.len-(t.plotHigh||0));t.plotHighX=i.x-e.plotLeft,t.plotHigh=i.y-e.plotTop,t.plotLowX=t.plotX}getGraphPath(t){let e=[],i=[],s=r.getGraphPath,o=this.options,a=this.chart.polar,n=a&&!1!==o.connectEnds,l=o.connectNulls,h,p,d,c=o.step;for(h=(t=t||this.points).length;h--;){p=t[h];let s=a?{plotX:p.rectPlotX,plotY:p.yBottom,doCurve:!1}:{plotX:p.plotX,plotY:p.plotY,doCurve:!1};p.isNull||n||l||t[h+1]&&!t[h+1].isNull||i.push(s),d={polarPlotY:p.polarPlotY,rectPlotX:p.rectPlotX,yBottom:p.yBottom,plotX:u(p.plotHighX,p.plotX),plotY:p.plotHigh,isNull:p.isNull},i.push(d),e.push(d),p.isNull||n||l||t[h-1]&&!t[h-1].isNull||i.push(s)}let g=s.call(this,t);c&&(!0===c&&(c="left"),o.step=({left:"right",center:"center",right:"left"})[c]);let f=s.call(this,e),b=s.call(this,i);o.step=c;let m=[].concat(g,f);return!this.chart.polar&&b[0]&&"M"===b[0][0]&&(b[0]=["L",b[0][1],b[0][2]]),this.graphPath=m,this.areaPath=g.concat(b),m.isArea=!0,m.xMap=g.xMap,this.areaPath.xMap=g.xMap,m}drawDataLabels(){let t,e,i,s,o;let a=this.points,n=a.length,l=[],h=this.options.dataLabels,c=this.chart.inverted;if(h){if(d(h)?(s=h[0]||{enabled:!1},o=h[1]||{enabled:!1}):((s=p({},h)).x=h.xHigh,s.y=h.yHigh,(o=p({},h)).x=h.xLow,o.y=h.yLow),s.enabled||this.hasDataLabels?.()){for(t=n;t--;)if(e=a[t]){let{plotHigh:o=0,plotLow:a=0}=e;i=s.inside?o<a:o>a,e.y=e.high,e._plotY=e.plotY,e.plotY=o,l[t]=e.dataLabel,e.dataLabel=e.dataLabelUpper,e.below=i,c?s.align||(s.align=i?"right":"left"):s.verticalAlign||(s.verticalAlign=i?"top":"bottom")}for(this.options.dataLabels=s,r.drawDataLabels&&r.drawDataLabels.apply(this,arguments),t=n;t--;)(e=a[t])&&(e.dataLabelUpper=e.dataLabel,e.dataLabel=l[t],delete e.dataLabels,e.y=e.low,e.plotY=e._plotY)}if(o.enabled||this.hasDataLabels?.()){for(t=n;t--;)if(e=a[t]){let{plotHigh:t=0,plotLow:s=0}=e;i=o.inside?t<s:t>s,e.below=!i,c?o.align||(o.align=i?"left":"right"):o.verticalAlign||(o.verticalAlign=i?"bottom":"top")}this.options.dataLabels=o,r.drawDataLabels&&r.drawDataLabels.apply(this,arguments)}if(s.enabled)for(t=n;t--;)(e=a[t])&&(e.dataLabels=[e.dataLabelUpper,e.dataLabel].filter(function(t){return!!t}));this.options.dataLabels=h}}alignDataLabel(){n.alignDataLabel.apply(this,arguments)}
23490modifyMarkerSettings(){let t={marker:this.options.marker,symbol:this.symbol};if(this.options.lowMarker){let{options:{marker:t,lowMarker:e}}=this;this.options.marker=g(t,e),e.symbol&&(this.symbol=e.symbol)}return t}restoreMarkerSettings(t){this.options.marker=t.marker,this.symbol=t.symbol}drawPoints(){let t,e;let i=this.points.length,s=this.modifyMarkerSettings();for(r.drawPoints.apply(this,arguments),this.restoreMarkerSettings(s),t=0;t<i;)(e=this.points[t]).graphics=e.graphics||[],e.origProps={plotY:e.plotY,plotX:e.plotX,isInside:e.isInside,negative:e.negative,zone:e.zone,y:e.y},(e.graphic||e.graphics[0])&&(e.graphics[0]=e.graphic),e.graphic=e.graphics[1],e.plotY=e.plotHigh,h(e.plotHighX)&&(e.plotX=e.plotHighX),e.y=u(e.high,e.origProps.y),e.negative=e.y<(this.options.threshold||0),this.zones.length&&(e.zone=e.getZone()),this.chart.polar||(e.isInside=e.isTopInside=void 0!==e.plotY&&e.plotY>=0&&e.plotY<=this.yAxis.len&&e.plotX>=0&&e.plotX<=this.xAxis.len),t++;for(r.drawPoints.apply(this,arguments),t=0;t<i;)(e=this.points[t]).graphics=e.graphics||[],(e.graphic||e.graphics[1])&&(e.graphics[1]=e.graphic),e.graphic=e.graphics[0],e.origProps&&(p(e,e.origProps),delete e.origProps),t++}hasMarkerChanged(t,e){let i=t.lowMarker,s=e.lowMarker||{};return i&&(!1===i.enabled||s.symbol!==i.symbol||s.height!==i.height||s.width!==i.width)||super.hasMarkerChanged(t,e)}}return f.defaultOptions=g(a.defaultOptions,{lineWidth:1,threshold:null,tooltip:{pointFormat:'<span style="color:{series.color}">●</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'},trackByArea:!0,dataLabels:{align:void 0,verticalAlign:void 0,xLow:0,xHigh:0,yLow:0,yHigh:0}}),l(f,"afterTranslate",function(){"low,high"===this.pointArrayMap.join(",")&&this.points.forEach(t=>{let e=t.high,i=t.plotY;t.isNull?t.plotY=void 0:(t.plotLow=i,t.plotHigh=c(e)?this.yAxis.translate(this.dataModify?this.dataModify.modifyValue(e):e,!1,!0,void 0,!0):void 0,this.dataModify&&(t.yBottom=t.plotHigh))})},{order:0}),l(f,"afterTranslate",function(){this.points.forEach(t=>{if(this.chart.polar)this.highToXY(t),t.plotLow=t.plotY,t.tooltipPos=[((t.plotHighX||0)+(t.plotLowX||0))/2,((t.plotHigh||0)+(t.plotLow||0))/2];else{let e=t.pos(!1,t.plotLow),i=t.pos(!1,t.plotHigh);e&&i&&(e[0]=(e[0]+i[0])/2,e[1]=(e[1]+i[1])/2),t.tooltipPos=e}})},{order:3}),p(f.prototype,{deferTranslatePolar:!0,pointArrayMap:["low","high"],pointClass:t,pointValKey:"low",setStackedPoints:o}),i.registerSeriesType("arearange",f),f}),i(e,"Series/AreaSplineRange/AreaSplineRangeSeries.js",[e["Series/AreaRange/AreaRangeSeries.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{spline:{prototype:s}}=e.seriesTypes,{merge:o,extend:a}=i;class r extends t{}return r.defaultOptions=o(t.defaultOptions),a(r.prototype,{getPointSpline:s.getPointSpline}),e.registerSeriesType("areasplinerange",r),r}),i(e,"Series/BoxPlot/BoxPlotSeriesDefaults.js",[],function(){return{threshold:null,tooltip:{pointFormat:'<span style="color:{point.color}">●</span> <b>{series.name}</b><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'},whiskerLength:"50%",fillColor:"#ffffff",lineWidth:1,medianWidth:2,whiskerWidth:2}}),i(e,"Series/BoxPlot/BoxPlotSeries.js",[e["Series/BoxPlot/BoxPlotSeriesDefaults.js"],e["Series/Column/ColumnSeries.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,o){let{noop:a}=i,{crisp:r,extend:n,merge:l,pick:h}=o;class p extends e{pointAttribs(){return{}}translate(){let t=this.yAxis,e=this.pointArrayMap;super.translate.apply(this),this.points.forEach(function(i){e.forEach(function(e){null!==i[e]&&(i[e+"Plot"]=t.translate(i[e],0,1,0,1))}),i.plotHigh=i.highPlot})}drawPoints(){let t,e,i,s,o,a,n,l,p,d,c,u,g;let f=this.points,b=this.options,m=this.chart,y=m.renderer,x=!1!==this.doQuartiles,P=this.options.whiskerLength;for(let S of f){let f=(l=S.graphic)?"animate":"attr",M=S.shapeArgs,L={},k={},C={},v={},A=S.color||this.color;if(void 0!==S.plotY){let w;p=M.width,c=(d=M.x)+p,u=p/2,t=x?S.q1Plot:S.lowPlot,e=x?S.q3Plot:S.lowPlot,i=S.highPlot,s=S.lowPlot,l||(S.graphic=l=y.g("point").add(this.group),S.stem=y.path().addClass("highcharts-boxplot-stem").add(l),P&&(S.whiskers=y.path().addClass("highcharts-boxplot-whisker").add(l)),x&&(S.box=y.path(n).addClass("highcharts-boxplot-box").add(l)),S.medianShape=y.path(a).addClass("highcharts-boxplot-median").add(l)),m.styledMode||(k.stroke=S.stemColor||b.stemColor||A,k["stroke-width"]=h(S.stemWidth,b.stemWidth,b.lineWidth),k.dashstyle=S.stemDashStyle||b.stemDashStyle||b.dashStyle,S.stem.attr(k),P&&(C.stroke=S.whiskerColor||b.whiskerColor||A,C["stroke-width"]=h(S.whiskerWidth,b.whiskerWidth,b.lineWidth),C.dashstyle=S.whiskerDashStyle||b.whiskerDashStyle||b.dashStyle,S.whiskers.attr(C)),x&&(L.fill=S.fillColor||b.fillColor||A,L.stroke=b.lineColor||A,L["stroke-width"]=b.lineWidth||0,L.dashstyle=S.boxDashStyle||b.boxDashStyle||b.dashStyle,S.box.attr(L)),v.stroke=S.medianColor||b.medianColor||A,v["stroke-width"]=h(S.medianWidth,b.medianWidth,b.lineWidth),v.dashstyle=S.medianDashStyle||b.medianDashStyle||b.dashStyle,S.medianShape.attr(v));let N=r(S.plotX||0,S.stem.strokeWidth());if(w=[["M",N,e],["L",N,i],["M",N,t],["L",N,s]],S.stem[f]({d:w}),x){let i=S.box.strokeWidth();t=r(t,i),e=r(e,i),w=[["M",d=r(d,i),e],["L",d,t],["L",c=r(c,i),t],["L",c,e],["L",d,e],["Z"]],S.box[f]({d:w})}if(P){let t=S.whiskers.strokeWidth();i=r(S.highPlot,t),s=r(S.lowPlot,t),w=[["M",r(N-(g="string"==typeof P&&/%$/.test(P)?u*parseFloat(P)/100:Number(P)/2)),i],["L",r(N+g),i],["M",r(N-g),s],["L",r(N+g),s]],S.whiskers[f]({d:w})}w=[["M",d,o=r(S.medianPlot,S.medianShape.strokeWidth())],["L",c,o]],S.medianShape[f]({d:w})}}}toYData(t){return[t.low,t.q1,t.median,t.q3,t.high]}}return p.defaultOptions=l(e.defaultOptions,t),n(p.prototype,{pointArrayMap:["low","q1","median","q3","high"],pointV
vendor: 4,106 bytes, line 23490
23490alKey:"high",drawDataLabels:a,setStackedPoints:a}),s.registerSeriesType("boxplot",p),p}),i(e,"Series/Bubble/BubbleLegendDefaults.js",[],function(){return{borderColor:void 0,borderWidth:2,className:void 0,color:void 0,connectorClassName:void 0,connectorColor:void 0,connectorDistance:60,connectorWidth:1,enabled:!1,labels:{className:void 0,allowOverlap:!1,format:"",formatter:void 0,align:"right",style:{fontSize:"0.9em",color:"#000000"},x:0,y:0},maxSize:60,minSize:10,legendIndex:0,ranges:{value:void 0,borderColor:void 0,color:void 0,connectorColor:void 0},sizeBy:"area",sizeByAbsoluteValue:!1,zIndex:1,zThreshold:0}}),i(e,"Series/Bubble/BubbleLegendItem.js",[e["Core/Color/Color.js"],e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{parse:o}=t,{noop:a}=i,{arrayMax:r,arrayMin:n,isNumber:l,merge:h,pick:p,stableSort:d}=s;return class{constructor(t,e){this.setState=a,this.init(t,e)}init(t,e){this.options=t,this.visible=!0,this.chart=e.chart,this.legend=e}addToLegend(t){t.splice(this.options.legendIndex,0,this)}drawLegendSymbol(t){let e;let i=p(t.options.itemDistance,20),s=this.legendItem||{},o=this.options,a=o.ranges,r=o.connectorDistance;if(!a||!a.length||!l(a[0].value)){t.options.bubbleLegend.autoRanges=!0;return}d(a,function(t,e){return e.value-t.value}),this.ranges=a,this.setOptions(),this.render();let n=this.getMaxLabelSize(),h=this.ranges[0].radius,c=2*h;e=(e=r-h+n.width)>0?e:0,this.maxLabel=n,this.movementX="left"===o.labels.align?e:0,s.labelWidth=c+e+i,s.labelHeight=c+n.height/2}setOptions(){let t=this.ranges,e=this.options,i=this.chart.series[e.seriesIndex],s=this.legend.baseline,a={zIndex:e.zIndex,"stroke-width":e.borderWidth},r={zIndex:e.zIndex,"stroke-width":e.connectorWidth},n={align:this.legend.options.rtl||"left"===e.labels.align?"right":"left",zIndex:e.zIndex},l=i.options.marker.fillOpacity,d=this.chart.styledMode;t.forEach(function(c,u){d||(a.stroke=p(c.borderColor,e.borderColor,i.color),a.fill=p(c.color,e.color,1!==l?o(i.color).setOpacity(l).get("rgba"):i.color),r.stroke=p(c.connectorColor,e.connectorColor,i.color)),t[u].radius=this.getRangeRadius(c.value),t[u]=h(t[u],{center:t[0].radius-t[u].radius+s}),d||h(!0,t[u],{bubbleAttribs:h(a),connectorAttribs:h(r),labelAttribs:n})},this)}getRangeRadius(t){let e=this.options,i=this.options.seriesIndex,s=this.chart.series[i],o=e.ranges[0].value,a=e.ranges[e.ranges.length-1].value,r=e.minSize,n=e.maxSize;return s.getRadius.call(this,a,o,r,n,t)}render(){let t=this.legendItem||{},e=this.chart.renderer,i=this.options.zThreshold;for(let s of(this.symbols||(this.symbols={connectors:[],bubbleItems:[],labels:[]}),t.symbol=e.g("bubble-legend"),t.label=e.g("bubble-legend-item").css(this.legend.itemStyle||{}),t.symbol.translateX=0,t.symbol.translateY=0,t.symbol.add(t.label),t.label.add(t.group),this.ranges))s.value>=i&&this.renderRange(s);this.hideOverlappingLabels()}renderRange(t){let e=this.ranges[0],i=this.legend,s=this.options,o=s.labels,a=this.chart,r=a.series[s.seriesIndex],n=a.renderer,l=this.symbols,h=l.labels,p=t.center,d=Math.abs(t.radius),c=s.connectorDistance||0,u=o.align,g=i.options.rtl,f=s.borderWidth,b=s.connectorWidth,m=e.radius||0,y=p-d-f/2+b/2,x=(y%1?1:.5)-(b%2?0:.5),P=n.styledMode,S=g||"left"===u?-c:c;"center"===u&&(S=0,s.connectorDistance=0,t.labelAttribs.align="center"),l.bubbleItems.push(n.circle(m,p+x,d).attr(P?{}:t.bubbleAttribs).addClass((P?"highcharts-color-"+r.colorIndex+" ":"")+"highcharts-bubble-legend-symbol "+(s.className||"")).add(this.legendItem.symbol)),l.connectors.push(n.path(n.crispLine([["M",m,y],["L",m+S,y]],s.connectorWidth)).attr(P?{}:t.connectorAttribs).addClass((P?"highcharts-color-"+this.options.seriesIndex+" ":"")+"highcharts-bubble-legend-connectors "+(s.connectorClassName||"")).add(this.legendItem.symbol));let M=n.text(this.formatLabel(t)).attr(P?{}:t.labelAttribs).css(P?{}:o.style).addClass("highcharts-bubble-legend-labels "+(s.labels.className||"")).add(this.legendItem.symbol),L={x:m+S+s.labels.x,y:y+s.labels.y+.4*M.getBBox().height};M.attr(L),h.push(M),M.placed=!0,M.alignAttr=L}getMaxLabelSize(){let t,e;
23490return this.symbols.labels.forEach(function(i){e=i.getBBox(!0),t=t?e.width>t.width?e:t:e}),t||{}}formatLabel(t){let i=this.options,s=i.labels.formatter,o=i.labels.format,{numberFormatter:a}=this.chart;return o?e.format(o,t):s?s.call(t):a(t.value,1)}hideOverlappingLabels(){let t=this.chart,e=this.options.labels.allowOverlap,i=this.symbols;!e&&i&&(t.hideOverlappingLabels(i.labels),i.labels.forEach(function(t,e){t.newOpacity?t.newOpacity!==t.oldOpacity&&i.connectors[e].show():i.connectors[e].hide()}))}getRanges(){let t=this.legend.bubbleLegend,e=t.chart.series,i=t.options.ranges,s,o,a=Number.MAX_VALUE,d=-Number.MAX_VALUE;return e.forEach(function(t){t.isBubble&&!t.ignoreSeries&&(o=t.zData.filter(l)).length&&(a=p(t.options.zMin,Math.min(a,Math.max(n(o),!1===t.options.displayNegative?t.options.zThreshold:-Number.MAX_VALUE))),d=p(t.options.zMax,Math.max(d,r(o))))}),s=a===d?[{value:d}]:[{value:a},{value:(a+d)/2},{value:d,autoRanges:!0}],i.length&&i[0].radius&&s.reverse(),s.forEach(function(t,e){i&&i[e]&&(s[e]=h(i[e],t))}),s}predictBubbleSizes(){let t=this.chart,e=t.legend.options,i=e.floating,s="horizontal"===e.layout,o=s?t.legend.lastLineHeight:0,a=t.plotSizeX,r=t.plotSizeY,n=t.series[this.options.seriesIndex],l=n.getPxExtremes(),h=Math.ceil(l.minPxSize),p=Math.ceil(l.maxPxSize),d,c=n.options.maxSize;return i||!/%$/.test(c)?d=p:(d=(Math.min(r,a)+o)*(c=parseFloat(c))/100/(c/100+1),(s&&r-d>=a||!s&&a-d>=r)&&(d=p)),[h,Math.ceil(d)]}updateRanges(t,e){let i=this.legend.options.bubbleLegend;i.minSize=t,i.maxSize=e,i.ranges=this.getRanges()}correctSizes(){let t=this.legend,e=this.chart.series[this.options.seriesIndex].getPxExtremes();Math.abs(Math.ceil(e.maxPxSize)-this.options.maxSize)>1&&(this.updateRanges(this.options.minSize,e.maxPxSize),t.render())}}}),i(e,"Series/Bubble/BubbleLegendComposition.js",[e["Series/Bubble/BubbleLegendDefaults.js"],e["Series/Bubble/BubbleLegendItem.js"],e["Core/Defaults.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s,o){let{setOptions:a}=i,{composed:r}=s,{addEvent:n,objectEach:l,pushUnique:h,wrap:p}=o;function d(t,e,i){let s,o,a;let r=this.legend,n=c(this)>=0;r&&r.options.enabled&&r.bubbleLegend&&r.options.bubbleLegend.autoRanges&&n?(s=r.bubbleLegend.options,o=r.bubbleLegend.predictBubbleSizes(),r.bubbleLegend.updateRanges(o[0],o[1]),s.placed||(r.group.placed=!1,r.allItems.forEach(t=>{(a=t.legendItem||{}).group&&(a.group.translateY=void 0)})),r.render(),s.placed||(this.getMargins(),this.axes.forEach(function(t){t.visible&&t.render(),s.placed||(t.setScale(),t.updateNames(),l(t.ticks,function(t){t.isNew=!0,t.isNewLabel=!0}))}),this.getMargins()),s.placed=!0,t.call(this,e,i),r.bubbleLegend.correctSizes(),b(r,u(r))):(t.call(this,e,i),r&&r.options.enabled&&r.bubbleLegend&&(r.render(),b(r,u(r))))}function c(t){let e=t.series,i=0;for(;i<e.length;){if(e[i]&&e[i].isBubble&&e[i].visible&&e[i].zData.length)return i;i++}return -1}function u(t){let e=t.allItems,i=[],s=e.length,o,a,r,n=0,l=0;for(n=0;n<s;n++)if(a=e[n].legendItem||{},r=(e[n+1]||{}).legendItem||{},a.labelHeight&&(e[n].itemHeight=a.labelHeight),e[n]===e[s-1]||a.y!==r.y){for(i.push({height:0}),o=i[i.length-1];l<=n;l++)e[l].itemHeight>o.height&&(o.height=e[l].itemHeight);o.step=n}return i}function g(t){let i=this.bubbleLegend,s=this.options,o=s.bubbleLegend,a=c(this.chart);i&&i.ranges&&i.ranges.length&&(o.ranges.length&&(o.autoRanges=!!o.ranges[0].autoRanges),this.destroyItem(i)),a>=0&&s.enabled&&o.enabled&&(o.seriesIndex=a,this.bubbleLegend=new e(o,this),this.bubbleLegend.addToLegend(t.allItems))}function f(t){let e;if(t.defaultPrevented)return!1;let i=this.chart,s=this.visible,o=this.chart.legend;o&&o.bubbleLegend&&(this.visible=!s,this.ignoreSeries=s,e=c(i)>=0,o.bubbleLegend.visible!==e&&(o.update({bubbleLegend:{enabled:e}}),o.bubbleLegend.visible=e),this.visible=s)}function b(t,e){let i=t.allItems,s=t.options.rtl,o,a,r,n,l=0;i.forEach((t,i)=>{(n=t.legendItem||{}).group&&(o=n.group.translateX||0,a=n.y||0,((r=t.movementX)||s&&t.ranges)&&(r=s?o-t.options.maxSize/2:o+r,n.group.attr({translateX:r})),i>e[l].step&&l++,n.group.attr({translateY:Math.round(a+e[l].height/2)}),n.y=a+e[l].height/2)})}return{compose:function(e,i,s){h(r,"Series.BubbleLegend")&&(a({legend:{bubbleLegend:t}}),p(e.prototype,"drawChartBox",d),n(i,"afterGetAllItems",g),n(s,"legendItemClick",f))}}}),i(e,"Series/Bubble/BubblePoint.js",[e["Core/Series/Point.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,
23490i){let{seriesTypes:{scatter:{prototype:{pointClass:s}}}}=e,{extend:o}=i;class a extends s{haloPath(e){return t.prototype.haloPath.call(this,0===e?0:(this.marker&&this.marker.radius||0)+e)}}return o(a.prototype,{ttBelow:!1}),a}),i(e,"Series/Bubble/BubbleSeries.js",[e["Series/Bubble/BubbleLegendComposition.js"],e["Series/Bubble/BubblePoint.js"],e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,a){let{parse:r}=i,{composed:n,noop:l}=s,{series:h,seriesTypes:{column:{prototype:p},scatter:d}}=o,{addEvent:c,arrayMax:u,arrayMin:g,clamp:f,extend:b,isNumber:m,merge:y,pick:x,pushUnique:P}=a;function S(){let t=this.len,{coll:e,isXAxis:i,min:s}=this,o=i?"xData":"yData",a=(this.max||0)-(s||0),r=0,n=t,l=t/a,h;("xAxis"===e||"yAxis"===e)&&(this.series.forEach(t=>{if(t.bubblePadding&&t.reserveSpace()){this.allowZoomOutside=!0,h=!0;let e=t[o];if(i&&((t.onPoint||t).getRadii(0,0,t),t.onPoint&&(t.radii=t.onPoint.radii)),a>0){let i=e.length;for(;i--;)if(m(e[i])&&this.dataMin<=e[i]&&e[i]<=this.max){let o=t.radii&&t.radii[i]||0;r=Math.min((e[i]-s)*l-o,r),n=Math.max((e[i]-s)*l+o,n)}}}}),h&&a>0&&!this.logarithmic&&(n-=t,l*=(t+Math.max(0,r)-Math.min(n,t))/t,[["min","userMin",r],["max","userMax",n]].forEach(t=>{void 0===x(this.options[t[0]],this[t[1]])&&(this[t[0]]+=t[2]/l)})))}class M extends d{static compose(e,i,s,o){t.compose(i,s,o),P(n,"Series.Bubble")&&c(e,"foundExtremes",S)}animate(t){!t&&this.points.length<this.options.animationLimit&&this.points.forEach(function(t){let{graphic:e,plotX:i=0,plotY:s=0}=t;e&&e.width&&(this.hasRendered||e.attr({x:i,y:s,width:1,height:1}),e.animate(this.markerAttribs(t),this.options.animation))},this)}getRadii(){let t=this.zData,e=this.yData,i=[],s,o,a,r=this.chart.bubbleZExtremes,{minPxSize:n,maxPxSize:l}=this.getPxExtremes();if(!r){let t,e=Number.MAX_VALUE,i=-Number.MAX_VALUE;this.chart.series.forEach(s=>{if(s.bubblePadding&&s.reserveSpace()){let o=(s.onPoint||s).getZExtremes();o&&(e=Math.min(x(e,o.zMin),o.zMin),i=Math.max(x(i,o.zMax),o.zMax),t=!0)}}),t?(r={zMin:e,zMax:i},this.chart.bubbleZExtremes=r):r={zMin:0,zMax:0}}for(o=0,s=t.length;o<s;o++)a=t[o],i.push(this.getRadius(r.zMin,r.zMax,n,l,a,e&&e[o]));this.radii=i}getRadius(t,e,i,s,o,a){let r=this.options,n="width"!==r.sizeBy,l=r.zThreshold,h=e-t,p=.5;if(null===a||null===o)return null;if(m(o)){if(r.sizeByAbsoluteValue&&(o=Math.abs(o-l),e=h=Math.max(e-l,Math.abs(t-l)),t=0),o<t)return i/2-1;h>0&&(p=(o-t)/h)}return n&&p>=0&&(p=Math.sqrt(p)),Math.ceil(i+p*(s-i))/2}hasData(){return!!this.processedXData.length}markerAttribs(t,e){let i=super.markerAttribs(t,e),{height:s=0,width:o=0}=i;return this.chart.inverted?b(i,{x:(t.plotX||0)-o/2,y:(t.plotY||0)-s/2}):i}pointAttribs(t,e){let i=this.options.marker.fillOpacity,s=h.prototype.pointAttribs.call(this,t,e);return 1!==i&&(s.fill=r(s.fill).setOpacity(i).get("rgba")),s}translate(){super.translate.call(this),this.getRadii(),this.translateBubble()}translateBubble(){let{data:t,options:e,radii:i}=this,{minPxSize:s}=this.getPxExtremes(),o=t.length;for(;o--;){let a=t[o],r=i?i[o]:0;"z"===this.zoneAxis&&(a.negative=(a.z||0)<(e.zThreshold||0)),m(r)&&r>=s/2?(a.marker=b(a.marker,{radius:r,width:2*r,height:2*r}),a.dlBox={x:a.plotX-r,y:a.plotY-r,width:2*r,height:2*r}):(a.shapeArgs=a.plotY=a.dlBox=void 0,a.isInside=!1)}}getPxExtremes(){let t=Math.min(this.chart.plotWidth,this.chart.plotHeight),e=e=>{let i;return"string"==typeof e&&(i=/%$/.test(e),e=parseInt(e,10)),i?t*e/100:e},i=e(x(this.options.minSize,8)),s=Math.max(e(x(this.options.maxSize,"20%")),i);return{minPxSize:i,maxPxSize:s}}getZExtremes(){let t=this.options,e=(this.zData||[]).filter(m);if(e.length){let i=x(t.zMin,f(g(e),!1===t.displayNegative?t.zThreshold||0:-Number.MAX_VALUE,Number.MAX_VALUE)),s=x(t.zMax,u(e));if(m(i)&&m(s))return{zMin:i,zMax:s}}}}return M.defaultOptions=y(d.defaultOptions,{dataLabels:{formatter:function(){let{numberFormatter:t}=this.series.chart,{z:e}=this.point;return m(e)?t(e,-1):""},inside:!0,verticalAlign:"middle"},animationLimit:250,marker:{lineColor:null,lineWidth:1,fillOpacity:.5,radius:null,
23490states:{hover:{radiusPlus:0}},symbol:"circle"},minSize:8,maxSize:"20%",softThreshold:!1,states:{hover:{halo:{size:5}}},tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"},turboThreshold:0,zThreshold:0,zoneAxis:"z"}),b(M.prototype,{alignDataLabel:p.alignDataLabel,applyZones:l,bubblePadding:!0,isBubble:!0,pointArrayMap:["y","z"],pointClass:e,parallelArrays:["x","y","z"],trackerGroups:["group","dataLabelsGroup"],specialGroup:"group",zoneAxis:"z"}),c(M,"updatedData",t=>{delete t.target.chart.bubbleZExtremes}),c(M,"remove",t=>{delete t.target.chart.bubbleZExtremes}),o.registerSeriesType("bubble",M),M}),i(e,"Series/ColumnRange/ColumnRangePoint.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{seriesTypes:{column:{prototype:{pointClass:{prototype:i}}},arearange:{prototype:{pointClass:s}}}}=t,{extend:o,isNumber:a}=e;class r extends s{isValid(){return a(this.low)}}return o(r.prototype,{setState:i.setState}),r}),i(e,"Series/ColumnRange/ColumnRangeSeries.js",[e["Series/ColumnRange/ColumnRangePoint.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{noop:o}=e,{seriesTypes:{arearange:a,column:r,column:{prototype:n}}}=i,{addEvent:l,clamp:h,extend:p,isNumber:d,merge:c,pick:u}=s;class g extends a{setOptions(){return c(!0,arguments[0],{stacking:void 0}),a.prototype.setOptions.apply(this,arguments)}translate(){return n.translate.apply(this)}pointAttribs(){return n.pointAttribs.apply(this,arguments)}translate3dPoints(){return n.translate3dPoints.apply(this,arguments)}translate3dShapes(){return n.translate3dShapes.apply(this,arguments)}afterColumnTranslate(){let t,e,i,s;let o=this.yAxis,a=this.xAxis,r=a.startAngleRad,n=this.chart,l=this.xAxis.isRadial,p=Math.max(n.chartWidth,n.chartHeight)+999;this.points.forEach(g=>{let f=g.shapeArgs||{},b=this.options.minPointLength,m=g.plotY,y=o.translate(g.high,0,1,0,1);if(d(y)&&d(m)){if(g.plotHigh=h(y,-p,p),g.plotLow=h(m,-p,p),s=g.plotHigh,Math.abs(t=u(g.rectPlotY,g.plotY)-g.plotHigh)<b?(e=b-t,t+=e,s-=e/2):t<0&&(t*=-1,s-=t),l&&this.polar)i=g.barX+r,g.shapeType="arc",g.shapeArgs=this.polar.arc(s+t,s,i,i+g.pointWidth);else{f.height=t,f.y=s;let{x:e=0,width:i=0}=f;g.shapeArgs=c(g.shapeArgs,this.crispCol(e,s,i,t)),g.tooltipPos=n.inverted?[o.len+o.pos-n.plotLeft-s-t/2,a.len+a.pos-n.plotTop-e-i/2,t]:[a.left-n.plotLeft+e+i/2,o.pos-n.plotTop+s+t/2,t]}}})}}return g.defaultOptions=c(r.defaultOptions,a.defaultOptions,{borderRadius:{where:"all"},pointRange:null,legendSymbol:"rectangle",marker:null,states:{hover:{halo:!1}}}),l(g,"afterColumnTranslate",function(){g.prototype.afterColumnTranslate.apply(this)},{order:5}),p(g.prototype,{directTouch:!0,pointClass:t,trackerGroups:["group","dataLabelsGroup"],adjustForMissingColumns:n.adjustForMissingColumns,animate:n.animate,crispCol:n.crispCol,drawGraph:o,drawPoints:n.drawPoints,getSymbol:o,drawTracker:n.drawTracker,getColumnMetrics:n.getColumnMetrics}),i.registerSeriesType("columnrange",g),g}),i(e,"Series/ColumnPyramid/ColumnPyramidSeriesDefaults.js",[],function(){return{}}),i(e,"Series/ColumnPyramid/ColumnPyramidSeries.js",[e["Series/ColumnPyramid/ColumnPyramidSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{column:s}=e.seriesTypes,{clamp:o,merge:a,pick:r}=i;class n extends s{translate(){let t=this.chart,e=this.options,i=this.dense=this.closestPointRange*this.xAxis.transA<2,s=this.borderWidth=r(e.borderWidth,i?0:1),a=this.yAxis,n=e.threshold,l=r(e.minPointLength,5),h=this.getColumnMetrics(),p=h.width,d=this.pointXOffset=h.offset,c=this.translatedThreshold=a.getThreshold(n),u=this.barW=Math.max(p,1+2*s);for(let i of(t.inverted&&(c-=.5),e.pointPadding&&(u=Math.ceil(u)),super.translate(),this.points)){let s=r(i.yBottom,c),g=999+Math.abs(s),f=o(i.plotY,-g,a.len+g),b=u/2,m=Math.min(f,s),y=Math.max(f,s)-m,x=i.plotX+d,P,S,M,L,k,C,v,A,w,N,T;e.centerInCategory&&(x=this.adjustForMissingColumns(x,p,i,h)),i.barX=x,i.pointWidth=p,i.tooltipPos=t.inverted?[a.len+a.pos-t.plotLeft-f,this.xAxis.len-x-b,y]:[x+b,f+a.pos-t.plotTop,y],P=n+(i.total||i.y),"percent"===e.stacking&&(P=n+(i.y<0)?-100:100);let X=a.toPixels(P,!0);M=(S=t.plotHeight-X-(t.plotHeight-c))?b*(m-X)/S:0,L=S?b*(m+y-X)/S:0,C=x-M+b,v=x+M+b,A=x+L+b,w=x-L+b,N=m-l,T=m+y,i.y<0&&(N=m,T=m+y+l),t.inverted&&(k=a.width-m,S=X-(a.width-c),M=b*(X-k)/S,L=b*(X-(k-y))/S,v=(C=x+b+M
23490)-2*M,A=x-L+b,w=x+L+b,N=m,T=m+y-l,i.y<0&&(T=m+y+l)),i.shapeType="path",i.shapeArgs={x:C,y:N,width:v-C,height:y,d:[["M",C,N],["L",v,N],["L",A,T],["L",w,T],["Z"]]}}}}return n.defaultOptions=a(s.defaultOptions,t),e.registerSeriesType("columnpyramid",n),n}),i(e,"Series/ErrorBar/ErrorBarSeriesDefaults.js",[],function(){return{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:'<span style="color:{point.color}">●</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'},whiskerWidth:null}}),i(e,"Series/ErrorBar/ErrorBarSeries.js",[e["Series/BoxPlot/BoxPlotSeries.js"],e["Series/Column/ColumnSeries.js"],e["Series/ErrorBar/ErrorBarSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,o){let{arearange:a}=s.seriesTypes,{addEvent:r,merge:n,extend:l}=o;class h extends t{getColumnMetrics(){return this.linkedParent&&this.linkedParent.columnMetrics||e.prototype.getColumnMetrics.call(this)}drawDataLabels(){let t=this.pointValKey;if(a)for(let e of(a.prototype.drawDataLabels.call(this),this.points))e.y=e[t]}toYData(t){return[t.low,t.high]}}return h.defaultOptions=n(t.defaultOptions,i),r(h,"afterTranslate",function(){for(let t of this.points)t.plotLow=t.plotY},{order:0}),l(h.prototype,{pointArrayMap:["low","high"],pointValKey:"high",doQuartiles:!1}),s.registerSeriesType("errorbar",h),h}),i(e,"Series/Gauge/GaugePoint.js",[e["Core/Series/SeriesRegistry.js"]],function(t){let{series:{prototype:{pointClass:e}}}=t;return class extends e{setState(t){this.state=t}}}),i(e,"Series/Gauge/GaugeSeries.js",[e["Series/Gauge/GaugePoint.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{noop:o}=e,{series:a,seriesTypes:{column:r}}=i,{clamp:n,isNumber:l,extend:h,merge:p,pick:d,pInt:c,defined:u}=s;class g extends a{translate(){let t=this.yAxis,e=this.options,i=t.center;this.generatePoints(),this.points.forEach(s=>{let o=p(e.dial,s.dial),a=c(o.radius)*i[2]/200,r=c(o.baseLength)*a/100,h=c(o.rearLength)*a/100,d=o.baseWidth,g=o.topWidth,f=e.overshoot,b=t.startAngleRad+t.translate(s.y,void 0,void 0,void 0,!0);(l(f)||!1===e.wrap)&&(f=l(f)?f/180*Math.PI:0,b=n(b,t.startAngleRad-f,t.endAngleRad+f)),b=180*b/Math.PI,s.shapeType="path";let m=o.path||[["M",-h,-d/2],["L",r,-d/2],["L",a,-g/2],["L",a,g/2],["L",r,d/2],["L",-h,d/2],["Z"]];s.shapeArgs={d:m,translateX:i[0],translateY:i[1],rotation:b},s.plotX=i[0],s.plotY=i[1],u(s.y)&&t.max-t.min&&(s.percentage=(s.y-t.min)/(t.max-t.min)*100)})}drawPoints(){let t=this,e=t.chart,i=t.yAxis.center,s=t.pivot,o=t.options,a=o.pivot,r=e.renderer;t.points.forEach(i=>{let s=i.graphic,a=i.shapeArgs,n=a.d,l=p(o.dial,i.dial);s?(s.animate(a),a.d=n):i.graphic=r[i.shapeType](a).addClass("highcharts-dial").add(t.group),e.styledMode||i.graphic[s?"animate":"attr"]({stroke:l.borderColor,"stroke-width":l.borderWidth,fill:l.backgroundColor})}),s?s.animate({translateX:i[0],translateY:i[1]}):a&&(t.pivot=r.circle(0,0,a.radius).attr({zIndex:2}).addClass("highcharts-pivot").translate(i[0],i[1]).add(t.group),e.styledMode||t.pivot.attr({fill:a.backgroundColor,stroke:a.borderColor,"stroke-width":a.borderWidth}))}animate(t){let e=this;t||e.points.forEach(t=>{let i=t.graphic;i&&(i.attr({rotation:180*e.yAxis.startAngleRad/Math.PI}),i.animate({rotation:t.shapeArgs.rotation},e.options.animation))})}render(){this.group=this.plotGroup("group","series",this.visible?"inherit":"hidden",this.options.zIndex,this.chart.seriesGroup),a.prototype.render.call(this),this.group.clip(this.chart.clipRect)}setData(t,e){a.prototype.setData.call(this,t,!1),this.processData(),this.generatePoints(),d(e,!0)&&this.chart.redraw()}hasData(){return!!this.points.length}}return g.defaultOptions=p(a.defaultOptions,{dataLabels:{borderColor:"#cccccc",borderRadius:3,borderWidth:1,crop:!1,defer:!1,enabled:!0,verticalAlign:"top",y:15,zIndex:2},dial:{backgroundColor:"#000000",baseLength:"70%",baseWidth:3,borderColor:"#cccccc",borderWidth:0,radius:"80%",rearLength:"10%",topWidth:1},pivot:{radius:5,borderWidth:0,borderColor:"#cccccc",backgroundColor:"#000000"},tooltip:{headerFormat:""},showInLegend:!1}),h(g.prototype,{angular:!0,directTouch:!0,drawGraph:o,drawTracker:r.prototype.drawTracker,fixedBox:!0,forceDL:!0,noSharedTooltip:!0,pointClass:t,trackerGroups:["group","dataLabelsGroup"]}),i.registerSeriesType("gauge",g),g}),i(e,"Series/DragNodesComposition.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{composed:i}=t,{addEvent:s,pushUnique:o}=e;function a(){let t,e,i;let o=this;o.container&&(t=s(o.container,"mousedown",t=>{let a=o.hoverPoint;a&&a.series&&a.series.hasDraggableNodes&&a.series.options.draggable&&(a.series.onMouseDown(a,t),e=s(o.container,"mousemove",t=>a&&a.series&&a.series.onMouseMove(a,t)),i=s(o.container.ownerDocument,"mouseup",t=>(e(),i(),a&&a.series&&a.series.onMouseUp(a,t))))})),s(o,"destroy",function(){t()})}return{compose:function(t){o(i,"DragNodes")&&s(t,"load",a)},onMouseDown:function(t,e){let i=this.chart.pointer?.normalize(e)||e;t.fixedPosition={chartX:i.chartX,chartY:i.chartY,plotX:t.plotX,plotY:t.plotY},t.inDragMode=!0},onMouseMove:function(t,e){if(t.fixedPosition&&t.inDragMode){let i,s;let o=this.chart,a=o.pointer?.normalize(e)||e,r=t.fixedPosition.chartX-a.chartX,n=t.fixedPosition.chartY-a.chartY,l=o.graphLayoutsLookup;(Math.abs(r)>5||Math.abs(n)>5)&&(i=t.fixedPosition.plotX-r,s=t.fixedPosition.plotY-n,o.isInsidePlot(i,s)&&(t.plotX=i,t.plotY=s,t.hasDragged=!0,this.redrawHalo(t),l.forEach(t=>{t.restartSimulation()})))}},onMouseUp:function(t){t.fixedPosition&&(t.hasDragged&&(this.layout.enableSimulation?this.layout.start():this.chart.redraw()),t.inDragMode=t.hasDragged=!1,this.options.fixedDraggable||delete t.fixedPosition)},redrawHalo:function(t){t&&this.halo&&this.halo.attr({d:t.haloPath(this.options.states.hover.halo.size)})}}}
23490),i(e,"Series/GraphLayoutComposition.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{setAnimation:s}=t,{composed:o}=e,{addEvent:a,pushUnique:r}=i;function n(){this.graphLayoutsLookup&&(this.graphLayoutsLookup.forEach(t=>{t.updateSimulation()}),this.redraw())}function l(){this.graphLayoutsLookup&&(this.graphLayoutsLookup.forEach(t=>{t.updateSimulation(!1)}),this.redraw())}function h(){this.graphLayoutsLookup&&this.graphLayoutsLookup.forEach(t=>{t.stop()})}function p(){let t,e=!1,i=i=>{i.maxIterations--&&isFinite(i.temperature)&&!i.isStable()&&!i.enableSimulation&&(i.beforeStep&&i.beforeStep(),i.step(),t=!1,e=!0)};if(this.graphLayoutsLookup){for(s(!1,this),this.graphLayoutsLookup.forEach(t=>t.start());!t;)t=!0,this.graphLayoutsLookup.forEach(i);e&&this.series.forEach(t=>{t&&t.layout&&t.render()})}}return{compose:function(t){r(o,"GraphLayout")&&(a(t,"afterPrint",n),a(t,"beforePrint",l),a(t,"predraw",h),a(t,"render",p))},integrations:{},layouts:{}}}),i(e,"Series/PackedBubble/PackedBubblePoint.js",[e["Core/Chart/Chart.js"],e["Core/Series/Point.js"],e["Core/Series/SeriesRegistry.js"]],function(t,e,i){let{seriesTypes:{bubble:{prototype:{pointClass:s}}}}=i;return class extends s{destroy(){return this.series.layout&&this.series.layout.removeElementFromCollection(this,this.series.layout.nodes),e.prototype.destroy.apply(this,arguments)}firePointEvent(){let t=this.series.options;if(this.isParentNode&&t.parentNode){let i=t.allowPointSelect;t.allowPointSelect=t.parentNode.allowPointSelect,e.prototype.firePointEvent.apply(this,arguments),t.allowPointSelect=i}else e.prototype.firePointEvent.apply(this,arguments)}select(){let i=this.series.chart;this.isParentNode?(i.getSelectedPoints=i.getSelectedParentNodes,e.prototype.select.apply(this,arguments),i.getSelectedPoints=t.prototype.getSelectedPoints):e.prototype.select.apply(this,arguments)}}}),i(e,"Series/PackedBubble/PackedBubbleSeriesDefaults.js",[e["Core/Utilities.js"]],function(t){let{isNumber:e}=t;return{minSize:"10%",maxSize:"50%",sizeBy:"area",zoneAxis:"y",crisp:!1,tooltip:{pointFormat:"Value: {point.value}"},draggable:!0,useSimulation:!0,parentNode:{allowPointSelect:!1},dataLabels:{formatter:function(){let{numberFormatter:t}=this.series.chart,{value:i}=this.point;return e(i)?t(i,-1):""},parentNodeFormatter:function(){return this.name},parentNodeTextPath:{enabled:!0},padding:0,style:{transition:"opacity 2000ms"}},layoutAlgorithm:{initialPositions:"circle",initialPositionRadius:20,bubblePadding:5,parentNodeLimit:!1,seriesInteraction:!0,dragBetweenSeries:!1,parentNodeOptions:{maxIterations:400,gravitationalConstant:.03,maxSpeed:50,initialPositionRadius:100,seriesInteraction:!0,marker:{fillColor:null,fillOpacity:1,lineWidth:null,lineColor:null,symbol:"circle"}},enableSimulation:!0,type:"packedbubble",integration:"packedbubble",maxIterations:1e3,splitSeries:!1,maxSpeed:5,gravitationalConstant:.01,friction:-.981}}}),i(e,"Series/Networkgraph/VerletIntegration.js",[],function(){return{attractive:function(t,e,i){let s=t.getMass(),o=-i.x*e*this.diffTemperature,a=-i.y*e*this.diffTemperature;t.fromNode.fixedPosition||(t.fromNode.plotX-=o*s.fromNode/t.fromNode.degree,t.fromNode.plotY-=a*s.fromNode/t.fromNode.degree),t.toNode.fixedPosition||(t.toNode.plotX+=o*s.toNode/t.toNode.degree,t.toNode.plotY+=a*s.toNode/t.toNode.degree)},attractiveForceFunction:function(t,e){return(e-t)/t},barycenter:function(){let t=this.options.gravitationalConstant||0,e=(this.barycenter.xFactor-(this.box.left+this.box.width)/2)*t,i=(this.barycenter.yFactor-(this.box.top+this.box.height)/2)*t;this.nodes.forEach(function(t){t.fixedPosition||(t.plotX-=e/t.mass/t.degree,t.plotY-=i/t.mass/t.degree)})},getK:function(t){return Math.pow(t.box.width*t.box.height/t.nodes.length,.5)},integrate:function(t,e){let i=-t.options.friction,s=t.options.maxSpeed,o=e.prevX,a=e.prevY,r=(e.plotX+e.dispX-o)*i,n=(e.plotY+e.dispY-a)*i,l=Math.abs,h=l(r)/(r||1),p=l(n)/(n||1),d=h*Math.min(s,Math.abs(r)),c=p*Math.min(s,Math.abs(n));e.prevX=e.plotX+e.dispX,e.prevY=e.plotY+e.dispY,e.plotX+=d,e.plotY+=c,e.temperature=t.vectorLength({x:d,y:c})}
23490,repulsive:function(t,e,i){let s=e*this.diffTemperature/t.mass/t.degree;t.fixedPosition||(t.plotX+=i.x*s,t.plotY+=i.y*s)},repulsiveForceFunction:function(t,e){return(e-t)/t*(e>t?1:0)}}}),i(e,"Series/PackedBubble/PackedBubbleIntegration.js",[e["Core/Globals.js"],e["Series/Networkgraph/VerletIntegration.js"]],function(t,e){let{noop:i}=t;return{barycenter:function(){let t,e;let i=this.options.gravitationalConstant,s=this.box,o=this.nodes;for(let a of o)this.options.splitSeries&&!a.isParentNode?(t=a.series.parentNode.plotX,e=a.series.parentNode.plotY):(t=s.width/2,e=s.height/2),a.fixedPosition||(a.plotX-=(a.plotX-t)*i/(a.mass*Math.sqrt(o.length)),a.plotY-=(a.plotY-e)*i/(a.mass*Math.sqrt(o.length)))},getK:i,integrate:e.integrate,repulsive:function(t,e,i,s){let o=e*this.diffTemperature/t.mass/t.degree,a=i.x*o,r=i.y*o;t.fixedPosition||(t.plotX+=a,t.plotY+=r),s.fixedPosition||(s.plotX-=a,s.plotY-=r)},repulsiveForceFunction:function(t,e,i,s){return Math.min(t,(i.marker.radius+s.marker.radius)/2)}}}),i(e,"Series/Networkgraph/EulerIntegration.js",[],function(){return{attractive:function(t,e,i,s){let o=t.getMass(),a=i.x/s*e,r=i.y/s*e;t.fromNode.fixedPosition||(t.fromNode.dispX-=a*o.fromNode/t.fromNode.degree,t.fromNode.dispY-=r*o.fromNode/t.fromNode.degree),t.toNode.fixedPosition||(t.toNode.dis
vendor: 8,685 bytes, line 23490
23490pX+=a*o.toNode/t.toNode.degree,t.toNode.dispY+=r*o.toNode/t.toNode.degree)},attractiveForceFunction:function(t,e){return t*t/e},barycenter:function(){let t=this.options.gravitationalConstant,e=this.barycenter.xFactor,i=this.barycenter.yFactor;this.nodes.forEach(function(s){if(!s.fixedPosition){let o=s.getDegree(),a=o*(1+o/2);s.dispX+=(e-s.plotX)*t*a/s.degree,s.dispY+=(i-s.plotY)*t*a/s.degree}})},getK:function(t){return Math.pow(t.box.width*t.box.height/t.nodes.length,.3)},integrate:function(t,e){e.dispX+=e.dispX*t.options.friction,e.dispY+=e.dispY*t.options.friction;let i=e.temperature=t.vectorLength({x:e.dispX,y:e.dispY});0!==i&&(e.plotX+=e.dispX/i*Math.min(Math.abs(e.dispX),t.temperature),e.plotY+=e.dispY/i*Math.min(Math.abs(e.dispY),t.temperature))},repulsive:function(t,e,i,s){t.dispX+=i.x/s*e/t.degree,t.dispY+=i.y/s*e/t.degree},repulsiveForceFunction:function(t,e){return e*e/t}}}),i(e,"Series/Networkgraph/QuadTreeNode.js",[],function(){class t{constructor(t){this.body=!1,this.isEmpty=!1,this.isInternal=!1,this.nodes=[],this.box=t,this.boxSize=Math.min(t.width,t.height)}divideBox(){let e=this.box.width/2,i=this.box.height/2;this.nodes[0]=new t({left:this.box.left,top:this.box.top,width:e,height:i}),this.nodes[1]=new t({left:this.box.left+e,top:this.box.top,width:e,height:i}),this.nodes[2]=new t({left:this.box.left+e,top:this.box.top+i,width:e,height:i}),this.nodes[3]=new t({left:this.box.left,top:this.box.top+i,width:e,height:i})}getBoxPosition(t){let e=t.plotX<this.box.left+this.box.width/2,i=t.plotY<this.box.top+this.box.height/2;return e?i?0:3:i?1:2}insert(e,i){let s;this.isInternal?this.nodes[this.getBoxPosition(e)].insert(e,i-1):(this.isEmpty=!1,this.body?i?(this.isInternal=!0,this.divideBox(),!0!==this.body&&(this.nodes[this.getBoxPosition(this.body)].insert(this.body,i-1),this.body=!0),this.nodes[this.getBoxPosition(e)].insert(e,i-1)):((s=new t({top:e.plotX||NaN,left:e.plotY||NaN,width:.1,height:.1})).body=e,s.isInternal=!1,this.nodes.push(s)):(this.isInternal=!1,this.body=e))}updateMassAndCenter(){let t=0,e=0,i=0;if(this.isInternal){for(let s of this.nodes)s.isEmpty||(t+=s.mass,e+=s.plotX*s.mass,i+=s.plotY*s.mass);e/=t,i/=t}else this.body&&(t=this.body.mass,e=this.body.plotX,i=this.body.plotY);this.mass=t,this.plotX=e,this.plotY=i}}return t}),i(e,"Series/Networkgraph/QuadTree.js",[e["Series/Networkgraph/QuadTreeNode.js"]],function(t){return class{constructor(e,i,s,o){this.box={left:e,top:i,width:s,height:o},this.maxDepth=25,this.root=new t(this.box),this.root.isInternal=!0,this.root.isRoot=!0,this.root.divideBox()}calculateMassAndCenter(){this.visitNodeRecursive(null,null,function(t){t.updateMassAndCenter()})}insertNodes(t){for(let e of t)this.root.insert(e,this.maxDepth)}visitNodeRecursive(t,e,i){let s;if(t||(t=this.root),t===this.root&&e&&(s=e(t)),!1!==s){for(let o of t.nodes){if(o.isInternal){if(e&&(s=e(o)),!1===s)continue;this.visitNodeRecursive(o,e,i)}else o.body&&e&&e(o.body);i&&i(o)}t===this.root&&i&&i(t)}}}}),i(e,"Series/Networkgraph/ReingoldFruchtermanLayout.js",[e["Series/Networkgraph/EulerIntegration.js"],e["Core/Globals.js"],e["Series/GraphLayoutComposition.js"],e["Series/Networkgraph/QuadTree.js"],e["Core/Utilities.js"],e["Series/Networkgraph/VerletIntegration.js"]],function(t,e,i,s,o,a){let{win:r}=e,{clamp:n,defined:l,isFunction:h,fireEvent:p,pick:d}=o;class c{constructor(){this.box={},this.currentStep=0,this.initialRendering=!0,this.links=[],this.nodes=[],this.series=[],this.simulation=!1}static compose(e){i.compose(e),i.integrations.euler=t,i.integrations.verlet=a,i.layouts["reingold-fruchterman"]=c}init(t){this.options=t,this.nodes=[],this.links=[],this.series=[],this.box={x:0,y:0,width:0,height:0},this.setInitialRendering(!0),this.integration=i.integrations[t.integration],this.enableSimulation=t.enableSimulation,this.attractiveForce=d(t.attractiveForce,this.integration.attractiveForceFunction),this.repulsiveForce=d(t.repulsiveForce,this.integration.repulsiveForceFunction),this.approximation=t.approximation}updateSimulation(t){this.enableSimulation=d(t,this.options.enableSimulation)}start(){let t=this.series,e=this.options;this.currentStep=0,this.forces=t[0]&&t[0].forces||[],this.chart=t[0]&&t[0].chart,this.initialRendering&&(this.initPositions(),t.forEach(function(t){t.finishedAnimating=!0,t.render()})),this.setK(),this.resetSimulation(e),this.enableSimulation&&this.step()}step(){let t=this.series;for(let t of(this.currentStep++,"barnes-hut"===this.approximation&&(this.createQuadTree(),this.quadTree.calculateMassAndCenter()),this.forces||[]))this[t+"Forces"](this.temperature);if(this.applyLimits(),this.temperature=this.coolDown(this.startTemperature,this.diffTemperature,this.currentStep),this.prevSystemTemperature=this.systemTemperature,this.systemTemperature=this.getSystemTemperature(),this.enableSimulation){for(let e of t)e.chart&&e.render();this.maxIterations--&&isFinite(this.temperature)&&!this.isStable()?(this.simulation&&r.cancelAnimationFrame(this.simulation),this.simulation=r.requestAnimationFrame(()=>this.step())):(this.simulation=!1,this.series.forEach(t=>{p(t,"afterSimulation")}))}}stop(){this.simulation&&r.cancelAnimationFrame(this.simulation)}setArea(t,e,i,s){this.box={left:t,top:e,width:i,height:s}}setK(){this.k=this.options.linkLength||this.integration.getK(this)}addElementsToCollection(t,e){for(let i of t)-1===e.indexOf(i)&&e.push(i)}removeElementFromCollection(t,e){let i=e.indexOf(t);-1!==i&&e.splice(i,1)}clear(){this.nodes.length=0,this.links.length=0,this.series.length=0,this.resetSimulation()}resetSimulation(){this.forcedStop=!1,this.systemTemperature=0,this.setMaxIterations(),this.setTemperature(),this.setDiffTemperature()}restartSimulation(){this.simulation?this.resetSimulation():(this.setInitialRendering(!1),this.enableSimulation?this.start():this.setMaxIterations(1),this.chart&&this.chart.redraw(),this.setInitialRendering(!0))}setMaxIterations(t){this.maxIterations=d(t,this.options.maxIterations)}setTemperature(){this.temperature=this.startTemperature=Math.sqrt(this.nodes.length)}setDiffTemperature(){this.diffTemperature=this.startTemperature/(this.options.maxIterations+1)}setInitialRendering(t){this.initialRendering=t}createQuadTree(){this.quadTree=new s(this.box.left,this.box.top,this.box.width,this.box.height),this.quadTree.insertNodes(this.nodes)}initPositions(){let t=this.options.initialPositions;if(h(t))for(let e of(t.call(this),this.nodes))l(e.prevX)||(e.prevX=e.plotX),l(e.prevY)||(e.prevY=e.plotY),e.dispX=0,e.dispY=0;else"circle"===t?this.setCircularPositions():this.setRandomPositions()}setCircularPositions(){let t;let e=this.box,i=this.nodes,s=2*Math.PI/(i.length+1),o=i.filter(function(t){return 0===t.linksTo.length}),a={},r=this.options.initialPositionRadius,n=t=>{for(let e of t.linksFrom||[])a[e.toNode.id]||(a[e.toNode.id]=!0,l.push(e.toNode),n(e.toNode))},l=[];for(let t of o)l.push(t),n(t);if(l.length)for(let t of i)-1===l.indexOf(t)&&l.push(t);else l=i;for(let i=0,o=l.length;i<o;++i)(t=l[i]).plotX=t.prevX=d(t.plotX,e.width/2+r*Math.cos(i*s)),t.plotY=t.prevY=d(t.plotY,e.height/2+r*Math.sin(i*s)),t.dispX=0,t.dispY=0}setRandomPositions(){let t;let e=this.box,i=this.nodes,s=i.length+1,o=t=>{let e=t*t/Math.PI;return e-Math.floor(e)};for(let a=0,r=i.length;a<r;++a)(t=i[a]).plotX=t.prevX=d(t.plotX,e.width*o(a)),t.plotY=t.prevY=d(t.plotY,e.height*o(s+a)),t.dispX=0,t.dispY=0}force(t,...e){this.integration[t].apply(this,e)}barycenterForces(){this.getBarycenter(),this.force("barycenter")}getBarycenter(){let t=0,e=0,i=0;for(let s of this.nodes)e+=s.plotX*s.mass,i+=s.plotY*s.mass,t+=s.mass;return this.barycenter={x:e,y:i,xFactor:e/t,yFactor:i/t},this.barycenter}barnesHutApproximation(t,e){let i,s;let o=this.getDistXY(t,e),a=this.vectorLength(o);return t!==e&&0!==a&&(e.isInternal?e.boxSize/a<this.options.theta&&0!==a?(s=this.repulsiveForce(a,this.k),this.force("repulsive",t,s*e.mass,o,a),i=!1):i=!0:(s=this.repulsiveForce(a,this.k),this.force("repulsive",t,s*e.mass,o,a))),i}repulsiveForces(){if("barnes-hut"===this.approximation)for(let t of this.nodes)this.quadTree.visitNodeRecursive(null,e=>this.barnesHutApproximation(t,e));else{let t,e,i;for(let s of this.nodes)for(let o of this.nodes)s===o||s.fixedPosition||(i=this.getDistXY(s,o),0!==(e=this.vectorLength(i))&&(t=this.repulsiveForce(e,this.k),this.force("repulsive",s,t*o.mass,i,e)))}}attractiveForces(){let t,e,i;for(let s of this.links)s.fromNode&&s.toNode&&(t=this.getDistXY(s.fromNode,s.toNode),0!==(e=this.vectorLength(t))&&(i=this.attractiveForce(e,this.k),this.force("attractive",s,i,t,e)))}applyLimits(){for(let t of this.nodes)t.fixedPosition||(this.integration.integrate(this,t),this.applyLimitBox(t,this.box),t.dis
23490pX=0,t.dispY=0)}applyLimitBox(t,e){let i=t.radius;t.plotX=n(t.plotX,e.left+i,e.width-i),t.plotY=n(t.plotY,e.top+i,e.height-i)}coolDown(t,e,i){return t-e*i}isStable(){return 1e-5>Math.abs(this.systemTemperature-this.prevSystemTemperature)||this.temperature<=0}getSystemTemperature(){let t=0;for(let e of this.nodes)t+=e.temperature;return t}vectorLength(t){return Math.sqrt(t.x*t.x+t.y*t.y)}getDistR(t,e){let i=this.getDistXY(t,e);return this.vectorLength(i)}getDistXY(t,e){let i=t.plotX-e.plotX,s=t.plotY-e.plotY;return{x:i,y:s,absX:Math.abs(i),absY:Math.abs(s)}}}return c}),i(e,"Series/PackedBubble/PackedBubbleLayout.js",[e["Series/GraphLayoutComposition.js"],e["Series/PackedBubble/PackedBubbleIntegration.js"],e["Series/Networkgraph/ReingoldFruchtermanLayout.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{addEvent:o,pick:a}=s;function r(){let t=this.series,e=[];return t.forEach(t=>{t.parentNode&&t.parentNode.selected&&e.push(t.parentNode)}),e}function n(){this.allDataPoints&&delete this.allDataPoints}class l extends i{constructor(){super(...arguments),this.index=NaN,this.nodes=[],this.series=[]}static compose(s){i.compose(s),t.integrations.packedbubble=e,t.layouts.packedbubble=l;let a=s.prototype;a.getSelectedParentNodes||(o(s,"beforeRedraw",n),a.getSelectedParentNodes=r)}beforeStep(){this.options.marker&&this.series.forEach(t=>{t&&t.calculateParentRadius()})}isStable(){let t=Math.abs(this.prevSystemTemperature-this.systemTemperature);return 1>Math.abs(10*this.systemTemperature/Math.sqrt(this.nodes.length))&&t<1e-5||this.temperature<=0}setCircularPositions(){let t=this.box,e=this.nodes,i=2*Math.PI/(e.length+1),s=this.options.initialPositionRadius,o,r,n=0;for(let l of e)this.options.splitSeries&&!l.isParentNode?(o=l.series.parentNode.plotX,r=l.series.parentNode.plotY):(o=t.width/2,r=t.height/2),l.plotX=l.prevX=a(l.plotX,o+s*Math.cos(l.index||n*i)),l.plotY=l.prevY=a(l.plotY,r+s*Math.sin(l.index||n*i)),l.dispX=0,l.dispY=0,n++}repulsiveForces(){let t,e,i;let s=this,o=s.options.bubblePadding,a=s.nodes;a.forEach(r=>{r.degree=r.mass,r.neighbours=0,a.forEach(a=>{t=0,r!==a&&!r.fixedPosition&&(s.options.seriesInteraction||r.series===a.series)&&(i=s.getDistXY(r,a),(e=s.vectorLength(i)-(r.marker.radius+a.marker.radius+o))<0&&(r.degree+=.01,r.neighbours++,t=s.repulsiveForce(-e/Math.sqrt(r.neighbours),s.k,r,a)),s.force("repulsive",r,t*a.mass,i,a,e))})})}applyLimitBox(t,e){let i,s;this.options.splitSeries&&!t.isParentNode&&this.options.parentNodeLimit&&(i=this.getDistXY(t,t.series.parentNode),(s=t.series.parentNodeRadius-t.marker.radius-this.vectorLength(i))<0&&s>-2*t.marker.radius&&(t.plotX-=.01*i.x,t.plotY-=.01*i.y)),super.applyLimitBox(t,e)}}return t.layouts.packedbubble=l,l}),i(e,"Series/SimulationSeriesUtilities.js",[e["Core/Utilities.js"],e["Core/Animation/AnimationUtilities.js"]],function(t,e){let{merge:i,syncTimeout:s}=t,{animObject:o}=e;return{initDataLabels:function(){let t=this.options.dataLabels;if(!this.dataLabelsGroup){let e=this.initDataLabelsGroup();return!this.chart.styledMode&&t?.style&&e.css(t.style),e.attr({opacity:0}),this.visible&&e.show(),e}return this.dataLabelsGroup.attr(i({opacity:1},this.getPlotBox("data-labels"))),this.dataLabelsGroup},initDataLabelsDefer:function(){let t=this.options.dataLabels;t?.defer&&this.options.layoutAlgorithm?.enableSimulation?s(()=>{this.deferDataLabels=!1},t?o(t.animation).defer:0):this.deferDataLabels=!1}}}),i(e,"Series/PackedBubble/PackedBubbleSeries.js",[e["Core/Color/Color.js"],e["Series/DragNodesComposition.js"],e["Series/GraphLayoutComposition.js"],e["Core/Globals.js"],e["Series/PackedBubble/PackedBubblePoint.js"],e["Series/PackedBubble/PackedBubbleSeriesDefaults.js"],e["Series/PackedBubble/PackedBubbleLayout.js"],e["Core/Series/SeriesRegistry.js"],e["Series/SimulationSeriesUtilities.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,a,r,n,l,h){let{parse:p}=t,{noop:d}=s,{series:{prototype:c},seriesTypes:{bubble:u}}=n,{initDataLabels:g,initDataLabelsDefer:f}=l,{addEvent:b,clamp:m,defined:y,extend:x,fireEvent:P,isArray:S,isNumber:M,merge:L,pick:k}=h;class C extends u{constructor(){super(...arguments),this.parentNodeMass=0,this.deferDataLabels=!0}static compose(t,i,s,o){u.compose(t,i,s,o),e.compose(i),r.compose(i)}accumulateAllPoints(){let t;let e=this.chart,i=[];for(let s of e.series)if(s.is("packedbubble")&&s.reserveSpace()){t=s.yData||[];for(let e=0;e<t.length;e++)i.push([null,null,t[e],s.index,e,{id:e,marker:{radius:0}}])}return i}addLayout(){let t=this.options.layoutAlgorithm=this.options.layoutAlgorithm||{},e=t.type||"packedbubble",s=this.chart.options.chart,o=this.chart.graphLayoutsStorage,a=this.chart.graphLayoutsLookup,r;o||(this.chart.graphLayoutsStorage=o={},this.chart.graphLayoutsLookup=a=[]),(r=o[e])||(t.enableSimulation=y(s.forExport)?!s.forExport:t.enableSimulation,o[e]=r=ne
vendor: 6,453 bytes, line 23490
23490w i.layouts[e],r.init(t),a.splice(r.index,0,r)),this.layout=r,this.points.forEach(t=>{t.mass=2,t.degree=1,t.collisionNmb=1}),r.setArea(0,0,this.chart.plotWidth,this.chart.plotHeight),r.addElementsToCollection([this],r.series),r.addElementsToCollection(this.points,r.nodes)}addSeriesLayout(){let t=this.options.layoutAlgorithm=this.options.layoutAlgorithm||{},e=t.type||"packedbubble",s=this.chart.graphLayoutsStorage,o=this.chart.graphLayoutsLookup,a=L(t,t.parentNodeOptions,{enableSimulation:this.layout.options.enableSimulation}),r=s[e+"-series"];r||(s[e+"-series"]=r=new i.layouts[e],r.init(a),o.splice(r.index,0,r)),this.parentNodeLayout=r,this.createParentNodes()}calculateParentRadius(){let t=this.seriesBox();this.parentNodeRadius=m(Math.sqrt(2*this.parentNodeMass/Math.PI)+20,20,t?Math.max(Math.sqrt(Math.pow(t.width,2)+Math.pow(t.height,2))/2+20,20):Math.sqrt(2*this.parentNodeMass/Math.PI)+20),this.parentNode&&(this.parentNode.marker.radius=this.parentNode.radius=this.parentNodeRadius)}calculateZExtremes(){let t=this.chart.series,e=this.options.zMin,i=this.options.zMax,s=1/0,o=-1/0;return e&&i?[e,i]:(t.forEach(t=>{t.yData.forEach(t=>{y(t)&&(t>o&&(o=t),t<s&&(s=t))})}),[e=k(e,s),i=k(i,o)])}checkOverlap(t,e){let i=t[0]-e[0],s=t[1]-e[1];return Math.sqrt(i*i+s*s)-Math.abs(t[2]+e[2])<-.001}createParentNodes(){let t=this.pointClass,e=this.chart,i=this.parentNodeLayout,s=this.layout.options,o,a=this.parentNode,r={radius:this.parentNodeRadius,lineColor:this.color,fillColor:p(this.color).brighten(.4).get()};s.parentNodeOptions&&(r=L(s.parentNodeOptions.marker||{},r)),this.parentNodeMass=0,this.points.forEach(t=>{this.parentNodeMass+=Math.PI*Math.pow(t.marker.radius,2)}),this.calculateParentRadius(),i.nodes.forEach(t=>{t.seriesIndex===this.index&&(o=!0)}),i.setArea(0,0,e.plotWidth,e.plotHeight),o||(a||(a=new t(this,{mass:this.parentNodeRadius/2,marker:r,dataLabels:{inside:!1},states:{normal:{marker:r},hover:{marker:r}},dataLabelOnNull:!0,degree:this.parentNodeRadius,isParentNode:!0,seriesIndex:this.index})),this.parentNode&&(a.plotX=this.parentNode.plotX,a.plotY=this.parentNode.plotY),this.parentNode=a,i.addElementsToCollection([this],i.series),i.addElementsToCollection([a],i.nodes))}deferLayout(){let t=this.options.layoutAlgorithm;this.visible&&(this.addLayout(),t.splitSeries&&this.addSeriesLayout())}destroy(){this.chart.graphLayoutsLookup&&this.chart.graphLayoutsLookup.forEach(t=>{t.removeElementFromCollection(this,t.series)},this),this.parentNode&&this.parentNodeLayout&&(this.parentNodeLayout.removeElementFromCollection(this.parentNode,this.parentNodeLayout.nodes),this.parentNode.dataLabel&&(this.parentNode.dataLabel=this.parentNode.dataLabel.destroy())),c.destroy.apply(this,arguments)}drawDataLabels(){!this.deferDataLabels&&(c.drawDataLabels.call(this,this.points),this.parentNode&&(this.parentNode.formatPrefix="parentNode",c.drawDataLabels.call(this,[this.parentNode])))}drawGraph(){if(!this.layout||!this.layout.options.splitSeries)return;let t=this.chart,e=this.layout.options.parentNodeOptions.marker,i={fill:e.fillColor||p(this.color).brighten(.4).get(),opacity:e.fillOpacity,stroke:e.lineColor||this.color,"stroke-width":k(e.lineWidth,this.options.lineWidth)},s={};this.parentNodesGroup=this.plotGroup("parentNodesGroup","parentNode",this.visible?"inherit":"hidden",.1,t.seriesGroup),this.group?.attr({zIndex:2}),this.calculateParentRadius(),this.parentNode&&y(this.parentNode.plotX)&&y(this.parentNode.plotY)&&y(this.parentNodeRadius)&&(s=L({x:this.parentNode.plotX-this.parentNodeRadius,y:this.parentNode.plotY-this.parentNodeRadius,width:2*this.parentNodeRadius,height:2*this.parentNodeRadius},i),this.parentNode.graphic||(this.graph=this.parentNode.graphic=t.renderer.symbol(i.symbol).add(this.parentNodesGroup)),this.parentNode.graphic.attr(s))}drawTracker(){let t;let e=this.parentNode;super.drawTracker(),e&&(t=S(e.dataLabels)?e.dataLabels:e.dataLabel?[e.dataLabel]:[],e.graphic&&(e.graphic.element.point=e),t.forEach(t=>{(t.div||t.element).point=e}))}getPointRadius(){let t,e,i,s;let o=this.chart,a=o.plotWidth,r=o.plotHeight,n=this.options,l=n.useSimulation,h=Math.min(a,r),p={},d=[],c=o.allDataPoints||[],u=c.length;["minSize","maxSize"].forEach(t=>{let e=parseInt(n[t],10),i=/%$/.test(n[t]);p[t]=i?h*e/100:e*Math.sqrt(u)}),o.minRadius=t=p.minSize/Math.sqrt(u),o.maxRadius=e=p.maxSize/Math.sqrt(u);let g=l?this.calculateZExtremes():[t,e];c.forEach((o,a)=>{i=l?m(o[2],g[0],g[1]):o[2],0===(s=this.getRadius(g[0],g[1],t,e,i))&&(s=null),c[a][2]=s,d.push(s)}),this.radii=d}init(){return c.init.apply(this,arguments),f.call(this),this.eventsToUnbind.push(b(this,"updatedData",function(){this.chart.series.forEach(t=>{t.type===this.type&&(t.isDirty=!0)},this)})),this}onMouseUp(t){if(t.fixedPosition&&!t.removed){let i;let s=this.layout,o=this.parentNodeLayout;o&&s.options.dragBetweenSeries&&o.nodes.forEach(e=>{t&&t.marker&&e!==t.series.parentNode&&(i=s.getDistXY(t,e),s.vectorLength(i)-e.marker.radius-t.marker.radius<0&&(e.series.addPoint(L(t.options,{plotX:t.plotX,plotY:t.plotY}),!1),s.removeElementFromCollection(t,s.nodes),t.remove()))}),e.onMouseUp.apply(this,arguments)}}placeBubbles(t){let e=this.checkOverlap,i=this.positionBubble,s=[],o=1,a=0,r=0,n,l=[],h,p=t.sort((t,e)=>e[2]-t[2]);if(p.length){if(s.push([[0,0,p[0][2],p[0][3],p[0][4]]]),p.length>1)for(s.push([[0,0-p[1][2]-p[0][2],p[1][2],p[1][3],p[1][4]]]),h=2;h<p.length;h++)p[h][2]=p[h][2]||1,e(n=i(s[o][a],s[o-1][r],p[h]),s[o][0])?(s.push([]),r=0,s[o+1].push(i(s[o][a],s[o][0],p[h])),o++,a=0):o>1&&s[o-1][r+1]&&e(n,s[o-1][r+1])?(r++,s[o].push(i(s[o][a],s[o-1][r],p[h])),a++):(a++,s[o].push(n));this.chart.stages=s,this.chart.rawPositions=[].concat.apply([],s),this.resizeRadius(),l=this.chart.rawPositions}return l}pointAttribs(t,e){let i=this.options,s=t&&t.isParentNode,o=i.marker;s&&i.layoutAlgorithm&&i.layoutAlgorithm.parentNodeOptions&&(o=i.layoutAlgorithm.parentNodeOptions.marker);let a=o.fillOpacity,r=c.pointAttribs.call(this,t,e);return 1!==a&&(r["fill-opacity"]=a),r}positionBubble(t,e,i){let s=Math.pow,o=(0,Math.sqrt)(s(t[0]-e[0],2)+s(t[1]-e[1],2)),a=(0,Math.acos)((s(o,2)+s(i[2]+e[2],2)-s(i[2]+t[2],2))/(2*(i[2]+e[2])*o)),r=(0,Math.asin)((0,Math.abs)(t[0]-e[0])/o),n=(t[1]-e[1]<0?0:Math.PI)+a+r*((t[0]-e[0])*(t[1]-e[1])<0?1:-1);return[e[0]+(e[2]+i[2])*Math.sin(n),e[1]-(e[2]+i[2])*Math.cos(n),i[2],i[3],i[4]]}render(){let t=[];c.render.apply(this,arguments),!this.options.dataLabels.allowOverlap&&(this.data.forEach(e=>
23490{S(e.dataLabels)&&e.dataLabels.forEach(e=>{t.push(e)})}),this.options.useSimulation&&this.chart.hideOverlappingLabels(t))}resizeRadius(){let t,e,i,s,o;let a=this.chart,r=a.rawPositions,n=Math.min,l=Math.max,h=a.plotLeft,p=a.plotTop,d=a.plotHeight,c=a.plotWidth;for(let a of(t=i=Number.POSITIVE_INFINITY,e=s=Number.NEGATIVE_INFINITY,r))o=a[2],t=n(t,a[0]-o),e=l(e,a[0]+o),i=n(i,a[1]-o),s=l(s,a[1]+o);let u=[e-t,s-i],g=[(c-h)/u[0],(d-p)/u[1]],f=n.apply([],g);if(Math.abs(f-1)>1e-10){for(let t of r)t[2]*=f;this.placeBubbles(r)}else a.diffY=d/2+p-i-(s-i)/2,a.diffX=c/2+h-t-(e-t)/2}seriesBox(){let t;let e=this.chart,i=this.data,s=Math.max,o=Math.min,a=[e.plotLeft,e.plotLeft+e.plotWidth,e.plotTop,e.plotTop+e.plotHeight];return i.forEach(e=>{y(e.plotX)&&y(e.plotY)&&e.marker.radius&&(t=e.marker.radius,a[0]=o(a[0],e.plotX-t),a[1]=s(a[1],e.plotX+t),a[2]=o(a[2],e.plotY-t),a[3]=s(a[3],e.plotY+t))}),M(a.width/a.height)?a:null}setVisible(){let t=this;c.setVisible.apply(t,arguments),t.parentNodeLayout&&t.graph?t.visible?(t.graph.show(),t.parentNode.dataLabel&&t.parentNode.dataLabel.show()):(t.graph.hide(),t.parentNodeLayout.removeElementFromCollection(t.parentNode,t.parentNodeLayout.nodes),t.parentNode.dataLabel&&t.parentNode.dataLabel.hide()):t.layout&&(t.visible?t.layout.addElementsToCollection(t.points,t.layout.nodes):t.points.forEach(e=>{t.layout.removeElementFromCollection(e,t.layout.nodes)}))}translate(){let t,e,i;let s=this.chart,o=this.data,a=this.index,r=this.options.useSimulation;for(let n of(this.processedXData=this.xData,this.generatePoints(),y(s.allDataPoints)||(s.allDataPoints=this.accumulateAllPoints(),this.getPointRadius()),r?i=s.allDataPoints:(i=this.placeBubbles(s.allDataPoints),this.options.draggable=!1),i))n[3]===a&&(t=o[n[4]],e=k(n[2],void 0),r||(t.plotX=n[0]-s.plotLeft+s.diffX,t.plotY=n[1]-s.plotTop+s.diffY),M(e)&&(t.marker=x(t.marker,{radius:e,width:2*e,height:2*e}),t.radius=e));r&&this.deferLayout(),P(this,"afterTranslate")}}return C.defaultOptions=L(u.defaultOptions,a),x(C.prototype,{pointClass:o,axisTypes:[],directTouch:!0,forces:["barycenter","repulsive"],hasDraggableNodes:!0,invertible:!1,isCartesian:!1,noSharedTooltip:!0,pointArrayMap:["value"],pointValKey:"value",requireSorting:!1,trackerGroups:["group","dataLabelsGroup","parentNodesGroup"],initDataLabels:g,alignDataLabel:c.alignDataLabel,indexateNodes:d,onMouseDown:e.onMouseDown,onMouseMove:e.onMouseMove,redrawHalo:e.redrawHalo,searchPoint:d}),n.registerSeriesType("packedbubble",C),C}),i(e,"Series/Polygon/PolygonSeriesDefaults.js",[],function(){return{marker:{enabled:!1,states:{hover:{enabled:!1}}},stickyTracking:!1,tooltip:{followPointer:!0,pointFormat:""},trackByArea:!0,legendSymbol:"rectangle"}}),i(e,"Series/Polygon/PolygonSeries.js",[e["Core/Globals.js"],e["Series/Polygon/PolygonSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{noop:o}=t,{area:a,line:r,scatter:n}=i.seriesTypes,{extend:l,merge:h}=s;class p extends n{getGraphPath(){let t=r.prototype.getGraphPath.call(this),e=t.length+1;for(;e--;)(e===t.length||"M"===t[e][0])&&e>0&&t.splice(e,0,["Z"]);return this.areaPath=t,t}drawGraph(){this.options.fillColor=this.color,a.prototype.drawGraph.call(this)}}return p.defaultOptions=h(n.defaultOptions,e),l(p.prototype,{type:"polygon",drawTracker:r.prototype.drawTracker,setStackedPoints:o}),i.registerSeriesType("polygon",p),p}),i(e,"Core/Axis/RadialAxisDefaults.js",[],function(){return{circular:{gridLineWidth:1,labels:{align:void 0,x:0,y:void 0,style:{textOverflow:"none"}},maxPadding:0,minPadding:0,showLastLabel:!1,tickLength:0},radial:{gridLineInterpolation:"circle",gridLineWidth:1,labels:{align:"right",padding:5,x:-3,y:-2},showLastLabel:!1,title:{x:4,text:null,rotation:90}},radialGauge:{endOnTick:!1,gridLineWidth:0,labels:{align:"center",distance:-25,x:0,y:void 0},lineWidth:1,minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickPosition:"inside",tickWidth:2,title:{rotation:0,text:""},zIndex:2}}}),i(e,"Core/Axis/RadialAxis.js",[e["Core/Axis/RadialAxisDefaults.js"],e["Core/Defaults.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,
23490i,s){var o;let{defaultOptions:a}=e,{composed:r,noop:n}=i,{addEvent:l,correctFloat:h,defined:p,extend:d,fireEvent:c,isObject:u,merge:g,pick:f,pushUnique:b,relativeLength:m,wrap:y}=s;return function(e){function s(){this.autoConnect=this.isCircular&&void 0===f(this.userMax,this.options.max)&&h(this.endAngleRad-this.startAngleRad)===h(2*Math.PI),!this.isCircular&&this.chart.inverted&&this.max++,this.autoConnect&&(this.max+=this.categories&&1||this.pointRange||this.closestPointRange||0)}function o(){return()=>{if(this.isRadial&&this.tickPositions&&this.options.labels&&!0!==this.options.labels.allowOverlap)return this.tickPositions.map(t=>this.ticks[t]&&this.ticks[t].label).filter(t=>!!t)}}function x(){return n}function P(t,e,i){let s=this.pane.center,o=t.value,a,r,n;return this.isCircular?(p(o)?t.point&&(t.point.shapeArgs||{}).start&&(o=this.chart.inverted?this.translate(t.point.rectPlotY,!0):t.point.x):(r=t.chartX||0,n=t.chartY||0,o=this.translate(Math.atan2(n-i,r-e)-this.startAngleRad,!0)),r=(a=this.getPosition(o)).x,n=a.y):(p(o)||(r=t.chartX,n=t.chartY),p(r)&&p(n)&&(i=s[1]+this.chart.plotTop,o=this.translate(Math.min(Math.sqrt(Math.pow(r-e,2)+Math.pow(n-i,2)),s[2]/2)-s[3]/2,!0))),[o,r||0,n||0]}function S(t,e,i){let s=this.pane.center,o=this.chart,a=this.left||0,r=this.top||0,n,l=f(e,s[2]/2-this.offset),h;return void 0===i&&(i=this.horiz?0:this.center&&-this.center[3]/2),i&&(l+=i),this.isCircular||void 0!==e?((h=this.chart.renderer.symbols.arc(a+s[0],r+s[1],l,l,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})).xBounds=[a+s[0]],h.yBounds=[r+s[1]-l]):(n=this.postTranslate(this.angleRad,l),h=[["M",this.center[0]+o.plotLeft,this.center[1]+o.plotTop],["L",n.x,n.y]]),h}function M(){this.constructor.prototype.getOffset.call(this),this.chart.axisOffset[this.side]=0}function L(t,e,i){let s=this.chart,o=t=>{if("string"==typeof t){let e=parseInt(t,10);return d.test(t)&&(e=e*n/100),e}return t},a=this.center,r=this.startAngleRad,n=a[2]/2,l=Math.min(this.offset,0),h=this.left||0,p=this.top||0,d=/%$/,c=this.isCircular,u,g,b,m,y,x,P=f(o(i.outerRadius),n),S=o(i.innerRadius),M=f(o(i.thickness),10);if("polygon"===this.options.gridLineInterpolation)x=this.getPlotLinePath({value:t}).concat(this.getPlotLinePath({value:e,reverse:!0}));else{t=Math.max(t,this.min),e=Math.min(e,this.max);let o=this.translate(t),n=this.translate(e);c||(P=o||0,S=n||0),"circle"!==i.shape&&c?(u=r+(o||0),g=r+(n||0)):(u=-Math.PI/2,g=1.5*Math.PI,y=!0),P-=l,M-=l,x=s.renderer.symbols.arc(h+a[0],p+a[1],P,P,{start:Math.min(u,g),end:Math.max(u,g),innerR:f(S,P-M),open:y,borderRadius:i.borderRadius}),c&&(b=(g+u)/2,m=h+a[0]+a[2]/2*Math.cos(b),x.xBounds=b>-Math.PI/2&&b<Math.PI/2?[m,s.plotWidth]:[0,m],x.yBounds=[p+a[1]+a[2]/2*Math.sin(b)],x.yBounds[0]+=b>-Math.PI&&b<0||b>Math.PI?-10:10)}return x}function k(t){let e=this.pane.center,i=this.chart,s=i.inverted,o=t.reverse,a=this.pane.options.background?this.pane.options.background[0]||this.pane.options.background:{},r=a.innerRadius||"0%",n=a.outerRadius||"100%",l=e[0]+i.plotLeft,h=e[1]+i.plotTop,p=this.height,d=t.isCrosshair,c=e[3]/2,u=t.value,g,f,b,y,x,P,S,M,L,k=this.getPosition(u),C=k.x,v=k.y;if(d&&(u=(M=this.getCrosshairPosition(t,l,h))[0],C=M[1],v=M[2]),this.isCircular)f=Math.sqrt(Math.pow(C-l,2)+Math.pow(v-h,2)),b="string"==typeof r?m(r,1):r/f,y="string"==typeof n?m(n,1):n/f,e&&c&&(b<(g=c/f)&&(b=g),y<g&&(y=g)),L=[["M",l+b*(C-l),h-b*(h-v)],["L",C-(1-y)*(C-l),v+(1-y)*(h-v)]];else if((u=this.translate(u))&&(u<0||u>p)&&(u=0),"circle"===this.options.gridLineInterpolation)L=this.getLinePath(0,u,c);else if(L=[],i[s?"yAxis":"xAxis"].forEach(t=>{t.pane===this.pane&&(x=t)}),x){S=x.tickPositions,x.autoConnect&&(S=S.concat([S[0]])),o&&(S=S.slice().reverse()),u&&(u+=c);for(let t=0;t<S.length;t++)P=x.getPosition(S[t],u),L.push(t?["L",P.x,P.y]:["M",P.x,P.y])}return L}function C(t,e){let i=this.translate(t);return this.postTranslate(this.isCircular?i:this.angleRad,f(this.isCircular?e:i<0?0:i,this.center[2]/2)-this.offset)}function v(){let t=this.center,e=this.chart,i=this.options.title;return{x:e.plotLeft+t[0]+(i.x||0),y:e.plotTop+t[1]-({high:.5,middle:.25,low:0})[i.align]*t[2]+(i.y||0)}}function A(t){t.beforeSetTickPositions=s,t.createLabelCollector=o,t.getCrosshairPosition=P,t.getLinePath=S,t.getOffset=M,t.getPlotBandPath=L,t.getPlotLinePath=k,t.getPosition=C,t.getTitlePosition=v,t.postTranslate=D,t.setAxisSize=E,t.setAxisTranslation=z,t.setOptions=O}function w(){let t=this.chart,e=this.options,i=t.angular&&this.isXAxis,s=this.pane,o=s&&s.options;if(!i&&s&&(t.angular||t.polar)){let t=2*Math.PI,i=(f(o.startAngle,0)-90)*Math.PI/180,s=(f(o.endAngle,f(o.startAngle,0)+360)-90)*Math.PI/180;this.angleRad=(e.angle||0)*Math.PI/180,this.startAngleRad=i,this.endAngleRad=s,this.offset=e.offset||0;let a=(i%t+t)%t,r=(s%t+t)%t;a>Math.PI&&(a-=t),r>Math.PI&&(r-=t),this.normalizedStartAngleRad=a,this.normalizedEndAngleRad=r}}function N(t){this.isRadial&&(t.align=void 0,t.preventDefault())}function T(){if(this.chart&&this.chart.labelCollectors){let t=this.labelCollector?this.chart.labelCollectors.indexOf(this.labelCollector):-1;t>=0&&this.chart.labelCollectors.splice(t,1)}}function X(t){let e;let i=this.chart,s=i.angular,o=i.polar,a=this.isXAxis,r=this.coll,l=t.userOptions.pane||0,h=this.pane=i.pane&&i.pane[l];
23490if("colorAxis"===r){this.isRadial=!1;return}s?(s&&a?(this.isHidden=!0,this.createLabelCollector=x,this.getOffset=n,this.redraw=B,this.render=B,this.setScale=n,this.setCategories=n,this.setTitle=n):A(this),e=!a):o&&(A(this),e=this.horiz),s||o?(this.isRadial=!0,this.labelCollector||(this.labelCollector=this.createLabelCollector()),this.labelCollector&&i.labelCollectors.push(this.labelCollector)):this.isRadial=!1,h&&e&&(h.axis=this),this.isCircular=e}function R(){this.isRadial&&this.beforeSetTickPositions()}function Y(t){let e=this.label;if(!e)return;let i=this.axis,s=e.getBBox(),o=i.options.labels,a=(i.translate(this.pos)+i.startAngleRad+Math.PI/2)/Math.PI*180%360,r=Math.round(a),n=p(o.y)?0:-(.3*s.height),l=o.y,h,d=20,c=o.align,u="end",g=r<0?r+360:r,b=g,y=0,x=0;i.isRadial&&(h=i.getPosition(this.pos,i.center[2]/2+m(f(o.distance,-25),i.center[2]/2,-i.center[2]/2)),"auto"===o.rotation?e.attr({rotation:a}):p(l)||(l=i.chart.renderer.fontMetrics(e).b-s.height/2),p(c)||(i.isCircular?(s.width>i.len*i.tickInterval/(i.max-i.min)&&(d=0),c=a>d&&a<180-d?"left":a>180+d&&a<360-d?"right":"center"):c="center",e.attr({align:c})),"auto"===c&&2===i.tickPositions.length&&i.isCircular&&(g>90&&g<180?g=180-g:g>270&&g<=360&&(g=540-g),b>180&&b<=360&&(b=360-b),(i.pane.options.startAngle===r||i.pane.options.startAngle===r+360||i.pane.options.startAngle===r-360)&&(u="start"),c=r>=-90&&r<=90||r>=-360&&r<=-270||r>=270&&r<=360?"start"===u?"right":"left":"start"===u?"left":"right",b>70&&b<110&&(c="center"),g<15||g>=180&&g<195?y=.3*s.height:g>=15&&g<=35?y="start"===u?0:.75*s.height:g>=195&&g<=215?y="start"===u?.75*s.height:0:g>35&&g<=90?y="start"===u?-(.25*s.height):s.height:g>215&&g<=270&&(y="start"===u?s.height:-(.25*s.height)),b<15?x="start"===u?-(.15*s.height):.15*s.height:b>165&&b<=180&&(x="start"===u?.15*s.height:-(.15*s.height)),e.attr({align:c}),e.translate(x,y+n)),t.pos.x=h.x+(o.x||0),t.pos.y=h.y+(l||0))}function j(t){this.axis.getPosition&&d(t.pos,this.axis.getPosition(this.pos))}function I({options:t}){t.xAxis&&g(!0,e.radialDefaultOptions.circular,t.xAxis),t.yAxis&&g(!0,e.radialDefaultOptions.radialGauge,t.yAxis)}function D(t,e){let i=this.chart,s=this.center;return t=this.startAngleRad+t,{x:i.plotLeft+s[0]+Math.cos(t)*e,y:i.plotTop+s[1]+Math.sin(t)*e}}function B(){this.isDirty=!1}function E(){let t,e;this.constructor.prototype.setAxisSize.call(this),this.isRadial&&(this.pane.updateCenter(this),t=this.center=this.pane.center.slice(),this.isCircular?this.sector=this.endAngleRad-this.startAngleRad:(e=this.postTranslate(this.angleRad,t[3]/2),t[0]=e.x-this.chart.plotLeft,t[1]=e.y-this.chart.plotTop),this.len=this.width=this.height=(t[2]-t[3])*f(this.sector,1)/2)}function z(){this.constructor.prototype.setAxisTranslation.call(this),this.center&&(this.isCircular?this.transA=(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.transA=(this.center[2]-this.center[3])/2/(this.max-this.min||1),this.isXAxis?this.minPixelPadding=this.transA*this.minPointOffset:this.minPixelPadding=0)}function O(t){let{coll:i}=this,{angular:s,inverted:o,polar:r}=this.chart,n={};s?this.isXAxis||(n=g(a.yAxis,e.radialDefaultOptions.radialGauge)):r&&(n=this.horiz?g(a.xAxis,e.radialDefaultOptions.circular):g("xAxis"===i?a.xAxis:a.yAxis,e.radialDefaultOptions.radial)),o&&"yAxis"===i&&(n.stackLabels=u(a.yAxis,!0)?a.yAxis.stackLabels:{},n.reversedStacks=!0);let l=this.options=g(n,t);l.plotBands||(l.plotBands=[]),c(this,"afterSetOptions")}function W(t,e,i,s,o,a,r){let n;let l=this.axis;return l.isRadial?["M",e,i,"L",(n=l.getPosition(this.pos,l.center[2]/2+s)).x,n.y]:t.call(this,e,i,s,o,a,r)}e.radialDefaultOptions=g(t),e.compose=function(t,e){return b(r,"Axis.Radial")&&(l(t,"afterInit",w),l(t,"autoLabelAlign",N),l(t,"destroy",T),l(t,"init",X),l(t,"initialAxisTranslation",R),l(e,"afterGetLabelPosition",Y),l(e,"afterGetPosition",j),l(i,"setOptions",I),y(e.prototype,"getMarkPath",W)),t}}(o||(o={})),o}),i(e,"Series/PolarComposition.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Globals.js"],e["Core/Series/Series.js"],e["Extensions/Pane/Pane.js"],e["Core/Axis/RadialAxis.js"],e["Core/Utilities.js"]],function(t,e,
vendor: 5,047 bytes, line 23490
23490i,s,o,a){let{animObject:r}=t,{composed:n}=e,{addEvent:l,defined:h,find:p,isNumber:d,merge:c,pick:u,pushUnique:g,relativeLength:f,splat:b,uniqueKey:m,wrap:y}=a;function x(){(this.pane||[]).forEach(t=>{t.render()})}function P(t){let e=t.args[0].xAxis,i=t.args[0].yAxis,s=t.args[0].chart;e&&i&&("polygon"===i.gridLineInterpolation?(e.startOnTick=!0,e.endOnTick=!0):"polygon"===e.gridLineInterpolation&&s.inverted&&(i.startOnTick=!0,i.endOnTick=!0))}function S(){this.pane||(this.pane=[]),this.options.pane=b(this.options.pane),this.options.pane.forEach(t=>{new s(t,this)},this)}function M(t){let e=t.args.marker,i=this.chart.xAxis[0],s=this.chart.yAxis[0],o=this.chart.inverted,a=o?s:i,r=o?i:s;if(this.chart.polar){t.preventDefault();let i=(e.attr?e.attr("start"):e.start)-a.startAngleRad,s=e.attr?e.attr("r"):e.r,o=(e.attr?e.attr("end"):e.end)-a.startAngleRad,n=e.attr?e.attr("innerR"):e.innerR;t.result.x=i+a.pos,t.result.width=o-i,t.result.y=r.len+r.pos-s,t.result.height=s-n}}function L(t){let e=this.chart;if(e.polar&&e.hoverPane&&e.hoverPane.axis){t.preventDefault();let i=e.hoverPane.center,s=e.mouseDownX||0,o=e.mouseDownY||0,a=t.args.chartY,r=t.args.chartX,n=2*Math.PI,l=e.hoverPane.axis.startAngleRad,h=e.hoverPane.axis.endAngleRad,p=e.inverted?e.xAxis[0]:e.yAxis[0],d={},c="arc";if(d.x=i[0]+e.plotLeft,d.y=i[1]+e.plotTop,this.zoomHor){let t=l>0?h-l:Math.abs(l)+Math.abs(h),u=Math.atan2(o-e.plotTop-i[1],s-e.plotLeft-i[0])-l,g=Math.atan2(a-e.plotTop-i[1],r-e.plotLeft-i[0])-l;d.r=i[2]/2,d.innerR=i[3]/2,u<=0&&(u+=n),g<=0&&(g+=n),g<u&&(g=[u,u=g][0]),t<n&&l+g>h+(n-t)/2&&(g=u,u=l<=0?l:0);let f=d.start=Math.max(u+l,l),b=d.end=Math.min(g+l,h);if("polygon"===p.options.gridLineInterpolation){let t=e.hoverPane.axis,s=f-t.startAngleRad+t.pos,o=p.getPlotLinePath({value:p.max}),a=t.toValue(s),r=t.toValue(s+(b-f));if(a<t.getExtremes().min){let{min:e,max:i}=t.getExtremes();a=i-(e-a)}if(r<t.getExtremes().min){let{min:e,max:i}=t.getExtremes();r=i-(e-r)}r<a&&(r=[a,a=r][0]),(o=A(o,a,r,t)).push(["L",i[0]+e.plotLeft,e.plotTop+i[1]]),d.d=o,c="path"}}if(this.zoomVert){let t=e.inverted?e.xAxis[0]:e.yAxis[0],n=Math.sqrt(Math.pow(s-e.plotLeft-i[0],2)+Math.pow(o-e.plotTop-i[1],2)),p=Math.sqrt(Math.pow(r-e.plotLeft-i[0],2)+Math.pow(a-e.plotTop-i[1],2));if(p<n&&(n=[p,p=n][0]),p>i[2]/2&&(p=i[2]/2),n<i[3]/2&&(n=i[3]/2),this.zoomHor||(d.start=l,d.end=h),d.r=p,d.innerR=n,"polygon"===t.options.gridLineInterpolation){let e=t.toValue(t.len+t.pos-n),i=t.toValue(t.len+t.pos-p),s=t.getPlotLinePath({value:i}).concat(t.getPlotLinePath({value:e,reverse:!0}));d.d=s,c="path"}}if(this.zoomHor&&this.zoomVert&&"polygon"===p.options.gridLineInterpolation){let t=e.hoverPane.axis,i=d.start||0,s=d.end||0,o=i-t.startAngleRad+t.pos,a=t.toValue(o),r=t.toValue(o+(s-i));if(d.d instanceof Array){let t=d.d.slice(0,d.d.length/2),i=d.d.slice(d.d.length/2,d.d.length);i=[...i].reverse();let s=e.hoverPane.axis;t=A(t,a,r,s),(i=A(i,a,r,s))&&(i[0][0]="L"),i=[...i].reverse(),d.d=t.concat(i),c="path"}}t.attrs=d,t.shapeType=c}}function k(){let t=this.chart;t.polar&&(this.polar=new B(this),t.inverted&&(this.isRadialSeries=!0,this.is("column")&&(this.isRadialBar=!0)))}function C(){if(this.chart.polar&&this.xAxis){let{xAxis:t,yAxis:i}=this,s=this.chart;this.kdByAngle=s.tooltip&&s.tooltip.shared,this.kdByAngle||s.inverted?this.searchPoint=v:this.options.findNearestPointBy="xy";let o=this.points,a=o.length;for(;a--;)this.is("column")||this.is("columnrange")||this.polar.toXY(o[a]),s.hasParallelCoordinates||this.yAxis.reversed||(u(o[a].y,Number.MIN_VALUE)<i.min||o[a].x<t.min||o[a].x>t.max?(o[a].isNull=!0,o[a].plotY=NaN):o[a].isNull=o[a].isValid&&!o[a].isValid());this.hasClipCircleSetter||(this.hasClipCircleSetter=!!this.eventsToUnbind.push(l(this,"afterRender",function(){let t;s.polar&&!1!==this.options.clip&&(t=this.yAxis.pane.center,this.clipCircle?this.clipCircle.animate({x:t[0],y:t[1],r:t[2]/2,innerR:t[3]/2}):this.clipCircle=function(t,e,i,s,o){let a=m(),r=t.createElement("clipPath").attr({id:a}).add(t.defs),n=o?t.arc(e,i,s,o,0,2*Math.PI).add(r):t.circle(e,i,s).add(r);return n.id=a,n.clipPath=r,n}(s.renderer,t[0],t[1],t[2]/2,t[3]/2),this.group.clip(this.clipCircle),this.setClip=e.noop)})))}}function v(t){let e=this.chart,i=this.xAxis,s=this.yAxis,o=i.pane&&i.pane.center,a=t.chartX-(o&&o[0]||0)-e.plotLeft,r=t.chartY-(o&&o[1]||0)-e.plotTop,n=e.inverted?{clientX:t.chartX-s.pos,plotY:t.chartY-i.pos}:{clientX:180+-180/Math.PI*Math.atan2(a,r)};return this.searchKDTree(n)}function A(t,e,i,s){let o=s.tickInterval,a=s.tickPositions,r=p(a,t=>t>=i),n=p([...a].reverse(),t=>t<=e);return h(r)||(r=a[a.length-1]),h(n)||(n=a[0],r+=o,t[0][0]="L",t.unshift(t[t.length-3])),(t=t.slice(a.indexOf(n),a.indexOf(r)+1))[0][0]="M",t}function w(t,e){return p(this.pane||[],t=>t.options.id===e)||t.call(this,e)}function N(t,e,s,o,a,r){let n,l,h;let p=this.chart,d=u(o.inside,!!this.options.stacking);if(p.polar){if(n=e.rectPlotX/Math.PI*180,p.inverted)this.forceDL=p.isInsidePlot(e.plotX,e.plotY),d&&e.shapeArgs?(l=e.shapeArgs,a=c(a,{x:(h=this.yAxis.postTranslate(((l.start||0
23490)+(l.end||0))/2-this.xAxis.startAngleRad,e.barX+e.pointWidth/2)).x-p.plotLeft,y:h.y-p.plotTop})):e.tooltipPos&&(a=c(a,{x:e.tooltipPos[0],y:e.tooltipPos[1]})),o.align=u(o.align,"center"),o.verticalAlign=u(o.verticalAlign,"middle");else{var g;let t,e;null===(g=o).align&&(t=n>20&&n<160?"left":n>200&&n<340?"right":"center",g.align=t),null===g.verticalAlign&&(e=n<45||n>315?"bottom":n>135&&n<225?"top":"middle",g.verticalAlign=e),o=g}i.prototype.alignDataLabel.call(this,e,s,o,a,r),this.isRadialBar&&e.shapeArgs&&e.shapeArgs.start===e.shapeArgs.end?s.hide():s.show()}else t.call(this,e,s,o,a,r)}function T(){let t=this.options,e=t.stacking,i=this.chart,s=this.xAxis,o=this.yAxis,r=o.reversed,n=o.center,l=s.startAngleRad,p=s.endAngleRad-l,c=t.threshold,u=0,g,b,m,y,x,P=0,S=0,M,L,k,C,v,A,w,N;if(s.isRadial)for(m=(g=this.points).length,y=o.translate(o.min),x=o.translate(o.max),c=t.threshold||0,i.inverted&&d(c)&&h(u=o.translate(c))&&(u<0?u=0:u>p&&(u=p),this.translatedThreshold=u+l);m--;){if(A=(b=g[m]).barX,L=b.x,k=b.y,b.shapeType="arc",i.inverted){b.plotY=o.translate(k),e&&o.stacking?(v=o.stacking.stacks[(k<0?"-":"")+this.stackKey],this.visible&&v&&v[L]&&!b.isNull&&(C=v[L].points[this.getStackIndicator(void 0,L,this.index).key],P=o.translate(C[0]),S=o.translate(C[1]),h(P)&&(P=a.clamp(P,0,p)))):(P=u,S=b.plotY),P>S&&(S=[P,P=S][0]),r?S>y?S=y:P<x?P=x:(P>y||S<x)&&(P=S=p):P<y?P=y:S>x?S=x:(S<y||P>x)&&(P=S=0),o.min>o.max&&(P=S=r?p:0),P+=l,S+=l,n&&(b.barX=A+=n[3]/2),w=Math.max(A,0),N=Math.max(A+b.pointWidth,0);let i=t.borderRadius,s=f(("object"==typeof i?i.radius:i)||0,N-w);b.shapeArgs={x:n[0],y:n[1],r:N,innerR:w,start:P,end:S,borderRadius:s},b.opacity=P===S?0:void 0,b.plotY=(h(this.translatedThreshold)&&(P<this.translatedThreshold?P:S))-l}else P=A+l,b.shapeArgs=this.polar.arc(b.yBottom,b.plotY,P,P+b.pointWidth),b.shapeArgs.borderRadius=0;this.polar.toXY(b),i.inverted?(M=o.postTranslate(b.rectPlotY,A+b.pointWidth/2),b.tooltipPos=[M.x-i.plotLeft,M.y-i.plotTop]):b.tooltipPos=[b.plotX,b.plotY],n&&(b.ttBelow=b.plotY>n[1])}}function X(t,e){let i,s;let o=this;if(this.chart.polar){e=e||this.points;for(let t=0;t<e.length;t++)if(!e[t].isNull){i=t;break}!1!==this.options.connectEnds&&void 0!==i&&(this.connectEnds=!0,e.splice(e.length,0,e[i]),s=!0),e.forEach(t=>{void 0===t.polarPlotY&&o.polar.toXY(t)})}let a=t.apply(this,[].slice.call(arguments,1));return s&&e.pop(),a}function R(t,e){let i=this.chart,s={xAxis:[],yAxis:[]};return i.polar?i.axes.forEach(t=>{if("colorAxis"===t.coll)return;let o=t.isXAxis,a=t.center,r=e.chartX-a[0]-i.plotLeft,n=e.chartY-a[1]-i.plotTop;s[o?"xAxis":"yAxis"].push({axis:t,value:t.translate(o?Math.PI-Math.atan2(r,n):Math.sqrt(Math.pow(r,2)+Math.pow(n,2)),!0)})}):s=t.call(this,e),s}function Y(t,e){this.chart.polar||t.call(this,e)}function j(t,i){let s=this,o=this.chart,a=this.group,n=this.markerGroup,l=this.xAxis&&this.xAxis.center,h=o.plotLeft,p=o.plotTop,d=this.options.animation,c,g,f,b,m,y;o.polar?s.isRadialBar?i||(s.startAngleRad=u(s.translatedThreshold,s.xAxis.startAngleRad),e.seriesTypes.pie.prototype.animate.call(s,i)):(d=r(d),s.is("column")?i||(g=l[3]/2,s.points.forEach(t=>{f=t.graphic,m=(b=t.shapeArgs)&&b.r,y=b&&b.innerR,f&&b&&(f.attr({r:g,innerR:g}),f.animate({r:m,innerR:y},s.options.animation))})):i?(c={translateX:l[0]+h,translateY:l[1]+p,scaleX:.001,scaleY:.001},a.attr(c),n&&n.attr(c)):(c={translateX:h,translateY:p,scaleX:1,scaleY:1},a.animate(c,d),n&&n.animate(c,d))):t.call(this,i)}function I(t,e,i,s){let o,a;if(this.chart.polar){if(s){let t=(a=function t(e,i,s,o){let a,r,n,l,h,p;let d=o?1:0,c=(a=i>=0&&i<=e.length-1?i:i<0?e.length-1+i:0)-1<0?e.length-(1+d):a-1,u=a+1>e.length-1?d:a+1,g=e[c],f=e[u],b=g.plotX,m=g.plotY,y=f.plotX,x=f.plotY,P=e[a].plotX,S=e[a].plotY;
23490r=(1.5*P+b)/2.5,n=(1.5*S+m)/2.5,l=(1.5*P+y)/2.5,h=(1.5*S+x)/2.5;let M=Math.sqrt(Math.pow(r-P,2)+Math.pow(n-S,2)),L=Math.sqrt(Math.pow(l-P,2)+Math.pow(h-S,2)),k=Math.atan2(n-S,r-P);p=Math.PI/2+(k+Math.atan2(h-S,l-P))/2,Math.abs(k-p)>Math.PI/2&&(p-=Math.PI),r=P+Math.cos(p)*M,n=S+Math.sin(p)*M;let C={rightContX:l=P+Math.cos(Math.PI+p)*L,rightContY:h=S+Math.sin(Math.PI+p)*L,leftContX:r,leftContY:n,plotX:P,plotY:S};return s&&(C.prevPointCont=t(e,c,!1,o)),C}(e,s,!0,this.connectEnds)).prevPointCont&&a.prevPointCont.rightContX,i=a.prevPointCont&&a.prevPointCont.rightContY;o=["C",d(t)?t:a.plotX,d(i)?i:a.plotY,d(a.leftContX)?a.leftContX:a.plotX,d(a.leftContY)?a.leftContY:a.plotY,a.plotX,a.plotY]}else o=["M",i.plotX,i.plotY]}else o=t.call(this,e,i,s);return o}function D(t,e,i=this.plotY){if(!this.destroyed){let{plotX:s,series:o}=this,{chart:a}=o;return a.polar&&d(s)&&d(i)?[s+(e?a.plotLeft:0),i+(e?a.plotTop:0)]:t.call(this,e,i)}}class B{static compose(t,e,i,a,r,h,p,d,c,u){if(s.compose(e,i),o.compose(t,r),g(n,"Polar")){let t=e.prototype,s=h.prototype,o=i.prototype,r=a.prototype;if(l(e,"afterDrawChartBox",x),l(e,"getAxes",S),l(e,"init",P),y(t,"get",w),y(o,"getCoordinates",R),y(o,"pinch",Y),l(i,"getSelectionMarkerAttrs",L),l(i,"getSelectionBox",M),l(a,"afterInit",k),l(a,"afterTranslate",C,{order:2}),l(a,"afterColumnTranslate",T,{order:4}),y(r,"animate",j),y(s,"pos",D),d){let t=d.prototype;y(t,"alignDataLabel",N),y(t,"animate",j)}if(c&&y(c.prototype,"getGraphPath",X),u){let t=u.prototype;y(t,"getPointSpline",I),p&&(p.prototype.getPointSpline=t.getPointSpline)}}}constructor(t){this.series=t}arc(t,e,i,s){let o=this.series,a=o.xAxis.center,r=o.yAxis.len,n=a[3]/2,l=r-e+n,h=r-u(t,r)+n;return o.yAxis.reversed&&(l<0&&(l=n),h<0&&(h=n)),{x:a[0],y:a[1],r:l,innerR:h,start:i,end:s}}toXY(t){let e=this.series,i=e.chart,s=e.xAxis,o=e.yAxis,a=t.plotX,r=i.inverted,n=t.y,l=t.plotY,h=r?a:o.len-l,p;if(r&&e&&!e.isRadialBar&&(t.plotY=l=d(n)?o.translate(n):0),t.rectPlotX=a,t.rectPlotY=l,o.center&&(h+=o.center[3]/2),d(l)){let e=r?o.postTranslate(l,h):s.postTranslate(a,h);t.plotX=t.polarPlotX=e.x-i.plotLeft,t.plotY=t.polarPlotY=e.y-i.plotTop}e.kdByAngle?((p=(a/Math.PI*180+s.pane.options.startAngle)%360)<0&&(p+=360),t.clientX=p):t.clientX=t.plotX}}return B}),i(e,"Core/Axis/WaterfallAxis.js",[e["Core/Globals.js"],e["Core/Axis/Stacking/StackItem.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{composed:o}=t,{addEvent:a,objectEach:r,pushUnique:n}=i;return function(t){function i(){let t=this.waterfall.stacks;t&&(t.changed=!1,delete t.alreadyChanged)}function s(){let t=this.options.stackLabels;t&&t.enabled&&this.waterfall.stacks&&this.waterfall.renderStackTotals()}function l(){this.waterfall||(this.waterfall=new p(this))}function h(){let t=this.axes;for(let e of this.series)if(e.options.stacking){for(let e of t)e.isXAxis||(e.waterfall.stacks.changed=!0);break}}t.compose=function(t,e){n(o,"Axis.Waterfall")&&(a(t,"init",l),a(t,"afterBuildStacks",i),a(t,"afterRender",s),a(e,"beforeRedraw",h))};class p{constructor(t){this.axis=t,this.stacks={changed:!1}}renderStackTotals(){let t=this.axis,i=t.waterfall.stacks,s=t.stacking&&t.stacking.stackTotalGroup,o=new e(t,t.options.stackLabels||{},!1,0,void 0);this.dummyStackItem=o,s&&r(i,t=>{r(t,(t,i)=>{o.total=t.stackTotal,o.x=+i,t.label&&(o.label=t.label),e.prototype.render.call(o,s),t.label=o.label,delete o.label})}),o.total=null}}t.Composition=p}(s||(s={})),s}),i(e,"Series/Waterfall/WaterfallPoint.js",[e["Series/Column/ColumnSeries.js"],e["Core/Series/Point.js"],e["Core/Utilities.js"]],function(t,e,i){let{isNumber:s}=i;class o extends t.prototype.pointClass{getClassName(){let t=e.prototype.getClassName.call(this);return this.isSum?t+=" highcharts-sum":this.isIntermediateSum&&(t+=" highcharts-intermediate-sum"),t}isValid(){return s(this.y)||this.isSum||!!this.isIntermediateSum}}return o}),i(e,"Series/Waterfall/WaterfallSeriesDefaults.js",[],function(){return{dataLabels:{inside:!0},lineWidth:1,lineColor:"#333333",dashStyle:"Dot",borderColor:"#333333",states:{hover:{lineWidthPlus:0}}}}),i(e,"Series/Waterfall/WaterfallSeries.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"],e["Core/Axis/WaterfallAxis.js"],e["Series/Waterfall/WaterfallPoint.js"],e["Series/Waterfall/WaterfallSeriesDefaults.js"]],function(t,e,
23490i,s,o){let{column:a,line:r}=t.seriesTypes,{addEvent:n,arrayMax:l,arrayMin:h,correctFloat:p,crisp:d,extend:c,isNumber:u,merge:g,objectEach:f,pick:b}=e;function m(t,e){return Object.hasOwnProperty.call(t,e)}class y extends a{generatePoints(){a.prototype.generatePoints.apply(this);for(let t=0,e=this.points.length;t<e;t++){let e=this.points[t],i=this.processedYData[t];u(i)&&(e.isIntermediateSum||e.isSum)&&(e.y=p(i))}}processData(t){let e,i,s,o,a,r;let n=this.options,l=this.yData,h=n.data,d=l.length,c=n.threshold||0;s=i=o=a=0;for(let t=0;t<d;t++)r=l[t],e=h&&h[t]?h[t]:{},"sum"===r||e.isSum?l[t]=p(s):"intermediateSum"===r||e.isIntermediateSum?(l[t]=p(i),i=0):(s+=r,i+=r),o=Math.min(s,o),a=Math.max(s,a);super.processData.call(this,t),n.stacking||(this.dataMin=o+c,this.dataMax=a)}toYData(t){return t.isSum?"sum":t.isIntermediateSum?"intermediateSum":t.y}updateParallelArrays(t,e){super.updateParallelArrays.call(this,t,e),("sum"===this.yData[0]||"intermediateSum"===this.yData[0])&&(this.yData[0]=null)}pointAttribs(t,e){let i=this.options.upColor;i&&!t.options.color&&u(t.y)&&(t.color=t.y>0?i:void 0);let s=a.prototype.pointAttribs.call(this,t,e);return delete s.dashstyle,s}getGraphPath(){return[["M",0,0]]}getCrispPath(){let t=this.data.filter(t=>u(t.y)),e=this.yAxis,i=t.length,s=this.graph?.strokeWidth()||0,o=this.xAxis.reversed,a=this.yAxis.reversed,r=this.options.stacking,n=[];for(let l=1;l<i;l++){if(!(this.options.connectNulls||u(this.data[t[l].index-1].y)))continue;let i=t[l].box,h=t[l-1],p=h.y||0,c=t[l-1].box;if(!i||!c)continue;let g=e.waterfall.stacks[this.stackKey],f=p>0?-c.height:0;if(g&&c&&i){let t;let p=g[l-1];if(r){let i=p.connectorThreshold;t=d(e.translate(i,!1,!0,!1,!0)+(a?f:0),s)}else t=d(c.y+(h.minPointLengthOffset||0),s);n.push(["M",(c.x||0)+(o?0:c.width||0),t],["L",(i.x||0)+(o&&i.width||0),t])}if(c&&n.length&&(!r&&p<0&&!a||p>0&&a)){let t=n[n.length-2];t&&"number"==typeof t[2]&&(t[2]+=c.height||0);let e=n[n.length-1];e&&"number"==typeof e[2]&&(e[2]+=c.height||0)}}return n}drawGraph(){r.prototype.drawGraph.call(this),this.graph&&this.graph.attr({d:this.getCrispPath()})}setStackedPoints(t){let e=this.options,i=t.waterfall?.stacks,s=e.threshold||0,o=this.stackKey,a=this.xData,r=a.length,n=s,l=n,h,p=0,d=0,c=0,u,g,f,b,m,y,x,P,S=(t,e,i,s)=>{if(h){if(u)for(;i<u;i++)h.stackState[i]+=s;else h.stackState[0]=t,u=h.stackState.length;h.stackState.push(h.stackState[u-1]+e)}};if(t.stacking&&i&&this.reserveSpace()){P=i.changed,(x=i.alreadyChanged)&&0>x.indexOf(o)&&(P=!0),i[o]||(i[o]={});let t=i[o];if(t)for(let i=0;i<r;i++)(!t[y=a[i]]||P)&&(t[y]={negTotal:0,posTotal:0,stackTotal:0,threshold:0,stateIndex:0,stackState:[],label:P&&t[y]?t[y].label:void 0}),h=t[y],(m=this.yData[i])>=0?h.posTotal+=m:h.negTotal+=m,b=e.data[i],g=h.absolutePos=h.posTotal,f=h.absoluteNeg=h.negTotal,h.stackTotal=g+f,u=h.stackState.length,b&&b.isIntermediateSum?(S(c,d,0,c),c=d,d=s,n^=l,l^=n,n^=l):b&&b.isSum?(S(s,p,u,0),n=s):(S(n,m,0,p),b&&(p+=m,d+=m)),h.stateIndex++,h.threshold=n,n+=h.stackTotal;i.changed=!1,i.alreadyChanged||(i.alreadyChanged=[]),i.alreadyChanged.push(o)}}getExtremes(){let t,e,i;let s=this.options.stacking;return s?(t=this.yAxis.waterfall.stacks,e=this.stackedYNeg=[],i=this.stackedYPos=[],"overlap"===s?f(t[this.stackKey],function(t){e.push(h(t.stackState)),i.push(l(t.stackState))}):f(t[this.stackKey],function(t){e.push(t.negTotal+t.threshold),i.push(t.posTotal+t.threshold)}),{dataMin:h(e),dataMax:l(i)}):{dataMin:this.dataMin,dataMax:this.dataMax}}}return y.defaultOptions=g(a.defaultOptions,o),y.compose=i.compose,c(y.prototype,{pointValKey:"y",showLine:!0,pointClass:s}),n(y,"afterColumnTranslate",function(){let{options:t,points:e,yAxis:i}=this,s=b(t.minPointLength,5),o=s/2,a=t.threshold||0,r=t.stacking,n=i.waterfall.stacks[this.stackKey],l=a,h=a,p,f,y,x;for(let t=0;t<e.length;t++){let b=e[t],P=this.processedYData[t],S=c({x:0,y:0,width:0,height:0},b.shapeArgs||{});b.box=S;let M=[0,P],L=b.y||0;if(r){if(n){let e=n[t];"overlap"===r?(f=e.stackState[e.stateIndex--],p=L>=0?f:f-L,m(e,"absolutePos")&&delete e.absolutePos,m(e,"absoluteNeg")&&delete e.absoluteNeg):(L>=0?(f=e.threshold+e.posTotal,e.posTotal-=L,p=f):(f=e.threshold+e.negTotal,e.negTotal-=L,p=f-L),!e.posTotal&&u(e.absolutePos)&&m(e,"absolutePos")&&(e.posTotal=e.absolutePos,delete e.absolutePos),!e.negTotal&&u(e.absoluteNeg)&&m(e,"absoluteNeg")&&(e.negTotal=e.absoluteNeg,delete e.absoluteNeg)),b.isSum||(e.connectorThreshold=e.threshold+e.stackTotal),i.reversed?(y=L>=0?p-L:p+L,x=p):(y=p,x=p-L),b.below=y<=a,S.y=i.translate(y,!1,!0,!1,!0),S.height=Math.abs(S.y-i.translate(x,!1,!0,!1,!0));let s=i.waterfall.dummyStackItem;s&&(s.x=t,s.label=n[t].label,s.setOffset(this.pointXOffset||0,this.barW||0,this.stackedYNeg[t],this.stackedYPos[t],void 0,this.xAxis))}}else p=Math.max(h,h+L)+M[0],S.y=i.translate(p,!1,!0,!1,!0),b.isSum?(S.y=i.translate(M[1],!1,!0,!1,!0),S.height=Math.min(i.translate(M[0],!1,!0,!1,!0),i.len)-S.y,b.below=M[1]<=a):b.isIntermediateSum?(L>=0?(y=M[1]+l,x=l):(y=l,x=M[1]+l),i.reversed&&(y^=x,x^=y,y^=x),S.y=i.translate(y,!1,!0,!1,!0),S.height=Math.abs(S.y-Math.min(i.translate(x,!1,!0,!1,!0),i.len)),l+=M[1],b.below=y<=a):(S.height=P>0?i.translate(h,!1,!0,!1,!0)-S.y:i.translate(h,!1,!0,!1,!0)-i.translate(h-P,!1,!0,!1,!0),h+=P,b.below=h<a),S.height<0&&(S.y+=S.height,S.height*=-1);b.plotY=S.y,b.yBottom=S.y+S.height,S.height<=s&&!b.isNull?(S.height=s,S.y-=o,b.yBottom=S.y+S.height,b.plotY=S.y,L<0?b.minPointLengthOffset=-o:b.minPointLengthOffset=o):(b.isNull&&(S.width=0),b.minPointLengthOffset=0);let k=b.plotY+(b.negative?S.height:0);b.below&&(b.plotY+=S.height),b.tooltipPos&&(this.chart.inverted?b.tooltipPos[0]=i.len-k:b.tooltipPos[1]=k),b.isInside=this.isPointInside(b);let C=d(b.yBottom,this.borderWidth);S.y=d(S.y,this.borderWidth),S.height=C-S.y,g(!0,b.shapeArgs,S)}},{order:2}),t.registerSeriesType("waterfall",y),y}),i(e,"masters/highcharts-more.src.js",[e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Extensions/Pane/Pane.js"],e["Series/Bubble/BubbleSeries.js"],e["Series/PackedBubble/PackedBubbleSeries.js"],e["Series/PolarComposition.js"],e["Core/Axis/RadialAxis.js"],e["Series/Waterfall/WaterfallSeries.js"]],function(t,e,
23490i,s,o,a,r,n){return t.RadialAxis=r,s.compose(t.Axis,t.Chart,t.Legend,t.Series),o.compose(t.Axis,t.Chart,t.Legend,t.Series),i.compose(t.Chart,t.Pointer),a.compose(t.Axis,t.Chart,t.Pointer,t.Series,t.Tick,t.Point,e.seriesTypes.areasplinerange,e.seriesTypes.column,e.seriesTypes.line,e.seriesTypes.spline),n.compose(t.Axis,t.Chart),t})});
23491},{}],110:[function(require,module,exports){
23492!/**
23493 * Highcharts JS v11.4.3 (2024-05-22)
23494 *
23495 * (c) 2009-2024 Torstein Honsi
23496 *
23497 * License: www.highcharts.com/license
23498 */function(t,e){"object"==typeof module&&module.exports?(e.default=e,module.exports=t&&t.document?e(t):e):"function"==typeof define&&define.amd?define("highcharts/highcharts",function(){return e(t)}):(t.Highcharts&&t.Highcharts.error(16,!0),t.Highcharts=e(t))}("undefined"!=typeof window?window:this,function(t){"use strict";var e={};function i(e,i,s,r){e.hasOwnProperty(i)||(e[i]=r.apply(null,s),"function"==typeof CustomEvent&&t.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:i,module:e[i]}})))}return i(e,"Core/Globals.js",[],function(){var e,i;return(i=e||(e={})).SVG_NS="http://www.w3.org/2000/svg",i.product="Highcharts",i.version="11.4.3",i.win=void 0!==t?t:{},i.doc=i.win.document,i.svg=i.doc&&i.doc.createElementNS&&!!i.doc.createElementNS(i.SVG_NS,"svg").createSVGRect,i.userAgent=i.win.navigator&&i.win.navigator.userAgent||"",i.isChrome=-1!==i.userAgent.indexOf("Chrome"),i.isFirefox=-1!==i.userAgent.indexOf("Firefox"),i.isMS=/(edge|msie|trident)/i.test(i.userAgent)&&!i.win.opera,i.isSafari=!i.isChrome&&-1!==i.userAgent.indexOf("Safari"),i.isTouchDevice=/(Mobile|Android|Windows Phone)/.test(i.userAgent),i.isWebKit=-1!==i.userAgent.indexOf("AppleWebKit"),i.deg2rad=2*Math.PI/360,i.hasBidiBug=i.isFirefox&&4>parseInt(i.userAgent.split("Firefox/")[1],10),i.marginNames=["plotTop","marginRight","marginBottom","plotLeft"],i.noop=function(){},i.supportsPassiveEvents=function(){let t=!1;if(!i.isMS){let e=Object.defineProperty({},"passive",{get:function(){t=!0}});i.win.addEventListener&&i.win.removeEventListener&&(i.win.addEventListener("testPassive",i.noop,e),i.win.removeEventListener("testPassive",i.noop,e))}return t}(),i.charts=[],i.composed=[],i.dateFormats={},i.seriesTypes={},i.symbolSizes={},i.chartCount=0,e}),i(e,"Core/Utilities.js",[e["Core/Globals.js"]],function(t){let e;let{charts:i,doc:s,win:r}=t;function o(e,i,s,a){let n=i?"Highcharts error":"Highcharts warning";32===e&&(e=`${n}: Deprecated member`);let h=p(e),l=h?`${n} #${e}: www.highcharts.com/errors/${e}/`:e.toString();if(void 0!==a){let t="";h&&(l+="?"),C(a,function(e,i){t+=`
23499 - ${i}: ${e}`,h&&(l+=encodeURI(i)+"="+encodeURI(e))}),l+=t}M(t,"displayError",{chart:s,code:e,message:l,params:a},function(){if(i)throw Error(l);r.console&&-1===o.messages.indexOf(l)&&console.warn(l)}),o.messages.push(l)}function a(t,e){return parseInt(t,e||10)}function n(t){return"string"==typeof t}function h(t){let e=Object.prototype.toString.call(t);return"[object Array]"===e||"[object Array Iterator]"===e}function l(t,e){return!!t&&"object"==typeof t&&(!e||!h(t))}function d(t){return l(t)&&"number"==typeof t.nodeType}function c(t){let e=t&&t.constructor;return!!(l(t,!0)&&!d(t)&&e&&e.name&&"Object"!==e.name)}function p(t){return"number"==typeof t&&!isNaN(t)&&t<1/0&&t>-1/0}function u(t){return null!=t}function g(t,e,i){let s;let r=n(e)&&!u(i),o=(e,i)=>{u(e)?t.setAttribute(i,e):r?(s=t.getAttribute(i))||"class"!==i||(s=t.getAttribute(i+"Name")):t.removeAttribute(i)};return n(e)?o(i,e):C(e,o),s}function f(t){return h(t)?t:[t]}function m(t,e){let i;for(i in t||(t={}),e)t[i]=e[i];return t}function x(){let t=arguments,e=t.length;for(let i=0;i<e;i++){let e=t[i];if(null!=e)return e}}function y(t,e){m(t.style,e)}function b(t){return Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function v(t,e){return t>1e14?t:parseFloat(t.toPrecision(e||14))}(o||(o={})).messages=[],Math.easeInOutSine=function(t){return -.5*(Math.cos(Math.PI*t)-1)};let S=Array.prototype.find?function(t,e){return t.find(e)}:function(t,e){let i;let s=t.length;for(i=0;i<s;i++)if(e(t[i],i))return t[i]};function C(t,e,i){for(let s in t)Object.hasOwnProperty.call(t,s)&&e.call(i||t[s],t[s],s,t)}function k(t,e,i){function s(e,i){let s=t.removeEventListener;s&&s.call(t,e,i,!1)}function r(i){let r,o;t.nodeName&&(e?(r={})[e]=!0:r=i,C(r,function(t,e){if(i[e])for(o=i[e].length;o--;)s(e,i[e][o].fn)}))}let o="function"==typeof t&&t.prototype||t;
23499if(Object.hasOwnProperty.call(o,"hcEvents")){let t=o.hcEvents;if(e){let o=t[e]||[];i?(t[e]=o.filter(function(t){return i!==t.fn}),s(e,i)):(r(t),t[e]=[])}else r(t),delete o.hcEvents}}function M(e,i,r,o){if(r=r||{},s.createEvent&&(e.dispatchEvent||e.fireEvent&&e!==t)){let t=s.createEvent("Events");t.initEvent(i,!0,!0),r=m(t,r),e.dispatchEvent?e.dispatchEvent(r):e.fireEvent(i,r)}else if(e.hcEvents){r.target||m(r,{preventDefault:function(){r.defaultPrevented=!0},target:e,type:i});let t=[],s=e,o=!1;for(;s.hcEvents;)Object.hasOwnProperty.call(s,"hcEvents")&&s.hcEvents[i]&&(t.length&&(o=!0),t.unshift.apply(t,s.hcEvents[i])),s=Object.getPrototypeOf(s);o&&t.sort((t,e)=>t.order-e.order),t.forEach(t=>{!1===t.fn.call(e,r)&&r.preventDefault()})}o&&!r.defaultPrevented&&o.call(e,r)}C({map:"map",each:"forEach",grep:"filter",reduce:"reduce",some:"some"},function(e,i){t[i]=function(t){return o(32,!1,void 0,{[`Highcharts.${i}`]:`use Array.${e}`}),Array.prototype[e].apply(t,[].slice.call(arguments,1))}});let w=function(){let t=Math.random().toString(36).substring(2,9)+"-",i=0;return function(){return"highcharts-"+(e?"":t)+i++}}();return r.jQuery&&(r.jQuery.fn.highcharts=function(){let e=[].slice.call(arguments);if(this[0])return e[0]?(new t[n(e[0])?e.shift():"Chart"](this[0],e[0],e[1]),this):i[g(this[0],"data-highcharts-chart")]}),{addEvent:function(e,i,s,r={}){let o="function"==typeof e&&e.prototype||e;Object.hasOwnProperty.call(o,"hcEvents")||(o.hcEvents={});let a=o.hcEvents;t.Point&&e instanceof t.Point&&e.series&&e.series.chart&&(e.series.chart.runTrackerClick=!0);let n=e.addEventListener;n&&n.call(e,i,s,!!t.supportsPassiveEvents&&{passive:void 0===r.passive?-1!==i.indexOf("touch"):r.passive,capture:!1}),a[i]||(a[i]=[]);let h={fn:s,order:"number"==typeof r.order?r.order:1/0};return a[i].push(h),a[i].sort((t,e)=>t.order-e.order),function(){k(e,i,s)}},arrayMax:function(t){let e=t.length,i=t[0];for(;e--;)t[e]>i&&(i=t[e]);return i},arrayMin:function(t){let e=t.length,i=t[0];for(;e--;)t[e]<i&&(i=t[e]);return i},attr:g,clamp:function(t,e,i){return t>e?t<i?t:i:e},clearTimeout:function(t){u(t)&&clearTimeout(t)},correctFloat:v,createElement:function(t,e,i,r,o){let a=s.createElement(t);return e&&m(a,e),o&&y(a,{padding:"0",border:"none",margin:"0"}),i&&y(a,i),r&&r.appendChild(a),a},crisp:(t,e=0,i)=>{let s=e%2/2,r=i?-1:1;return(Math.round(t*r-s)+s)*r},css:y,defined:u,destroyObjectProperties:function(t,e,i){C(t,function(s,r){s!==e&&s?.destroy&&s.destroy(),(s?.destroy||!i)&&delete t[r]})},diffObjects:function(t,e,i,s){let r={};return function t(e,r,o,a){let n=i?r:e;C(e,function(i,d){if(!a&&s&&s.indexOf(d)>-1&&r[d]){i=f(i),o[d]=[];for(let e=0;e<Math.max(i.length,r[d].length);e++)r[d][e]&&(void 0===i[e]?o[d][e]=r[d][e]:(o[d][e]={},t(i[e],r[d][e],o[d][e],a+1)))}else l(i,!0)&&!i.nodeType?(o[d]=h(i)?[]:{},t(i,r[d]||{},o[d],a+1),0!==Object.keys(o[d]).length||"colorAxis"===d&&0===a||delete o[d]):(e[d]!==r[d]||d in e&&!(d in r))&&"__proto__"!==d&&"constructor"!==d&&(o[d]=n[d])})}(t,e,r,0),r},discardElement:function(t){t&&t.parentElement&&t.parentElement.removeChild(t)},erase:function(t,e){let i=t.length;for(;i--;)if(t[i]===e){t.splice(i,1);break}},error:o,extend:m,extendClass:function(t,e){let i=function(){};return i.prototype=new t,m(i.prototype,e),i},find:S,fireEvent:M,getClosestDistance:function(t,e){let i,s,r,o;let a=!e;return t.forEach(t=>{if(t.length>1)for(o=s=t.length-1;o>0;o--)(r=t[o]-t[o-1])<0&&!a?(e?.(),e=void 0):r&&(void 0===i||r<i)&&(i=r)}),i},getMagnitude:b,getNestedProperty:function(t,e){let i=t.split(".");for(;i.length&&u(e);){let t=i.shift();if(void 0===t||"__proto__"===t)return;if("this"===t){let t;return l(e)&&(t=e["@this"]),t??e}let s=e[t];if(!u(s)||"function"==typeof s||"number"==typeof s.nodeType||s===r)return;e=s}return e},getStyle:function t(e,i,s){let o;if("width"===i){let i=Math.min(e.offsetWidth,e.scrollWidth),s=e.getBoundingClientRect&&e.getBoundingClientRect().width;return s<i&&s>=i-1&&(i=Math.floor(s)),Math.max(0,i-(t(e,"padding-left",!0)||0)-(t(e,"padding-right",!0)||0))}if("height"===i)return Math.max(0,Math.min(e.offsetHeight,e.scrollHeight)-(t(e,"padding-top",!0)||0)-(t(e,"padding-bottom",!0)||0));let n=r.getComputedStyle(e,void 0);return n&&(o=n.getPropertyValue(i),x(s,"opacity"!==i)&&(o=a(o))),o}
23499,inArray:function(t,e,i){return o(32,!1,void 0,{"Highcharts.inArray":"use Array.indexOf"}),e.indexOf(t,i)},insertItem:function(t,e){let i;let s=t.options.index,r=e.length;for(i=t.options.isInternal?r:0;i<r+1;i++)if(!e[i]||p(s)&&s<x(e[i].options.index,e[i]._i)||e[i].options.isInternal){e.splice(i,0,t);break}return i},isArray:h,isClass:c,isDOMElement:d,isFunction:function(t){return"function"==typeof t},isNumber:p,isObject:l,isString:n,keys:function(t){return o(32,!1,void 0,{"Highcharts.keys":"use Object.keys"}),Object.keys(t)},merge:function(){let t,e=arguments,i={},s=function(t,e){return"object"!=typeof t&&(t={}),C(e,function(i,r){"__proto__"!==r&&"constructor"!==r&&(!l(i,!0)||c(i)||d(i)?t[r]=e[r]:t[r]=s(t[r]||{},i))}),t};!0===e[0]&&(i=e[1],e=Array.prototype.slice.call(e,2));let r=e.length;for(t=0;t<r;t++)i=s(i,e[t]);return i},normalizeTickInterval:function(t,e,i,s,r){let o,a=t;i=x(i,b(t));let n=t/i;for(!e&&(e=r?[1,1.2,1.5,2,2.5,3,4,5,6,8,10]:[1,2,2.5,5,10],!1===s&&(1===i?e=e.filter(function(t){return t%1==0}):i<=.1&&(e=[1/i]))),o=0;o<e.length&&(a=e[o],(!r||!(a*i>=t))&&(r||!(n<=(e[o]+(e[o+1]||e[o]))/2)));o++);return v(a*i,-Math.round(Math.log(.001)/Math.LN10))},objectEach:C,offset:function(t){let e=s.documentElement,i=t.parentElement||t.parentNode?t.getBoundingClientRect():{top:0,left:0,width:0,height:0};return{top:i.top+(r.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(r.pageXOffset||e.scrollLeft)-(e.clientLeft||0),width:i.width,height:i.height}},pad:function(t,e,i){return Array((e||2)+1-String(t).replace("-","").length).join(i||"0")+t},pick:x,pInt:a,pushUnique:function(t,e){return 0>t.indexOf(e)&&!!t.push(e)},relativeLength:function(t,e,i){return/%$/.test(t)?e*parseFloat(t)/100+(i||0):parseFloat(t)},removeEvent:k,replaceNested:function(t,...e){let i,s;do for(s of(i=t,e))t=t.replace(s[0],s[1]);while(t!==i);return t},splat:f,stableSort:function(t,e){let i,s;let r=t.length;for(s=0;s<r;s++)t[s].safeI=s;for(t.sort(function(t,s){return 0===(i=e(t,s))?t.safeI-s.safeI:i}),s=0;s<r;s++)delete t[s].safeI},syncTimeout:function(t,e,i){return e>0?setTimeout(t,e,i):(t.call(0,i),-1)},timeUnits:{millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,week:6048e5,month:24192e5,year:314496e5},uniqueKey:w,useSerialIds:function(t){return e=x(t,e)},wrap:function(t,e,i){let s=t[e];t[e]=function(){let t=arguments,e=this;return i.apply(this,[function(){return s.apply(e,arguments.length?arguments:t)}].concat([].slice.call(arguments)))}}}}),i(e,"Core/Chart/ChartDefaults.js",[],function(){return{alignThresholds:!1,panning:{enabled:!1,type:"x"},styledMode:!1,borderRadius:0,colorCount:10,allowMutatingData:!0,ignoreHiddenSeries:!0,spacing:[10,10,15,10],resetZoomButton:{theme:{},position:{}},reflow:!0,type:"line",zooming:{singleTouch:!1,resetButton:{theme:{zIndex:6},position:{align:"right",x:-10,y:10}}},width:null,height:null,borderColor:"#334eff",backgroundColor:"#ffffff",plotBorderColor:"#cccccc"}}),i(e,"Core/Color/Palettes.js",[],function(){return{colors:["#2caffe","#544fc5","#00e272","#fe6a35","#6b8abc","#d568fb","#2ee0ca","#fa4b42","#feb56a","#91e8e1"]}}),i(e,"Core/Time.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{win:i}=t,{defined:s,error:r,extend:o,isNumber:a,isObject:n,merge:h,objectEach:l,pad:d,pick:c,splat:p,timeUnits:u}=e,g=t.isSafari&&i.Intl&&i.Intl.DateTimeFormat.prototype.formatRange,f=t.isSafari&&i.Intl&&!i.Intl.DateTimeFormat.prototype.formatRange;class m{constructor(t){this.options={},this.useUTC=!1,this.variableTimezone=!1,this.Date=i.Date,this.getTimezoneOffset=this.timezoneOffsetFunction(),this.update(t)}get(t,e){if(this.variableTimezone||this.timezoneOffset){let i=e.getTime(),s=i-this.getTimezoneOffset(e);e.setTime(s);let r=e["getUTC"+t]();return e.setTime(i),r}return this.useUTC?e["getUTC"+t]():e["get"+t]()}set(t,e,i){if(this.variableTimezone||this.timezoneOffset){if("Milliseconds"===t||"Seconds"===t||"Minutes"===t&&this.getTimezoneOffset(e)%36e5==0)return e["setUTC"+t](i);let s=this.getTimezoneOffset(e),r=e.getTime()-s;e.setTime(r),e["setUTC"+t](i);let o=this.getTimezoneOffset(e);return r=e.getTime()+o,e.setTime(r)}return this.useUTC||g&&"FullYear"===t?e["setUTC"+t](i):e["set"+t](i)}update(t={}){let e=c(t.useUTC,!0);this.options=t=h(!0,this.options,t),this.Date=t.Date||i.Date||Date,this.useUTC=e,this.timezoneOffset=e&&t.timezoneOffset||void 0,this.getTimezoneOffset=this.timezoneOffsetFunction(),this.variableTimezone=e&&!!(t.getTimezoneOffset||t.timezone)}makeTime(t,e,i,s,r,o){let a,n,h;return this.useUTC?(a=this.Date.UTC.apply(0,arguments),n=this.getTimezoneOffset(a),a+=n,n!==(h=this.getTimezoneOffset(a))?a+=h-n:n-36e5!==this.getTimezoneOffset(a-36e5)||f||(a-=36e5)):a=new this.Date(t,e,c(i,1),c(s,0),c(r,0),c(o,0)).getTime(),a}timezoneOffsetFunction(){let t=this,e=this.options,i=e.getTimezoneOffset;return this.useUTC?e.timezone?t=>{try{let i=`shortOffset,${e.timezone||""}`,[s,r,o,n,h=0]=(m.formatCache[i]=m.formatCache[i]||Intl.DateTimeFormat("en",{timeZone:e.timezone,timeZoneName:"shortOffset"}
23499)).format(t).split(/(GMT|:)/).map(Number),l=-(36e5*(o+h/60));if(a(l))return l}catch(t){r(34)}return 0}:this.useUTC&&i?t=>6e4*i(t.valueOf()):()=>6e4*(t.timezoneOffset||0):t=>6e4*new Date(t.toString()).getTimezoneOffset()}dateFormat(e,i,r){if(!s(i)||isNaN(i))return t.defaultOptions.lang&&t.defaultOptions.lang.invalidDate||"";e=c(e,"%Y-%m-%d %H:%M:%S");let a=this,n=new this.Date(i),h=this.get("Hours",n),p=this.get("Day",n),u=this.get("Date",n),g=this.get("Month",n),f=this.get("FullYear",n),m=t.defaultOptions.lang,x=m&&m.weekdays,y=m&&m.shortWeekdays;return l(o({a:y?y[p]:x[p].substr(0,3),A:x[p],d:d(u),e:d(u,2," "),w:p,b:m.shortMonths[g],B:m.months[g],m:d(g+1),o:g+1,y:f.toString().substr(2,2),Y:f,H:d(h),k:h,I:d(h%12||12),l:h%12||12,M:d(this.get("Minutes",n)),p:h<12?"AM":"PM",P:h<12?"am":"pm",S:d(this.get("Seconds",n)),L:d(Math.floor(i%1e3),3)},t.dateFormats),function(t,s){for(;-1!==e.indexOf("%"+s);)e=e.replace("%"+s,"function"==typeof t?t.call(a,i):t)}),r?e.substr(0,1).toUpperCase()+e.substr(1):e}resolveDTLFormat(t){return n(t,!0)?t:{main:(t=p(t))[0],from:t[1],to:t[2]}}getTimeTicks(t,e,i,r){let a,n,h,l;let d=this,p=d.Date,g=[],f={},m=new p(e),x=t.unitRange,y=t.count||1;if(r=c(r,1),s(e)){d.set("Milliseconds",m,x>=u.second?0:y*Math.floor(d.get("Milliseconds",m)/y)),x>=u.second&&d.set("Seconds",m,x>=u.minute?0:y*Math.floor(d.get("Seconds",m)/y)),x>=u.minute&&d.set("Minutes",m,x>=u.hour?0:y*Math.floor(d.get("Minutes",m)/y)),x>=u.hour&&d.set("Hours",m,x>=u.day?0:y*Math.floor(d.get("Hours",m)/y)),x>=u.day&&d.set("Date",m,x>=u.month?1:Math.max(1,y*Math.floor(d.get("Date",m)/y))),x>=u.month&&(d.set("Month",m,x>=u.year?0:y*Math.floor(d.get("Month",m)/y)),n=d.get("FullYear",m)),x>=u.year&&(n-=n%y,d.set("FullYear",m,n)),x===u.week&&(l=d.get("Day",m),d.set("Date",m,d.get("Date",m)-l+r+(l<r?-7:0))),n=d.get("FullYear",m);let t=d.get("Month",m),o=d.get("Date",m),c=d.get("Hours",m);e=m.getTime(),(d.variableTimezone||!d.useUTC)&&s(i)&&(h=i-e>4*u.month||d.getTimezoneOffset(e)!==d.getTimezoneOffset(i));let p=m.getTime();for(a=1;p<i;)g.push(p),x===u.year?p=d.makeTime(n+a*y,0):x===u.month?p=d.makeTime(n,t+a*y):h&&(x===u.day||x===u.week)?p=d.makeTime(n,t,o+a*y*(x===u.day?1:7)):h&&x===u.hour&&y>1?p=d.makeTime(n,t,o,c+a*y):p+=x*y,a++;g.push(p),x<=u.hour&&g.length<1e4&&g.forEach(function(t){t%18e5==0&&"000000000"===d.dateFormat("%H%M%S%L",t)&&(f[t]="day")})}return g.info=o(t,{higherRanks:f,totalRange:x*y}),g}getDateFormat(t,e,i,s){let r=this.dateFormat("%m-%d %H:%M:%S.%L",e),o="01-01 00:00:00.000",a={millisecond:15,second:12,minute:9,hour:6,day:3},n="millisecond",h=n;for(n in u){if(t===u.week&&+this.dateFormat("%w",e)===i&&r.substr(6)===o.substr(6)){n="week";break}if(u[n]>t){n=h;break}if(a[n]&&r.substr(a[n])!==o.substr(a[n]))break;"week"!==n&&(h=n)}return this.resolveDTLFormat(s[n]).main}}return m.formatCache={},m}),i(e,"Core/Defaults.js",[e["Core/Chart/ChartDefaults.js"],e["Core/Globals.js"],e["Core/Color/Palettes.js"],e["Core/Time.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){let{isTouchDevice:o}=e,{fireEvent:a,merge:n}=r,h={colors:i.colors,symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],decimalPoint:".",numericSymbols:["k","M","G","T","P","E"],resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:" "},global:{buttonTheme:{fill:"#f7f7f7",padding:8,r:2,stroke:"#cccccc","stroke-width":1,style:{color:"#333333",cursor:"pointer",fontSize:"0.8em",fontWeight:"normal"},states:{hover:{fill:"#e6e6e6"},select:{fill:"#e6e9ff",style:{color:"#000000",fontWeight:"bold"}},disabled:{style:{color:"#cccccc"}}}}},time:{Date:void 0,getTimezoneOffset:void 0,timezone:void 0,timezoneOffset:0,useUTC:!0},chart:t,title:{style:{color:"#333333",fontWeight:"bold"},text:"Chart title",align:"center",margin:15,widthAdjust:-44},subtitle:{style:{color:"#666666",fontSize:"0.8em"},text:"",align:"center",widthAdjust:-44},caption:{margin:15,style:{color:"#666666",fontSize:"0.8em"},text:"",align:"left",verticalAlign:"bottom"},plotOptions:{},legend:{enabled:!0,align:"center",alignColumns:!0,className:"highcharts-no-tooltip",layout:"horizontal",itemMarginBottom:2,itemMarginTop:2,labelFormatter:function(){return this.name},borderColor:"#999999",borderRadius:0,navigation:{style:{fontSize:"0.8em"},activeColor:"#0022ff",inactiveColor:"#cccccc"},itemStyle:{color:"#333333",cursor:"pointer",fontSize:"0.8em",textDecoration:"none",textOverflow:"ellipsis"},itemHoverStyle:{color:"#000000"},itemHiddenStyle:{color:"#666666",textDecoration:"line-through"},shadow:!1,itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},squareSymbol:!0,symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontSize:"0.8em",fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"45%"},style:{position:"absolute",backgroundColor:"#ffffff",opacity:.5,textAlign:"center"}},tooltip:{enabled:!0,animation:{duration:300,easing:t=>Math.sqrt(1-Math.pow(t-1,2))},borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %e %b, %H:%M:%S.%L",second:"%A, %e %b, %H:%M:%S",minute:"%A, %e %b, %H:%M",hour:"%A, %e %b, %H:%M",day:"%A, %e %b %Y",week:"Week from %A, %e %b %Y",month:"%B %Y",year:"%Y"},footerFormat:"",headerShape:"callout",hideDelay:500,padding:8,shape:"callout",shared:!1,snap:o?25:10,headerFormat:'<span style="font-size: 0.8em">{point.key}</span><br/>',pointFormat:'<span style="color:{point.color}">●</span> {series.name}: <b>{point.y}</b><br/>',backgroundColor:"#ffffff",borderWidth:void 0,shadow:!0,stickOnContact:!1,style:{color:"#333333",cursor:"default",fontSize:"0.8em"},useHTML:!1},credits:{enabled:!0,href:"https://www.highcharts.com?credits",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#999999",fontSize:"0.6em"},text:"Highcharts.com"}};h.chart.styledMode=!1;let l=new s(h.time);return{defaultOptions:h,defaultTime:l,getOptions:function(){return h},setOptions:function(t){return a(e,"setOptions",{options:t}),n(!0,h,t),(t.time||t.global)&&(e.time?e.time.update(n(h.global,h.time,t.global,t.time)):e.time=l),h}}}),i(e,"Core/Color/Color.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{isNumber:i,merge:s,pInt:r}=e;class o{static parse(t){return t?new o(t):o.None}constructor(e){let i,s,r,a;this.rgba=[NaN,NaN,NaN,NaN],this.input=e;let n=t.Color;if(n&&n!==o)return new n(e);if("object"==typeof e&&void 0!==e.stops)this.stops=e.stops.map(t=>new o(t[1]));else if("string"==typeof e){if(this.input=e=o.names[e.toLowerCase()]||e,"#"===e.charAt(0)){let t=e.length,i=parseInt(e.substr(1),16);7===t?s=[(16711680&i)>>16,(65280&i)>>8,255&i,1]:4===t&&(s=[(3840&i)>>4|(3840&i)>>8,(240&i)>>4|240&i,(15&i)<<4|15&i,1])}if(!s)for(r=o.parsers.length;r--&&!s;)(i=(a=o.parsers[r]).regex.exec(e))&&(s=a.parse(i))}s&&(this.rgba=s)}get(t){let e=this.input,r=this.rgba;if("object"==typeof e&&void 0!==this.stops){let i=s(e);return i.stops=[].slice.call(i.stops),this.stops.forEach((e,s)=>{i.stops[s]=[i.stops[s][0],e.get(t)]}),i}return r&&i(r[0])?"rgb"!==t&&(t||1!==r[3])?"a"===t?`${r[3]}`:"rgba("+r.join(",")+")":"rgb("+r[0]+","+r[1]+","+r[2]+")":e}brighten(t){let e=this.rgba;if(this.stops)this.stops.forEach(function(e){e.brighten(t)});else if(i(t)&&0!==t)for(let i=0;i<3;i++)e[i]+=r(255*t),e[i]<0&&(e[i]=0),e[i]>255&&(e[i]=255);return this}setOpacity(t){return this.rgba[3]=t,this}tweenTo(t,e){let s=this.rgba,r=t.rgba;
23499if(!i(s[0])||!i(r[0]))return t.input||"none";let o=1!==r[3]||1!==s[3];return(o?"rgba(":"rgb(")+Math.round(r[0]+(s[0]-r[0])*(1-e))+","+Math.round(r[1]+(s[1]-r[1])*(1-e))+","+Math.round(r[2]+(s[2]-r[2])*(1-e))+(o?","+(r[3]+(s[3]-r[3])*(1-e)):"")+")"}}return o.names={white:"#ffffff",black:"#000000"},o.parsers=[{regex:/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,parse:function(t){return[r(t[1]),r(t[2]),r(t[3]),parseFloat(t[4],10)]}},{regex:/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,parse:function(t){return[r(t[1]),r(t[2]),r(t[3]),1]}}],o.None=new o(""),o}),i(e,"Core/Animation/Fx.js",[e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{parse:s}=t,{win:r}=e,{isNumber:o,objectEach:a}=i;class n{constructor(t,e,i){this.pos=NaN,this.options=e,this.elem=t,this.prop=i}dSetter(){let t=this.paths,e=t&&t[0],i=t&&t[1],s=this.now||0,r=[];if(1!==s&&e&&i){if(e.length===i.length&&s<1)for(let t=0;t<i.length;t++){let a=e[t],n=i[t],h=[];for(let t=0;t<n.length;t++){let e=a[t],i=n[t];o(e)&&o(i)&&!("A"===n[0]&&(4===t||5===t))?h[t]=e+s*(i-e):h[t]=i}r.push(h)}else r=i}else r=this.toD||[];this.elem.attr("d",r,void 0,!0)}update(){let t=this.elem,e=this.prop,i=this.now,s=this.options.step;this[e+"Setter"]?this[e+"Setter"]():t.attr?t.element&&t.attr(e,i,null,!0):t.style[e]=i+this.unit,s&&s.call(t,i,this)}run(t,e,i){let s=this,o=s.options,a=function(t){return!a.stopped&&s.step(t)},h=r.requestAnimationFrame||function(t){setTimeout(t,13)},l=function(){for(let t=0;t<n.timers.length;t++)n.timers[t]()||n.timers.splice(t--,1);n.timers.length&&h(l)};t!==e||this.elem["forceAnimate:"+this.prop]?(this.startTime=+new Date,this.start=t,this.end=e,this.unit=i,this.now=this.start,this.pos=0,a.elem=this.elem,a.prop=this.prop,a()&&1===n.timers.push(a)&&h(l)):(delete o.curAnim[this.prop],o.complete&&0===Object.keys(o.curAnim).length&&o.complete.call(this.elem))}step(t){let e,i;let s=+new Date,r=this.options,o=this.elem,n=r.complete,h=r.duration,l=r.curAnim;return o.attr&&!o.element?e=!1:t||s>=h+this.startTime?(this.now=this.end,this.pos=1,this.update(),l[this.prop]=!0,i=!0,a(l,function(t){!0!==t&&(i=!1)}),i&&n&&n.call(o),e=!1):(this.pos=r.easing((s-this.startTime)/h),this.now=this.start+(this.end-this.start)*this.pos,this.update(),e=!0),e}initPath(t,e,i){let s=t.startX,r=t.endX,a=i.slice(),n=t.isArea,h=n?2:1,l,d,c,p,u=e&&e.slice();if(!u)return[a,a];function g(t,e){for(;t.length<d;){let i=t[0],s=e[d-t.length];if(s&&"M"===i[0]&&("C"===s[0]?t[0]=["C",i[1],i[2],i[1],i[2],i[1],i[2]]:t[0]=["L",i[1],i[2]]),t.unshift(i),n){let e=t.pop();t.push(t[t.length-1],e)}}}function f(t){for(;t.length<d;){let e=t[Math.floor(t.length/h)-1].slice();if("C"===e[0]&&(e[1]=e[5],e[2]=e[6]),n){let i=t[Math.floor(t.length/h)].slice();t.splice(t.length/2,0,e,i)}else t.push(e)}}if(s&&r&&r.length){for(c=0;c<s.length;c++){if(s[c]===r[0]){l=c;break}if(s[0]===r[r.length-s.length+c]){l=c,p=!0;break}if(s[s.length-1]===r[r.length-s.length+c]){l=s.length-c;break}}void 0===l&&(u=[])}return u.length&&o(l)&&(d=a.length+l*h,p?(g(u,a),f(a)):(g(a,u),f(u))),[u,a]}fillSetter(){n.prototype.strokeSetter.apply(this,arguments)}strokeSetter(){this.elem.attr(this.prop,s(this.start).tweenTo(s(this.end),this.pos),void 0,!0)}}return n.timers=[],n}),i(e,"Core/Animation/AnimationUtilities.js",[e["Core/Animation/Fx.js"],e["Core/Utilities.js"]],function(t,e){let{defined:i,getStyle:s,isArray:r,isNumber:o,isObject:a,merge:n,objectEach:h,pick:l}=e;function d(t){return a(t)?n({duration:500,defer:0},t):{duration:t?500:0,defer:0}}function c(e,i){let s=t.timers.length;for(;s--;)t.timers[s].elem!==e||i&&i!==t.timers[s].prop||(t.timers[s].stopped=!0)}return{animate:function(e,i,l){let d,p="",u,g,f;a(l)||(f=arguments,l={duration:f[2],easing:f[3],complete:f[4]}),o(l.duration)||(l.duration=400),l.easing="function"==typeof l.easing?l.easing:Math[l.easing]||Math.easeInOutSine,l.curAnim=n(i),h(i,function(o,a){c(e,a),g=new t(e,l,a),u=void 0,"d"===a&&r(i.d)?(g.paths=g.initPath(e,e.pathArray,i.d),g.toD=i.d,d=0,u=1):e.attr?d=e.attr(a):(d=parseFloat(s(e,a))||0,"opacity"!==a&&(p="px")),u||(u=o),"string"==typeof u&&u.match("px")&&(u=u.replace(/px/g,"")),g.run(d,u,p)})},animObject:d,getDeferredAnimation:function(t,e,s){let r=d(e),o=s?[s]:t.series,n=0,h=0;return o.forEach(t=>{let s=d(t.options.animation);n=a(e)&&i(e.defer)?r.defer:Math.max(n,s.duration+s.defer),h=Math.min(r.duration,s.duration)}),t.renderer.forExport&&(n=0),{defer:Math.max(0,n-h),duration:Math.min(n,h)}},setAnimation:function(t,e){e.renderer.globalAnimation=l(t,e.options.chart.animation,!0)},stop:c}}),i(e,"Core/Renderer/HTML/AST.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{SVG_NS:i,win:s}=t,{attr:r,createElement:o,css:a,error:n,isFunction:h,isString:l,objectEach:d,splat:c}=e,{trustedTypes:p}=s,u=p&&h(p.createPolicy)&&p.createPolicy("highcharts",{createHTML:t=>t}),g=u?u.createHTML(""):"",f=function(){try{return!!new DOMParser().parseFromString(g,"text/html")}catch(t){return!1}}();class m{static filterUserAttributes(t){return d(t,(e,i)=>{let s=!0;-1===m.allowedAttributes.indexOf(i)&&(s=!1),-1!==["background","dynsrc","href","lowsrc","src"].indexOf(i)&&(s=l(e)&&m.allowedReferences.some(t=>0===e.indexOf(t))),s||(n(33,!1,void 0,{"Invalid attribute in config":`${i}`}),delete t[i]),l(e)&&t[i]&&(t[i]=e.replace(/</g,"&lt;"))}),t}static parseStyle(t){return t.split(";").reduce((t,e)=>{let i=e.split(":").map(t=>t.trim()),s=i.shift();return s&&i.length&&(t[s.replace(/-([a-z])/g,t=>t[1].toUpperCase())]=i.join(":")),t},{})}static setElementHTML(t,e){t.innerHTML=m.emptyHTML,e&&new m(e).addToDOM(t)}constructor(t){this.nodes="string"==typeof t?this.parseMarkup(t):t}addToDOM(e){return function e(s,o){let h;
23499return c(s).forEach(function(s){let l;let c=s.tagName,p=s.textContent?t.doc.createTextNode(s.textContent):void 0,u=m.bypassHTMLFiltering;if(c){if("#text"===c)l=p;else if(-1!==m.allowedTags.indexOf(c)||u){let n="svg"===c?i:o.namespaceURI||i,h=t.doc.createElementNS(n,c),g=s.attributes||{};d(s,function(t,e){"tagName"!==e&&"attributes"!==e&&"children"!==e&&"style"!==e&&"textContent"!==e&&(g[e]=t)}),r(h,u?g:m.filterUserAttributes(g)),s.style&&a(h,s.style),p&&h.appendChild(p),e(s.children||[],h),l=h}else n(33,!1,void 0,{"Invalid tagName in config":c})}l&&o.appendChild(l),h=l}),h}(this.nodes,e)}parseMarkup(t){let e;let i=[];if(t=t.trim().replace(/ style=(["'])/g," data-style=$1"),f)e=new DOMParser().parseFromString(u?u.createHTML(t):t,"text/html");else{let i=o("div");i.innerHTML=t,e={body:i}}let s=(t,e)=>{let i=t.nodeName.toLowerCase(),r={tagName:i};"#text"===i&&(r.textContent=t.textContent||"");let o=t.attributes;if(o){let t={};[].forEach.call(o,e=>{"data-style"===e.name?r.style=m.parseStyle(e.value):t[e.name]=e.value}),r.attributes=t}if(t.childNodes.length){let e=[];[].forEach.call(t.childNodes,t=>{s(t,e)}),e.length&&(r.children=e)}e.push(r)};return[].forEach.call(e.body.childNodes,t=>s(t,i)),i}}return m.allowedAttributes=["alt","aria-controls","aria-describedby","aria-expanded","aria-haspopup","aria-hidden","aria-label","aria-labelledby","aria-live","aria-pressed","aria-readonly","aria-roledescription","aria-selected","class","clip-path","color","colspan","cx","cy","d","dx","dy","disabled","fill","filterUnits","flood-color","flood-opacity","height","href","id","in","markerHeight","markerWidth","offset","opacity","orient","padding","paddingLeft","paddingRight","patternUnits","r","refX","refY","role","scope","slope","src","startOffset","stdDeviation","stroke","stroke-linecap","stroke-width","style","tableValues","result","rowspan","summary","target","tabindex","text-align","text-anchor","textAnchor","textLength","title","type","valign","width","x","x1","x2","xlink:href","y","y1","y2","zIndex"],m.allowedReferences=["https://","http://","mailto:","/","../","./","#"],m.allowedTags=["a","abbr","b","br","button","caption","circle","clipPath","code","dd","defs","div","dl","dt","em","feComponentTransfer","feDropShadow","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feOffset","feMerge","feMergeNode","filter","h1","h2","h3","h4","h5","h6","hr","i","img","li","linearGradient","marker","ol","p","path","pattern","pre","rect","small","span","stop","strong","style","sub","sup","svg","table","text","textPath","thead","title","tbody","tspan","td","th","tr","u","ul","#text"],m.emptyHTML=g,m.bypassHTMLFiltering=!1,m}),i(e,"Core/Templating.js",[e["Core/Defaults.js"],e["Core/Utilities.js"]],function(t,e){let{defaultOptions:i,defaultTime:s}=t,{extend:r,getNestedProperty:o,isArray:a,isNumber:n,isObject:h,pick:l,pInt:d}=e,c={add:(t,e)=>
23499t+e,divide:(t,e)=>0!==e?t/e:"",eq:(t,e)=>t==e,each:function(t){let e=arguments[arguments.length-1];return!!a(t)&&t.map((i,s)=>p(e.body,r(h(i)?i:{"@this":i},{"@index":s,"@first":0===s,"@last":s===t.length-1}))).join("")},ge:(t,e)=>t>=e,gt:(t,e)=>t>e,if:t=>!!t,le:(t,e)=>t<=e,lt:(t,e)=>t<e,multiply:(t,e)=>t*e,ne:(t,e)=>t!=e,subtract:(t,e)=>t-e,unless:t=>!t};function p(t="",e,r){let a=/\{([a-zA-Z0-9\:\.\,;\-\/<>%_@"'= #\(\)]+)\}/g,n=/\(([a-zA-Z0-9\:\.\,;\-\/<>%_@"'= ]+)\)/g,h=[],d=/f$/,g=/\.([0-9])/,f=i.lang,m=r&&r.time||s,x=r&&r.numberFormatter||u,y=(t="")=>{let i;return"true"===t||"false"!==t&&((i=Number(t)).toString()===t?i:o(t,e))},b,v,S=0,C;for(;null!==(b=a.exec(t));){let i=n.exec(b[1]);i&&(b=i,C=!0),v&&v.isBlock||(v={ctx:e,expression:b[1],find:b[0],isBlock:"#"===b[1].charAt(0),start:b.index,startInner:b.index+b[0].length,length:b[0].length});let s=b[1].split(" ")[0].replace("#","");c[s]&&(v.isBlock&&s===v.fn&&S++,v.fn||(v.fn=s));let r="else"===b[1];if(v.isBlock&&v.fn&&(b[1]===`/${v.fn}`||r)){if(S)!r&&S--;else{let e=v.startInner,i=t.substr(e,b.index-e);void 0===v.body?(v.body=i,v.startInner=b.index+b[0].length):v.elseBody=i,v.find+=i+b[0],r||(h.push(v),v=void 0)}}else v.isBlock||h.push(v);if(i&&!v?.isBlock)break}return h.forEach(i=>{let s,o;let{body:a,elseBody:n,expression:h,fn:u}=i;if(u){let t=[i],l=h.split(" ");for(o=c[u].length;o--;)t.unshift(y(l[o+1]));s=c[u].apply(e,t),i.isBlock&&"boolean"==typeof s&&(s=p(s?a:n,e,r))}else{let t=h.split(":");if(s=y(t.shift()||""),t.length&&"number"==typeof s){let e=t.join(":");if(d.test(e)){let t=parseInt((e.match(g)||["","-1"])[1],10);null!==s&&(s=x(s,t,f.decimalPoint,e.indexOf(",")>-1?f.thousandsSep:""))}else s=m.dateFormat(e,s)}}t=t.replace(i.find,l(s,""))}),C?p(t,e,r):t}function u(t,e,s,r){let o,a;t=+t||0,e=+e;let h=i.lang,c=(t.toString().split(".")[1]||"").split("e")[0].length,p=t.toString().split("e"),u=e;-1===e?e=Math.min(c,20):n(e)?e&&p[1]&&p[1]<0&&((a=e+ +p[1])>=0?(p[0]=(+p[0]).toExponential(a).split("e")[0],e=a):(p[0]=p[0].split(".")[0]||0,t=e<20?(p[0]*Math.pow(10,p[1])).toFixed(e):0,p[1]=0)):e=2;let g=(Math.abs(p[1]?p[0]:t)+Math.pow(10,-Math.max(e,c)-1)).toFixed(e),f=String(d(g)),m=f.length>3?f.length%3:0;return s=l(s,h.decimalPoint),r=l(r,h.thousandsSep),o=(t<0?"-":"")+(m?f.substr(0,m)+r:""),0>+p[1]&&!u?o="0":o+=f.substr(m).replace(/(\d{3})(?=\d)/g,"$1"+r),e?o+=s+g.slice(-e):0==+o&&(o="0"),p[1]&&0!=+o&&(o+="e"+p[1]),o}return{dateFormat:function(t,e,i){return s.dateFormat(t,e,i)},format:p,helpers:c,numberFormat:u}}),i(e,"Core/Renderer/RendererRegistry.js",[e["Core/Globals.js"]],function(t){var e,i;let s;return(i=e||(e={})).rendererTypes={},i.getRendererType=function(t=s){return i.rendererTypes[t]||i.rendererTypes[s]},i.registerRendererType=function(e,r,o){i.rendererTypes[e]=r,(!s||o)&&(s=e,t.Renderer=r)},e}),i(e,"Core/Renderer/RendererUtilities.js",[e["Core/Utilities.js"]],function(t){var e;let{clamp:i,pick:s,pushUnique:r,stableSort:o}=t;return(e||(e={})).distribute=function t(e,a,n){let h=e,l=h.reducedLen||a,d=(t,e)=>t.target-e.target,c=[],p=e.length,u=[],g=c.push,f,m,x,y=!0,b,v,S=0,C;for(f=p;f--;)S+=e[f].size;if(S>l){for(o(e,(t,e)=>(e.rank||0)-(t.rank||0)),x=(C=e[0].rank===e[e.length-1].rank)?p/2:-1,m=C?x:p-1;x&&S>l;)b=e[f=Math.floor(m)],r(u,f)&&(S-=b.size),m+=x,C&&m>=e.length&&(x/=2,m=x);u.sort((t,e)=>e-t).forEach(t=>g.apply(c,e.splice(t,1)))}for(o(e,d),e=e.map(t=>({size:t.size,targets:[t.target],align:s(t.align,.5)}));y;){for(f=e.length;f--;)b=e[f],v=(Math.min.apply(0,b.targets)+Math.max.apply(0,b.targets))/2,b.pos=i(v-b.size*b.align,0,a-b.size);for(f=e.length,y=!1;f--;)f>0&&e[f-1].pos+e[f-1].size>e[f].pos&&(e[f-1].size+=e[f].size,e[f-1].targets=e[f-1].targets.concat(e[f].targets),e[f-1].align=.5,e[f-1].pos+e[f-1].size>a&&(e[f-1].pos=a-e[f-1].size),e.splice(f,1),y=!0)}return g.apply(h,c),f=0,e.some(e=>{let i=0;return(e.targets||[]).some(()=>(h[f].pos=e.pos+i,void 0!==n&&Math.abs(h[f].pos-h[f].target)>n)?(h.slice(0,f+1).forEach(t=>delete t.pos),h.reducedLen=(h.reducedLen||a)-.1*a,h.reducedLen>.1*a&&t(h,a,n),!0):(i+=h[f].size,f++,!1))}),o(h,d),h},e}
vendor: 6,542 bytes, line 23499
23499),i(e,"Core/Renderer/SVG/SVGElement.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{animate:r,animObject:o,stop:a}=t,{deg2rad:n,doc:h,svg:l,SVG_NS:d,win:c}=i,{addEvent:p,attr:u,createElement:g,crisp:f,css:m,defined:x,erase:y,extend:b,fireEvent:v,isArray:S,isFunction:C,isObject:k,isString:M,merge:w,objectEach:A,pick:T,pInt:P,pushUnique:L,replaceNested:O,syncTimeout:D,uniqueKey:E}=s;class I{_defaultGetter(t){let e=T(this[t+"Value"],this[t],this.element?this.element.getAttribute(t):null,0);return/^[\-0-9\.]+$/.test(e)&&(e=parseFloat(e)),e}_defaultSetter(t,e,i){i.setAttribute(e,t)}add(t){let e;let i=this.renderer,s=this.element;return t&&(this.parentGroup=t),void 0!==this.textStr&&"text"===this.element.nodeName&&i.buildText(this),this.added=!0,(!t||t.handleZ||this.zIndex)&&(e=this.zIndexSetter()),e||(t?t.element:i.box).appendChild(s),this.onAdd&&this.onAdd(),this}addClass(t,e){let i=e?"":this.attr("class")||"";return(t=(t||"").split(/ /g).reduce(function(t,e){return -1===i.indexOf(e)&&t.push(e),t},i?[i]:[]).join(" "))!==i&&this.attr("class",t),this}afterSetters(){this.doTransform&&(this.updateTransform(),this.doTransform=!1)}align(t,e,i,s=!0){let r,o,a,n;let h={},l=this.renderer,d=l.alignedObjects,c=!!t;t?(this.alignOptions=t,this.alignByTranslate=e,this.alignTo=i):(t=this.alignOptions||{},e=this.alignByTranslate,i=this.alignTo);let p=!i||M(i)?i||"renderer":void 0;p&&(c&&L(d,this),i=void 0);let u=T(i,l[p],l),g=t.align,f=t.verticalAlign;return r=(u.x||0)+(t.x||0),o=(u.y||0)+(t.y||0),"right"===g?a=1:"center"===g&&(a=2),a&&(r+=((u.width||0)-(t.width||0))/a),h[e?"translateX":"x"]=Math.round(r),"bottom"===f?n=1:"middle"===f&&(n=2),n&&(o+=((u.height||0)-(t.height||0))/n),h[e?"translateY":"y"]=Math.round(o),s&&(this[this.placed?"animate":"attr"](h),this.placed=!0),this.alignAttr=h,this}alignSetter(t){let e={left:"start",center:"middle",right:"end"};e[t]&&(this.alignValue=t,this.element.setAttribute("text-anchor",e[t]))}animate(t,e,i){let s=o(T(e,this.renderer.globalAnimation,!0)),a=s.defer;return h.hidden&&(s.duration=0),0!==s.duration?(i&&(s.complete=i),D(()=>{this.element&&r(this,t,s)},a)):(this.attr(t,void 0,i||s.complete),A(t,function(t,e){s.step&&s.step.call(this,t,{prop:e,pos:1,elem:this})},this)),this}applyTextOutline(t){let e=this.element;-1!==t.indexOf("contrast")&&(t=t.replace(/contrast/g,this.renderer.getContrast(e.style.fill)));let s=t.split(" "),r=s[s.length-1],o=s[0];if(o&&"none"!==o&&i.svg){this.fakeTS=!0,o=o.replace(/(^[\d\.]+)(.*?)$/g,function(t,e,i){return 2*Number(e)+i}),this.removeTextOutline();let t=h.createElementNS(d,"tspan");u(t,{class:"highcharts-text-outline",fill:r,stroke:r,"stroke-width":o,"stroke-linejoin":"round"});let i=e.querySelector("textPath")||e;[].forEach.call(i.childNodes,e=>{let i=e.cloneNode(!0);i.removeAttribute&&["fill","stroke","stroke-width","stroke"].forEach(t=>i.removeAttribute(t)),t.appendChild(i)});let s=0;[].forEach.call(i.querySelectorAll("text tspan"),t=>{s+=Number(t.getAttribute("dy"))});let a=h.createElementNS(d,"tspan");a.textContent="​",u(a,{x:Number(e.getAttribute("x")),dy:-s}),t.appendChild(a),i.insertBefore(t,i.firstChild)}}attr(t,e,i,s){let{element:r}=this,o=I.symbolCustomAttribs,n,h,l=this,d;return"string"==typeof t&&void 0!==e&&(n=t,(t={})[n]=e),"string"==typeof t?l=(this[t+"Getter"]||this._defaultGetter).call(this,t,r):(A(t,function(e,i){d=!1,s||a(this,i),this.symbolName&&-1!==o.indexOf(i)&&(h||(this.symbolAttr(t),h=!0),d=!0),this.rotation&&("x"===i||"y"===i)&&(this.doTransform=!0),d||(this[i+"Setter"]||this._defaultSetter).call(this,e,i,r)},this),this.afterSetters()),i&&i.call(this),l}clip(t){if(t&&!t.clipPath){let e=E()+"-",i=this.renderer.createElement("clipPath").attr({id:e}).add(this.renderer.defs);b(t,{clipPath:i,id:e,count:0}),t.add(i)}return this.attr("clip-path",t?`url(${this.renderer.url}#${t.id})`:"none")}crisp(t,e){e=Math.round(e||t.strokeWidth||0);let i=t.x||this.x||0,s=t.y||this.y||0,r=(t.width||this.width||0)+i,o=(t.height||this.height||0)+s,a=f(i,e),n=f(s,e);return b(t,{x:a,y:n,width:f(r,e)-a,height:f(o,e)-n}),x(t.strokeWidth)&&(t.strokeWidth=e),t}complexColor(t,i,s){let r=this.renderer,o,a,n,h,l,d,c,p,u,g,f=[],m;v(this.renderer,"complexColor",{args:arguments},function(){if(t.radialGradient?a="radialGradient":t.linearGradient&&(a="linearGradient"),a){if(n=t[a],l=r.gradients,d=t.stops,u=s.radialReference,S(n)&&(t[a]=n={x1:n[0],y1:n[1],x2:n[2],y2:n[3],gradientUnits:"userSpaceOnUse"}),"radialGradient"===a&&u&&!x(n.gradientUnits)&&(h=n,n=w(n,r.getRadialAttr(u,h),{gradientUnits:"userSpaceOnUse"})),A(n,function(t,e){"id"!==e&&f.push(e,t)}),A(d,function(t){f.push(t)}),l[f=f.join(",")])g=l[f].attr("id");else{n.id=g=E();let t=l[f]=r.createElement(a).attr(n).add(r.defs);t.radAttr=h,t.stops=[],d.forEach(function(i){0===i[1].indexOf("rgba")?(c=(o=e.parse(i[1])).get("rgb"),p=o.get("a")):(c=i[1],p=1);let s=r.createElement("stop").attr({offset:i[0],"stop-color":c,"stop-opacity":p}).add(t);t.stops.push(s)})}m="url("+r.url+"#"+g+")",s.setAttribute(i,m),s.gradient=f,t.toString=function(){return m}}})}css(t){let e=this.styles,i={},s=this.element,r,o=!e;if(e&&A(t,function(t,s){e&&e[s]!==t&&(i[s]=t,o=!0)}),o){e&&(t=b(e,i)),null===t.width||"auto"===t.width?delete this.textWidth:"text"===s.nodeName.toLowerCase()&&t.width&&(r=this.textWidth=P(t.width)),b(this.styles,t),r&&!l&&this.renderer.forExport&&delete t.width;let o=w(t);s.namespaceURI===this.SVG_NS&&(["textOutline","textOverflow","width"].forEach(t=>o&&delete o[t]),o.color&&(o.fill=o.color)),m(s,o)}return this.added&&("text"===this.element.nodeName&&this.renderer.buildText(this),t.textOutline&&this.applyTextOutline(t.textOutline)),this}dashstyleSetter(t){let e,i=this["stroke-width"];if("inherit"===i&&(i=1),t=t&&t.toLowerCase()){let s=t.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(e=s.length;e--;)s[e]=""+P(s[e])*T(i,NaN);t=s.join(",").replace(/NaN/g,"none"),this.element.setAttribute("stroke-dasharray",t)}}destroy(){let t=this,e=t.element||{},i=t.renderer,s=e.ownerSVGElement,r="SPAN"===e.nodeName&&t.parentGroup||void 0,o,n;if(e.onclick=e.onmouseout=e.onmouseover=e.onmousemove=e.point=null,a(t),t.clipPath&&s){let e=t.clipPath;[].forEach.call(s.querySelectorAll("[clip-path],[CLIP-PATH]"),function(t){t.getAttribute("clip-path").indexOf(e.element.i
23499d)>-1&&t.removeAttribute("clip-path")}),t.clipPath=e.destroy()}if(t.connector=t.connector?.destroy(),t.stops){for(n=0;n<t.stops.length;n++)t.stops[n].destroy();t.stops.length=0,t.stops=void 0}for(t.safeRemoveChild(e);r&&r.div&&0===r.div.childNodes.length;)o=r.parentGroup,t.safeRemoveChild(r.div),delete r.div,r=o;t.alignOptions&&y(i.alignedObjects,t),A(t,function(e,i){t[i]&&t[i].parentGroup===t&&t[i].destroy&&t[i].destroy(),delete t[i]})}dSetter(t,e,i){S(t)&&("string"==typeof t[0]&&(t=this.renderer.pathToSegments(t)),this.pathArray=t,t=t.reduce((t,e,i)=>e&&e.join?(i?t+" ":"")+e.join(" "):(e||"").toString(),"")),/(NaN| {2}|^$)/.test(t)&&(t="M 0 0"),this[e]!==t&&(i.setAttribute(e,t),this[e]=t)}fillSetter(t,e,i){"string"==typeof t?i.setAttribute(e,t):t&&this.complexColor(t,e,i)}hrefSetter(t,e,i){i.setAttributeNS("http://www.w3.org/1999/xlink",e,t)}getBBox(t,e){let i,s,r,o;let{alignValue:a,element:n,renderer:h,styles:l,textStr:d}=this,{cache:c,cacheKeys:p}=h,u=n.namespaceURI===this.SVG_NS,g=T(e,this.rotation,0),f=h.styledMode?n&&I.prototype.getStyle.call(n,"font-size"):l.fontSize;if(x(d)&&(-1===(o=d.toString()).indexOf("<")&&(o=o.replace(/[0-9]/g,"0")),o+=["",h.rootFontSize,f,g,this.textWidth,a,l.textOverflow,l.fontWeight].join(",")),o&&!t&&(i=c[o]),!i){if(u||h.forExport){try{r=this.fakeTS&&function(t){let e=n.querySelector(".highcharts-text-outline");e&&m(e,{display:t})},C(r)&&r("none"),i=n.getBBox?b({},n.getBBox()):{width:n.offsetWidth,height:n.offsetHeight,x:0,y:0},C(r)&&r("")}catch(t){}(!i||i.width<0)&&(i={x:0,y:0,width:0,height:0})}else i=this.htmlGetBBox();s=i.height,u&&(i.height=s=({"11px,17":14,"13px,20":16})[`${f||""},${Math.round(s)}`]||s),g&&(i=this.getRotatedBox(i,g))}if(o&&(""===d||i.height>0)){for(;p.length>250;)delete c[p.shift()];c[o]||p.push(o),c[o]=i}return i}getRotatedBox(t,e){let{x:i,y:s,width:r,height:o}=t,{alignValue:a,translateY:h,rotationOriginX:l=0,rotationOriginY:d=0}=this,c={right:1,center:.5}[a||0]||0,p=Number(this.element.getAttribute("y")||0)-(h?0:s),u=e*n,g=(e-90)*n,f=Math.cos(u),m=Math.sin(u),x=r*f,y=r*m,b=Math.cos(g),v=Math.sin(g),[[S,C],[k,M]]=[l,d].map(t=>[t-t*f,t*m]),w=i+c*(r-x)+S+M+p*b,A=w+x,T=A-o*b,P=T-x,L=s+p-c*y-C+k+p*v,O=L+y,D=O-o*v,E=D-y,I=Math.min(w,A,T,P),j=Math.min(L,O,D,E),B=Math.max(w,A,T,P)-I,R=Math.max(L,O,D,E)-j;return{x:I,y:j,width:B,height:R}}getStyle(t){return c.getComputedStyle(this.element||this,"").getPropertyValue(t)}hasClass(t){return -1!==(""+this.attr("class")).split(" ").indexOf(t)}hide(){return this.attr({visibility:"hidden"})}htmlGetBBox(){return{height:0,width:0,x:0,y:0}}constructor(t,e){this.onEvents={},this.opacity=1,this.SVG_NS=d,this.element="span"===e||"body"===e?g(e):h.createElementNS(this.SVG_NS,e),this.renderer=t,this.styles={},v(this,"afterInit")}on(t,e){let{onEvents:i}=this;return i[t]&&i[t](),i[t]=p(this.element,t,e),this}opacitySetter(t,e,i){let s=Number(Number(t).toFixed(3));this.opacity=s,i.setAttribute(e,s)}reAlign(){this.alignOptions?.width&&"left"!==this.alignOptions.align&&(this.alignOptions.width=this.getBBox().width,this.placed=!1,this.align())}removeClass(t){return this.attr("class",(""+this.attr("class")).replace(M(t)?RegExp(`(^| )${t}( |$)`):t," ").replace(/ +/g," ").trim())}removeTextOutline(){let t=this.element.querySelector("tspan.highcharts-text-outline");t&&this.safeRemoveChild(t)}safeRemoveChild(t){let e=t.parentNode;e&&e.removeChild(t)}setRadialReference(t){let e=this.element.gradient&&this.renderer.gradients[this.element.gradient];return this.element.radialReference=t,e&&e.radAttr&&e.animate(this.renderer.getRadialAttr(t,e.radAttr)),this}setTextPath(t,e){e=w(!0,{enabled:!0,attributes:{dy:-5,startOffset:"50%",textAnchor:"middle"}},e);let i=this.renderer.url,s=this.text||this,r=s.textPath,{attributes:o,enabled:a}=e;if(t=t||r&&r.path,r&&r.undo(),t&&a){let e=p(s,"afterModifyTree",e=>{if(t&&a){let r=t.attr("id");r||t.attr("id",r=E());let a={x:0,y:0};x(o.dx)&&(a.dx=o.dx,delete o.dx),x(o.dy)&&(a.dy=o.dy,delete o.dy),s.attr(a),this.attr({transform:""}),this.box&&(this.box=this.box.destroy());let n=e.nodes.slice(0);e.nodes.length=0,e.nodes[0]={tagName:"textPath",attributes:b(o,{"text-anchor":o.textAnchor,href:`${i}#${r}`}),children:n}}});s.textPath={path:t,undo:e}}else s.attr({dx:0,dy:0}),delete s.textPath;return this.added&&(s.textCache="",this.renderer.buildText(s)),this}shadow(t){let{renderer:e}=this,i=w(this.parentGroup?.rotation===90?{offsetX:-1,offsetY:-1}:{},k(t)?t:{}),s=e.shadowDefinition(i);return this.attr({filter:t?`url(${e.url}#${s})`:"none"})}show(t=!0){return this.attr({visibility:t?"inherit":"visible"})}"stroke-widthSetter"(t,e,i){this[e]=t,i.setAttribute(e,t)}strokeWidth(){if(!this.renderer.styledMode)return this["stroke-width"]||0;let t=this.getStyle("stroke-width"),e=0,i;return/px$/.test(t)?e=P(t):""!==t&&(u(i=h.createElementNS(d,"rect"),{width:t,"stroke-width":0}),this.element.parentNode.appendChild(i),e=i.getBBox().width,i.parentNode.removeChild(i)),e}symbolAttr(t){let e=this;
23499I.symbolCustomAttribs.forEach(function(i){e[i]=T(t[i],e[i])}),e.attr({d:e.renderer.symbols[e.symbolName](e.x,e.y,e.width,e.height,e)})}textSetter(t){t!==this.textStr&&(delete this.textPxLength,this.textStr=t,this.added&&this.renderer.buildText(this),this.reAlign())}titleSetter(t){let e=this.element,i=e.getElementsByTagName("title")[0]||h.createElementNS(this.SVG_NS,"title");e.insertBefore?e.insertBefore(i,e.firstChild):e.appendChild(i),i.textContent=O(T(t,""),[/<[^>]*>/g,""]).replace(/&lt;/g,"<").replace(/&gt;/g,">")}toFront(){let t=this.element;return t.parentNode.appendChild(t),this}translate(t,e){return this.attr({translateX:t,translateY:e})}updateTransform(t="transform"){let{element:e,matrix:i,rotation:s=0,rotationOriginX:r,rotationOriginY:o,scaleX:a,scaleY:n,translateX:h=0,translateY:l=0}=this,d=["translate("+h+","+l+")"];x(i)&&d.push("matrix("+i.join(",")+")"),s&&(d.push("rotate("+s+" "+T(r,e.getAttribute("x"),0)+" "+T(o,e.getAttribute("y")||0)+")"),this.text?.element.tagName==="SPAN"&&this.text.attr({rotation:s,rotationOriginX:(r||0)-this.padding,rotationOriginY:(o||0)-this.padding})),(x(a)||x(n))&&d.push("scale("+T(a,1)+" "+T(n,1)+")"),d.length&&!(this.text||this).textPath&&e.setAttribute(t,d.join(" "))}visibilitySetter(t,e,i){"inherit"===t?i.removeAttribute(e):this[e]!==t&&i.setAttribute(e,t),this[e]=t}xGetter(t){return"circle"===this.element.nodeName&&("x"===t?t="cx":"y"===t&&(t="cy")),this._defaultGetter(t)}zIndexSetter(t,e){let i=this.renderer,s=this.parentGroup,r=(s||i).element||i.box,o=this.element,a=r===i.box,n,h,l,d=!1,c,p=this.added,u;if(x(t)?(o.setAttribute("data-z-index",t),t=+t,this[e]===t&&(p=!1)):x(this[e])&&o.removeAttribute("data-z-index"),this[e]=t,p){for((t=this.zIndex)&&s&&(s.handleZ=!0),u=(n=r.childNodes).length-1;u>=0&&!d;u--)c=!x(l=(h=n[u]).getAttribute("data-z-index")),h!==o&&(t<0&&c&&!a&&!u?(r.insertBefore(o,n[u]),d=!0):(P(l)<=t||c&&(!x(t)||t>=0))&&(r.insertBefore(o,n[u+1]),d=!0));d||(r.insertBefore(o,n[a?3:0]),d=!0)}return d}}return I.symbolCustomAttribs=["anchorX","anchorY","clockwise","end","height","innerR","r","start","width","x","y"],I.prototype.strokeSetter=I.prototype.fillSetter,I.prototype.yGetter=I.prototype.xGetter,I.prototype.matrixSetter=I.prototype.rotationOriginXSetter=I.prototype.rotationOriginYSetter=I.prototype.rotationSetter=I.prototype.scaleXSetter=I.prototype.scaleYSetter=I.prototype.translateXSetter=I.prototype.translateYSetter=I.prototype.verticalAlignSetter=function(t,e){this[e]=t,this.doTransform=!0},I}),i(e,"Core/Renderer/SVG/SVGLabel.js",[e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e){let{defined:i,extend:s,isNumber:r,merge:o,pick:a,removeEvent:n}=e;class h extends t{constructor(t,e,i,s,r,o,a,n,l,d){let c;super(t,"g"),this.paddingLeftSetter=this.paddingSetter,this.paddingRightSetter=this.paddingSetter,this.textStr=e,this.x=i,this.y=s,this.anchorX=o,this.anchorY=a,this.baseline=l,this.className=d,this.addClass("button"===d?"highcharts-no-tooltip":"highcharts-label"),d&&this.addClass("highcharts-"+d),this.text=t.text(void 0,0,0,n).attr({zIndex:1}),"string"==typeof r&&((c=/^url\((.*?)\)$/.test(r))||this.renderer.symbols[r])&&(this.symbolKey=r),this.bBox=h.emptyBBox,this.padding=3,this.baselineOffset=0,this.needsBox=t.styledMode||c,this.deferredAttr={},this.alignFactor=0}alignSetter(t){let e={left:0,center:.5,right:1}[t];e!==this.alignFactor&&(this.alignFactor=e,this.bBox&&r(this.xSetting)&&this.attr({x:this.xSetting}))}anchorXSetter(t,e){this.anchorX=t,this.boxAttr(e,Math.round(t)-this.getCrispAdjust()-this.xSetting)}anchorYSetter(t,e){this.anchorY=t,this.boxAttr(e,t-this.ySetting)}boxAttr(t,e){this.box?this.box.attr(t,e):this.deferredAttr[t]=e}css(e){if(e){let t={};e=o(e),h.textProps.forEach(i=>{void 0!==e[i]&&(t[i]=e[i],delete e[i])}),this.text.css(t),"fontSize"in t||"fontWeight"in t?this.updateTextPadding():("width"in t||"textOverflow"in t)&&this.updateBoxSize()}return t.prototype.css.call(this,e)}destroy(){n(this.element,"mouseenter"),n(this.element,"mouseleave"),this.text&&this.text.destroy(),this.box&&(this.box=this.box.destroy()),t.prototype.destroy.call(this)}fillSetter(t,e){t&&(this.needsBox=!0),this.fill=t,this.boxAttr(e,t)}getBBox(t,e){this.textStr&&0===this.bBox.width&&0===this.bBox.height&&this.updateBoxSize();let{padding:i,height:s=0,translateX:r=0,translateY:o=0,width:n=0}=this,h=a(this.paddingLeft,i),l=e??(this.rotation||0),d={width:n,height:s,x:r+this.bBox.x-h,y:o+this.bBox.y-i+this.baselineOffset};return l&&(d=this.getRotatedBox(d,l)),d}getCrispAdjust(){return(this.renderer.styledMode&&this.box?this.box.strokeWidth():this["stroke-width"]?parseInt(this["stroke-width"],10):0)%2/2}heightSetter(t){this.heightSetting=t}onAdd(){this.text.add(this),this.attr({text:a(this.textStr,""),x:this.x||0,y:this.y||0}),this.box&&i(this.anchorX)&&this.attr({anchorX:this.anchorX,anchorY:this.anchorY})}paddingSetter(t,e){r(t)?t!==this[e]&&(this[e]=t,this.updateTextPadding()):this[e]=void 0}rSetter(t,e){this.boxAttr(e,t)}strokeSetter(t,e){this.stroke=t,this.boxAttr(e,t)}"stroke-widthSetter"(t,e){t&&(this.needsBox=!0),this["stroke-width"]=t,this.boxAttr(e,t)}"text-alignSetter"(t){this.textAlign=t}textSetter(t){void 0!==t&&this.text.attr({text:t}),this.updateTextPadding(),this.reAlign()}updateBoxSize(){let t;let e=this.text,o={},a=this.padding,n=this.bBox=(!r(this.widthSetting)||!r(this.heightSetting)||this.textAlign)&&i(e.textStr)?e.getBBox(void 0,0):h.emptyBBox;this.width=this.getPaddedWidth(),this.height=(this.heightSetting||n.height||0)+2*a;let l=this.renderer.fontMetrics(e);if(this.baselineOffset=a+Math.min((this.text.firstLineMetrics||l).b,n.height||1/0),this.heightSetting&&(this.baselineOffset+=(this.heightSetting-l.h)/2),this.needsBox&&!e.textPath){if(!this.box){let t=this.box=this.symbolKey?this.renderer.symbol(this.symbolKey):this.renderer.rect();t.addClass(("button"===this.className?"":"highcharts-label-box")+(this.className?" highcharts-"+this.className+"-box":"")),t.add(this)}t=this.getCrispAdjust(),o.x=t,o.y=(this.baseline?-this.baselineOffset:0)+t,o.width=Math.round(this.width),o.height=Math.round(this.height),this.box.attr(s(o,this.deferredAttr)),this.deferredAttr={}}}updateTextPadding(){let t=this.text;if(!t.textPath){this.updateBoxSize();let e=this.baseline?0:this.baselineOffset,s=a(this.paddingLeft,this.padding);i(this.widthSetting)&&this.bBox&&("center"===this.textAlign||"right"===this.textAlign)&&(s+=({center:.5,right:1})[this.textAlign]*(this.widthSetting-this.bBox.width)),(s!==t.x||e!==t.y)&&(t.attr("x",s),t.hasBoxWidthChanged&&(this.bBox=t.getBBox(!0)),void 0!==e&&t.attr("y",e)),t.x=s,t.y=e}}widthSetter(t){this.widthSetting=r(t)?t:void 0}getPaddedWidth(){let t=this.padding,e=a(this.paddingLeft,t),i=a(this.paddingRight,t);return(this.widthSetting||this.bBox.width||0)+e+i}xSetter(t){this.x=t,this.alignFactor&&(t-=this.alignFactor*this.getPaddedWidth(),this["forceAnimate:x"]=!0),this.xSetting=Math.round(t),this.attr("translateX",this.xSetting)}ySetter(t){this.ySetting=this.y=Math.round(t),this.attr("translateY",this.ySetting)}}return h.emptyBBox={width:0,height:0,x:0,y:0},h.textProps=["color","direction","fontFamily","fontSize","fontStyle","fontWeight","lineHeight","textAlign","textDecoration","textOutline","textOverflow","whiteSpace","width"],h}),i(e,"Core/Renderer/SVG/Symbols.js",[e["Core/Utilities.js"]],function(t){let{defined:e,isNumber:i,pick:s}=t;function r(t,i,r,o,a){let n=[];if(a){let h=a.start||0,l=s(a.r,r),d=s(a.r,o||r),c=2e-4/Math.max(l,1),p=Math.abs((a.end||0)-h-2*Math.PI)<c,u=(a.end||0)-c,g=a.innerR,f=s(a.open,p),m=Math.cos(h),x=Math.sin(h),y=Math.cos(u),b=Math.sin(u),v=s(a.longArc,u-h-Math.PI<c?0:1),S=["A",l,d,0,v,s(a.clockwise,1),t+l*y,i+d*b];S.params={start:h,end:u,cx:t,cy:i},n.push(["M",t+l*m,i+d*x],S),e(g)&&((S=["A",g,g,0,v,e(a.clockwise)?1-a.clockwise:0,t+g*m,i+g*x]).params={start:u,end:h,cx:t,cy:i},n.push(f?["M",t+g*y,i+g*b]:["L",t+g*y,i+g*b],S)),f||n.push(["Z"])}return n}
23499function o(t,e,i,s,r){return r&&r.r?a(t,e,i,s,r):[["M",t,e],["L",t+i,e],["L",t+i,e+s],["L",t,e+s],["Z"]]}function a(t,e,i,s,r){let o=r?.r||0;return[["M",t+o,e],["L",t+i-o,e],["A",o,o,0,0,1,t+i,e+o],["L",t+i,e+s-o],["A",o,o,0,0,1,t+i-o,e+s],["L",t+o,e+s],["A",o,o,0,0,1,t,e+s-o],["L",t,e+o],["A",o,o,0,0,1,t+o,e],["Z"]]}return{arc:r,callout:function(t,e,s,r,o){let n=Math.min(o&&o.r||0,s,r),h=n+6,l=o&&o.anchorX,d=o&&o.anchorY||0,c=a(t,e,s,r,{r:n});if(!i(l)||l<s&&l>0&&d<r&&d>0)return c;if(t+l>s-h){if(d>e+h&&d<e+r-h)c.splice(3,1,["L",t+s,d-6],["L",t+s+6,d],["L",t+s,d+6],["L",t+s,e+r-n]);else if(l<s){let i=d<e+h,o=i?e:e+r;c.splice(i?2:5,0,["L",l,d],["L",t+s-n,o])}else c.splice(3,1,["L",t+s,r/2],["L",l,d],["L",t+s,r/2],["L",t+s,e+r-n])}else if(t+l<h){if(d>e+h&&d<e+r-h)c.splice(7,1,["L",t,d+6],["L",t-6,d],["L",t,d-6],["L",t,e+n]);else if(l>0){let i=d<e+h,s=i?e:e+r;c.splice(i?1:6,0,["L",l,d],["L",t+n,s])}else c.splice(7,1,["L",t,r/2],["L",l,d],["L",t,r/2],["L",t,e+n])}else d>r&&l<s-h?c.splice(5,1,["L",l+6,e+r],["L",l,e+r+6],["L",l-6,e+r],["L",t+n,e+r]):d<0&&l>h&&c.splice(1,1,["L",l-6,e],["L",l,e-6],["L",l+6,e],["L",s-n,e]);return c},circle:function(t,e,i,s){return r(t+i/2,e+s/2,i/2,s/2,{start:.5*Math.PI,end:2.5*Math.PI,open:!1})},diamond:function(t,e,i,s){return[["M",t+i/2,e],["L",t+i,e+s/2],["L",t+i/2,e+s],["L",t,e+s/2],["Z"]]},rect:o,roundedRect:a,square:o,triangle:function(t,e,i,s){return[["M",t+i/2,e],["L",t+i,e+s],["L",t,e+s],["Z"]]},"triangle-down":function(t,e,i,s){return[["M",t,e],["L",t+i,e],["L",t+i/2,e+s],["Z"]]}}}),i(e,"Core/Renderer/SVG/TextBuilder.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{doc:s,SVG_NS:r,win:o}=e,{attr:a,extend:n,fireEvent:h,isString:l,objectEach:d,pick:c}=i;return class{constructor(t){let e=t.styles;this.renderer=t.renderer,this.svgElement=t,this.width=t.textWidth,this.textLineHeight=e&&e.lineHeight,this.textOutline=e&&e.textOutline,this.ellipsis=!!(e&&"ellipsis"===e.textOverflow),this.noWrap=!!(e&&"nowrap"===e.whiteSpace)}buildSVG(){let e=this.svgElement,i=e.element,r=e.renderer,o=c(e.textStr,"").toString(),a=-1!==o.indexOf("<"),n=i.childNodes,h=!e.added&&r.box,d=[o,this.ellipsis,this.noWrap,this.textLineHeight,this.textOutline,e.getStyle("font-size"),this.width].join(",");if(d!==e.textCache){e.textCache=d,delete e.actualWidth;for(let t=n.length;t--;)i.removeChild(n[t]);if(a||this.ellipsis||this.width||e.textPath||-1!==o.indexOf(" ")&&(!this.noWrap||/<br.*?>/g.test(o))){if(""!==o){h&&h.appendChild(i);let s=new t(o);this.modifyTree(s.nodes),s.addToDOM(i),this.modifyDOM(),this.ellipsis&&-1!==(i.textContent||"").indexOf("…")&&e.attr("title",this.unescapeEntities(e.textStr||"",["&lt;","&gt;"])),h&&h.removeChild(i)}}else i.appendChild(s.createTextNode(this.unescapeEntities(o)));l(this.textOutline)&&e.applyTextOutline&&e.applyTextOutline(this.textOutline)}}modifyDOM(){let t;let e=this.svgElement,i=a(e.element,"x");for(e.firstLineMetrics=void 0;t=e.element.firstChild;)if(/^[\s\u200B]*$/.test(t.textContent||" "))e.element.removeChild(t);else break;[].forEach.call(e.element.querySelectorAll("tspan.highcharts-br"),(t,s)=>{t.nextSibling&&t.previousSibling&&(0===s&&1===t.previousSibling.nodeType&&(e.firstLineMetrics=e.renderer.fontMetrics(t.previousSibling)),a(t,{dy:this.getLineHeight(t.nextSibling),x:i}))});let n=this.width||0;if(!n)return;let h=(t,o)=>{let h=t.textContent||"",l=h.replace(/([^\^])-/g,"$1- ").split(" "),d=!this.noWrap&&(l.length>1||e.element.childNodes.length>1),c=this.getLineHeight(o),p=0,u=e.actualWidth;if(this.ellipsis)h&&this.truncate(t,h,void 0,0,Math.max(0,n-.8*c),(t,e)=>t.substring(0,e)+"…");else if(d){let h=[],d=[];for(;o.firstChild&&o.firstChild!==t;)d.push(o.firstChild),o.removeChild(o.firstChild);for(;l.length;)l.length&&!this.noWrap&&p>0&&(h.push(t.textContent||""),t.textContent=l.join(" ").replace(/- /g,"-")),this.truncate(t,void 0,l,0===p&&u||0,n,(t,e)=>l.slice(0,e).join(" ").replace(/- /g,"-")),u=e.actualWidth,p++;d.forEach(e=>{o.insertBefore(e,t)}),h.forEach(e=>{o.insertBefore(s.createTextNode(e),t);let n=s.createElementNS(r,"tspan");n.textContent="​",a(n,{dy:c,x:i}),o.insertBefore(n,t)})}},l=t=>
vendor: 4,668 bytes, line 23499
23499{[].slice.call(t.childNodes).forEach(i=>{i.nodeType===o.Node.TEXT_NODE?h(i,t):(-1!==i.className.baseVal.indexOf("highcharts-br")&&(e.actualWidth=0),l(i))})};l(e.element)}getLineHeight(t){let e=t.nodeType===o.Node.TEXT_NODE?t.parentElement:t;return this.textLineHeight?parseInt(this.textLineHeight.toString(),10):this.renderer.fontMetrics(e||this.svgElement.element).h}modifyTree(t){let e=(i,s)=>{let{attributes:r={},children:o,style:a={},tagName:h}=i,l=this.renderer.styledMode;if("b"===h||"strong"===h?l?r.class="highcharts-strong":a.fontWeight="bold":("i"===h||"em"===h)&&(l?r.class="highcharts-emphasized":a.fontStyle="italic"),a&&a.color&&(a.fill=a.color),"br"===h){r.class="highcharts-br",i.textContent="​";let e=t[s+1];e&&e.textContent&&(e.textContent=e.textContent.replace(/^ +/gm,""))}else"a"===h&&o&&o.some(t=>"#text"===t.tagName)&&(i.children=[{children:o,tagName:"tspan"}]);"#text"!==h&&"a"!==h&&(i.tagName="tspan"),n(i,{attributes:r,style:a}),o&&o.filter(t=>"#text"!==t.tagName).forEach(e)};t.forEach(e),h(this.svgElement,"afterModifyTree",{nodes:t})}truncate(t,e,i,s,r,o){let a,n;let h=this.svgElement,{rotation:l}=h,d=[],c=i?1:0,p=(e||i||"").length,u=p,g=function(e,r){let o=r||e,a=t.parentNode;if(a&&void 0===d[o]&&a.getSubStringLength)try{d[o]=s+a.getSubStringLength(0,i?o+1:o)}catch(t){}return d[o]};if(h.rotation=0,s+(n=g(t.textContent.length))>r){for(;c<=p;)u=Math.ceil((c+p)/2),i&&(a=o(i,u)),n=g(u,a&&a.length-1),c===p?c=p+1:n>r?p=u-1:c=u;0===p?t.textContent="":e&&p===e.length-1||(t.textContent=a||o(e||i,u))}i&&i.splice(0,u),h.actualWidth=n,h.rotation=l}unescapeEntities(t,e){return d(this.renderer.escapes,function(i,s){e&&-1!==e.indexOf(i)||(t=t.toString().replace(RegExp(i,"g"),s))}),t}}}),i(e,"Core/Renderer/SVG/SVGRenderer.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Defaults.js"],e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Renderer/SVG/SVGLabel.js"],e["Core/Renderer/SVG/Symbols.js"],e["Core/Renderer/SVG/TextBuilder.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n,h,l){let d;let{defaultOptions:c}=e,{charts:p,deg2rad:u,doc:g,isFirefox:f,isMS:m,isWebKit:x,noop:y,SVG_NS:b,symbolSizes:v,win:S}=s,{addEvent:C,attr:k,createElement:M,crisp:w,css:A,defined:T,destroyObjectProperties:P,extend:L,isArray:O,isNumber:D,isObject:E,isString:I,merge:j,pick:B,pInt:R,replaceNested:z,uniqueKey:N}=l;class W{constructor(t,e,i,s,r,o,a){let n,h;let l=this.createElement("svg").attr({version:"1.1",class:"highcharts-root"}),d=l.element;a||l.css(this.getStyle(s||{})),t.appendChild(d),k(t,"dir","ltr"),-1===t.innerHTML.indexOf("xmlns")&&k(d,"xmlns",this.SVG_NS),this.box=d,this.boxWrapper=l,this.alignedObjects=[],this.url=this.getReferenceURL(),this.createElement("desc").add().element.appendChild(g.createTextNode("Created with Highcharts 11.4.3")),this.defs=this.createElement("defs").add(),this.allowHTML=o,this.forExport=r,this.styledMode=a,this.gradients={},this.cache={},this.cacheKeys=[],this.imgCount=0,this.rootFontSize=l.getStyle("font-size"),this.setSize(e,i,!1),f&&t.getBoundingClientRect&&((n=function(){A(t,{left:0,top:0}),h=t.getBoundingClientRect(),A(t,{left:Math.ceil(h.left)-h.left+"px",top:Math.ceil(h.top)-h.top+"px"})})(),this.unSubPixelFix=C(S,"resize",n))}definition(e){return new t([e]).addToDOM(this.defs.element)}getReferenceURL(){if((f||x)&&g.getElementsByTagName("base").length){if(!T(d)){let e=N(),i=new t([{tagName:"svg",attributes:{width:8,height:8},children:[{tagName:"defs",children:[{tagName:"clipPath",attributes:{id:e},children:[{tagName:"rect",attributes:{width:4,height:4}}]}]},{tagName:"rect",attributes:{id:"hitme",width:8,height:8,"clip-path":`url(#${e})`,fill:"rgba(0,0,0,0.001)"}}]}]).addToDOM(g.body);A(i,{position:"fixed",top:0,left:0,zIndex:9e5});let s=g.elementFromPoint(6,6);d="hitme"===(s&&s.id),g.body.removeChild(i)}if(d)return z(S.location.href.split("#")[0],[/<[^>]*>/g,""],[/([\('\)])/g,"\\$1"],[/ /g,"%20"])}return""}getStyle(t){return this.style=L({fontFamily:"Helvetica, Arial, sans-serif",fontSize:"1rem"},t),this.style}setStyle(t){this.boxWrapper.css(this.getStyle(t))}isHidden(){return!this.boxWrapper.getBBox().width}destroy(){let t=this.defs;return this.box=null,this.boxWrapper=this.boxWrapper.destroy(),P(this.gradients||{}),this.gradients=null,this.defs=t.destroy(),this.unSubPixelFix&&this.unSubPixelFix(),this.alignedObjects=null,null}createElement(t){return new this.Element(this,t)}getRadialAttr(t,e){return{cx:t[0]-t[2]/2+(e.cx||0)*t[2],cy:t[1]-t[2]/2+(e.cy||0)*t[2],r:(e.r||0)*t[2]}}shadowDefinition(t){let e=[`highcharts-drop-shadow-${this.chartIndex}`,...Object.keys(t).map(e=>`${e}-${t[e]}
23499`)].join("-").toLowerCase().replace(/[^a-z0-9\-]/g,""),i=j({color:"#000000",offsetX:1,offsetY:1,opacity:.15,width:5},t);return this.defs.element.querySelector(`#${e}`)||this.definition({tagName:"filter",attributes:{id:e,filterUnits:i.filterUnits},children:[{tagName:"feDropShadow",attributes:{dx:i.offsetX,dy:i.offsetY,"flood-color":i.color,"flood-opacity":Math.min(5*i.opacity,1),stdDeviation:i.width/2}}]}),e}buildText(t){new h(t).buildSVG()}getContrast(t){let e=i.parse(t).rgba.map(t=>{let e=t/255;return e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)}),s=.2126*e[0]+.7152*e[1]+.0722*e[2];return 1.05/(s+.05)>(s+.05)/.05?"#FFFFFF":"#000000"}button(e,i,s,r,o={},a,n,h,l,d){let p=this.label(e,i,s,l,void 0,void 0,d,void 0,"button"),u=this.styledMode,g=arguments,f=0;o=j(c.global.buttonTheme,o),u&&(delete o.fill,delete o.stroke,delete o["stroke-width"]);let x=o.states||{},y=o.style||{};delete o.states,delete o.style;let b=[t.filterUserAttributes(o)],v=[y];return u||["hover","select","disabled"].forEach((e,i)=>{b.push(j(b[0],t.filterUserAttributes(g[i+5]||x[e]||{}))),v.push(b[i+1].style),delete b[i+1].style}),C(p.element,m?"mouseover":"mouseenter",function(){3!==f&&p.setState(1)}),C(p.element,m?"mouseout":"mouseleave",function(){3!==f&&p.setState(f)}),p.setState=(t=0)=>{if(1!==t&&(p.state=f=t),p.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass("highcharts-button-"+["normal","hover","pressed","disabled"][t]),!u){p.attr(b[t]);let e=v[t];E(e)&&p.css(e)}},p.attr(b[0]),!u&&(p.css(L({cursor:"default"},y)),d&&p.text.css({pointerEvents:"none"})),p.on("touchstart",t=>t.stopPropagation()).on("click",function(t){3!==f&&r.call(p,t)})}crispLine(t,e){let[i,s]=t;return T(i[1])&&i[1]===s[1]&&(i[1]=s[1]=w(i[1],e)),T(i[2])&&i[2]===s[2]&&(i[2]=s[2]=w(i[2],e)),t}path(t){let e=this.styledMode?{}:{fill:"none"};return O(t)?e.d=t:E(t)&&L(e,t),this.createElement("path").attr(e)}circle(t,e,i){let s=E(t)?t:void 0===t?{}:{x:t,y:e,r:i},r=this.createElement("circle");return r.xSetter=r.ySetter=function(t,e,i){i.setAttribute("c"+e,t)},r.attr(s)}arc(t,e,i,s,r,o){let a;E(t)?(e=(a=t).y,i=a.r,s=a.innerR,r=a.start,o=a.end,t=a.x):a={innerR:s,start:r,end:o};let n=this.symbol("arc",t,e,i,i,a);return n.r=i,n}rect(t,e,i,s,r,o){let a=E(t)?t:void 0===t?{}:{x:t,y:e,r,width:Math.max(i||0,0),height:Math.max(s||0,0)},n=this.createElement("rect");return this.styledMode||(void 0!==o&&(a["stroke-width"]=o,L(a,n.crisp(a))),a.fill="none"),n.rSetter=function(t,e,i){n.r=t,k(i,{rx:t,ry:t})},n.rGetter=function(){return n.r||0},n.attr(a)}roundedRect(t){return this.symbol("roundedRect").attr(t)}setSize(t,e,i){this.width=t,this.height=e,this.boxWrapper.animate({width:t,height:e},{step:function(){this.attr({viewBox:"0 0 "+this.attr("width")+" "+this.attr("height")})},duration:B(i,!0)?void 0:0}),this.alignElements()}g(t){let e=this.createElement("g");return t?e.attr({class:"highcharts-"+t}):e}image(t,e,i,s,r,o){let a={preserveAspectRatio:"none"};D(e)&&(a.x=e),D(i)&&(a.y=i),D(s)&&(a.width=s),D(r)&&(a.height=r);let n=this.createElement("image").attr(a),h=function(e){n.attr({href:t}),o.call(n,e)};if(o){n.attr({href:"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="});let e=new S.Image;C(e,"load",h),e.src=t,e.complete&&h({})}else n.attr({href:t});return n}symbol(t,e,i,s,r,o){let a,n,h,l;let d=this,c=/^url\((.*?)\)$/,u=c.test(t),f=!u&&(this.symbols[t]?t:"circle"),m=f&&this.symbols[f];if(m)"number"==typeof e&&(n=m.call(this.symbols,e||0,i||0,s||0,r||0,o)),a=this.path(n),d.styledMode||a.attr("fill","none"),L(a,{symbolName:f||void 0,x:e,y:i,width:s,height:r}),o&&L(a,o);else if(u){h=t.match(c)[1];let s=a=this.image(h);s.imgwidth=B(o&&o.width,v[h]&&v[h].width),s.imgheight=B(o&&o.height,v[h]&&v[h].height),l=t=>t.attr({width:t.width,height:t.height}),["width","height"].forEach(t=>{s[`${t}Setter`]=function(t,e){this[e]=t;let{alignByTranslate:i,element:s,width:r,height:a,imgwidth:n,imgheight:h}=this,l="width"===e?n:h,d=1;o&&"within"===o.backgroundSize&&r&&a&&n&&h?(d=Math.min(r/n,a/h),k(s,{width:Math.round(n*d),height:Math.round(h*d)})):s&&l&&s.setAttribute(e,l),!i&&n&&h&&this.translate(((r||0)-n*d)/2,((a||0)-h*d)/2)}}),T(e)&&s.attr({x:e,y:i}),s.isImg=!0,T(s.imgwidth)&&T(s.imgheight)?l(s):(s.attr({width:0,height:0}),M("img",{onload:function(){let t=p[d.chartIndex];0===this.width&&(A(this,{position:"absolute",top:"-999em"}),g.body.appendChild(this)),v[h]={width:this.width,height:this.height},s.imgwidth=this.width,s.imgheight=this.height,s.element&&l(s),this.parentNode&&this.parentNode.removeChild(this),d.imgCount--,d.imgCount||!t||t.hasLoaded||t.onload()},src:h}),this.imgCount++)}return a}clipRect(t,e,i,s){return this.rect(t,e,i,s,0)}text(t,e,i,s){let r={};if(s&&(this.allowHTML||!this.forExport))return this.html(t,e,i);r.x=Math.round(e||0),i&&(r.y=Math.round(i)),T(t)&&(r.text=t);let o=this.createElement("text").attr(r);return s&&(!this.forExport||this.allowHTML)||(o.xSetter=function(t,e,
23499i){let s=i.getElementsByTagName("tspan"),r=i.getAttribute(e);for(let i=0,o;i<s.length;i++)(o=s[i]).getAttribute(e)===r&&o.setAttribute(e,t);i.setAttribute(e,t)}),o}fontMetrics(t){let e=R(o.prototype.getStyle.call(t,"font-size")||0),i=e<24?e+3:Math.round(1.2*e),s=Math.round(.8*i);return{h:i,b:s,f:e}}rotCorr(t,e,i){let s=t;return e&&i&&(s=Math.max(s*Math.cos(e*u),4)),{x:-t/3*Math.sin(e*u),y:s}}pathToSegments(t){let e=[],i=[],s={A:8,C:7,H:2,L:3,M:3,Q:5,S:5,T:3,V:2};for(let r=0;r<t.length;r++)I(i[0])&&D(t[r])&&i.length===s[i[0].toUpperCase()]&&t.splice(r,0,i[0].replace("M","L").replace("m","l")),"string"==typeof t[r]&&(i.length&&e.push(i.slice(0)),i.length=0),i.push(t[r]);return e.push(i.slice(0)),e}label(t,e,i,s,r,o,n,h,l){return new a(this,t,e,i,s,r,o,n,h,l)}alignElements(){this.alignedObjects.forEach(t=>t.align())}}return L(W.prototype,{Element:o,SVG_NS:b,escapes:{"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#39;",'"':"&quot;"},symbols:n,draw:y}),r.registerRendererType("svg",W,!0),W}),i(e,"Core/Renderer/HTML/HTMLElement.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Globals.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{composed:r}=e,{attr:o,css:a,createElement:n,defined:h,extend:l,pInt:d,pushUnique:c}=s;function p(t,e,s){let r=this.div?.style||s.style;i.prototype[`${e}Setter`].call(this,t,e,s),r&&(r[e]=t)}let u=(t,e)=>{if(!t.div){let s=o(t.element,"class"),r=t.css,a=n("div",s?{className:s}:void 0,{position:"absolute",left:`${t.translateX||0}px`,top:`${t.translateY||0}px`,...t.styles,display:t.display,opacity:t.opacity,visibility:t.visibility},t.parentGroup?.div||e);t.classSetter=(t,e,i)=>{i.setAttribute("class",t),a.className=t},t.translateXSetter=t.translateYSetter=(e,i)=>{t[i]=e,a.style["translateX"===i?"left":"top"]=`${e}px`,t.doTransform=!0},t.opacitySetter=t.visibilitySetter=p,t.css=e=>(r.call(t,e),e.cursor&&(a.style.cursor=e.cursor),e.pointerEvents&&(a.style.pointerEvents=e.pointerEvents),t),t.on=function(){return i.prototype.on.apply({element:a,onEvents:t.onEvents},arguments),t},t.div=a}return t.div};class g extends i{static compose(t){c(r,this.compose)&&(t.prototype.html=function(t,e,i){return new g(this,"span").attr({text:t,x:Math.round(e),y:Math.round(i)})})}constructor(t,e){super(t,e),this.css({position:"absolute",...t.styledMode?{}:{fontFamily:t.style.fontFamily,fontSize:t.style.fontSize}}),this.element.style.whiteSpace="nowrap"}getSpanCorrection(t,e,i){this.xCorr=-t*i,this.yCorr=-e}css(t){let e;let{element:i}=this,s="SPAN"===i.tagName&&t&&"width"in t,r=s&&t.width;return s&&(delete t.width,this.textWidth=d(r)||void 0,e=!0),t?.textOverflow==="ellipsis"&&(t.whiteSpace="nowrap",t.overflow="hidden"),l(this.styles,t),a(i,t),e&&this.updateTransform(),this}htmlGetBBox(){let{element:t}=this;return{x:t.offsetLeft,y:t.offsetTop,width:t.offsetWidth,height:t.offsetHeight}}updateTransform(){if(!this.added){this.alignOnAdd=!0;return}let{element:t,renderer:e,rotation:i,rotationOriginX:s,rotationOriginY:r,styles:o,textAlign:n="left",textWidth:l,translateX:d=0,translateY:c=0,x:p=0,y:u=0}=this,g=o.whiteSpace;if(a(t,{marginLeft:`${d}px`,marginTop:`${c}px`}),"SPAN"===t.tagName){let o=[i,n,t.innerHTML,l,this.textAlign].join(","),d=-(this.parentGroup?.padding*1)||0,c,f=!1;if(l!==this.oldTextWidth){let e=this.textPxLength?this.textPxLength:(a(t,{width:"",whiteSpace:g||"nowrap"}),t.offsetWidth),s=l||0;(s>this.oldTextWidth||e>s)&&(/[ \-]/.test(t.textContent||t.innerText)||"ellipsis"===t.style.textOverflow)&&(a(t,{width:e>s||i?l+"px":"auto",display:"block",whiteSpace:g||"normal"}),this.oldTextWidth=l,f=!0)}this.hasBoxWidthChanged=f,o!==this.cTT&&(c=e.fontMetrics(t).b,h(i)&&(i!==(this.oldRotation||0)||n!==this.oldAlign)&&this.setSpanRotation(i,d,d),this.get
23499SpanCorrection(!h(i)&&this.textPxLength||t.offsetWidth,c,{left:0,center:.5,right:1}[n]));let{xCorr:m=0,yCorr:x=0}=this,y=(s??p)-m-p-d,b=(r??u)-x-u-d;a(t,{left:`${p+m}px`,top:`${u+x}px`,transformOrigin:`${y}px ${b}px`}),this.cTT=o,this.oldRotation=i,this.oldAlign=n}}setSpanRotation(t,e,i){a(this.element,{transform:`rotate(${t}deg)`,transformOrigin:`${e}% ${i}px`})}add(t){let e;let i=this.renderer.box.parentNode,s=[];if(this.parentGroup=t,t&&!(e=t.div)){let r=t;for(;r;)s.push(r),r=r.parentGroup;for(let t of s.reverse())e=u(t,i)}return(e||i).appendChild(this.element),this.added=!0,this.alignOnAdd&&this.updateTransform(),this}textSetter(e){e!==this.textStr&&(delete this.bBox,delete this.oldTextWidth,t.setElementHTML(this.element,e??""),this.textStr=e,this.doTransform=!0)}alignSetter(t){this.alignValue=this.textAlign=t,this.doTransform=!0}xSetter(t,e){this[e]=t,this.doTransform=!0}}let f=g.prototype;return f.visibilitySetter=f.opacitySetter=p,f.ySetter=f.rotationSetter=f.rotationOriginXSetter=f.rotationOriginYSetter=f.xSetter,g}),i(e,"Core/Axis/AxisDefaults.js",[],function(){var t,e;return(e=t||(t={})).xAxis={alignTicks:!0,allowDecimals:void 0,panningEnabled:!0,zIndex:2,zoomEnabled:!0,dateTimeLabelFormats:{millisecond:{main:"%H:%M:%S.%L",range:!1},second:{main:"%H:%M:%S",range:!1},minute:{main:"%H:%M",range:!1},hour:{main:"%H:%M",range:!1},day:{main:"%e %b"},week:{main:"%e %b"},month:{main:"%b '%y"},year:{main:"%Y"}},endOnTick:!1,gridLineDashStyle:"Solid",gridZIndex:1,labels:{autoRotationLimit:80,distance:15,enabled:!0,indentation:10,overflow:"justify",reserveSpace:void 0,rotation:void 0,staggerLines:0,step:0,useHTML:!1,zIndex:7,style:{color:"#333333",cursor:"default",fontSize:"0.8em"}},maxPadding:.01,minorGridLineDashStyle:"Solid",minorTickLength:2,minorTickPosition:"outside",minorTicksPerMajor:5,minPadding:.01,offset:void 0,reversed:void 0,reversedStacks:!1,showEmpty:!0,showFirstLabel:!0,showLastLabel:!0,startOfWeek:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickmarkPlacement:"between",tickPosition:"outside",title:{align:"middle",useHTML:!1,x:0,y:0,style:{color:"#666666",fontSize:"0.8em"}},type:"linear",uniqueNames:!0,visible:!0,minorGridLineColor:"#f2f2f2",minorGridLineWidth:1,minorTickColor:"#999999",lineColor:"#333333",lineWidth:1,gridLineColor:"#e6e6e6",gridLineWidth:void 0,tickColor:"#333333"},e.yAxis={reversedStacks:!0,endOnTick:!0,maxPadding:.05,minPadding:.05,tickPixelInterval:72,showLastLabel:!0,labels:{x:void 0},startOnTick:!0,title:{text:"Values"},stackLabels:{animation:{},allowOverlap:!1,enabled:!1,crop:!0,overflow:"justify",formatter:function(){let{numberFormatter:t}=this.axis.chart;return t(this.total||0,-1)},style:{color:"#000000",fontSize:"0.7em",fontWeight:"bold",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0},t}),i(e,"Core/Foundation.js",[e["Core/Utilities.js"]],function(t){var e;let{addEvent:i,isFunction:s,objectEach:r,removeEvent:o}=t;return(e||(e={})).registerEventOptions=function(t,e){t.eventOptions=t.eventOptions||{},r(e.events,function(e,r){t.eventOptions[r]!==e&&(t.eventOptions[r]&&(o(t,r,t.eventOptions[r]),delete t.eventOptions[r]),s(e)&&(t.eventOptions[r]=e,i(t,r,e,{order:0})))})},e}),i(e,"Core/Axis/Tick.js",[e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{deg2rad:s}=e,{clamp:r,correctFloat:o,defined:a,destroyObjectProperties:n,extend:h,fireEvent:l,isNumber:d,merge:c,objectEach:p,pick:u}=i;return class{constructor(t,e,i,s,r){this.isNew=!0,this.isNewLabel=!0,this.axis=t,this.pos=e,this.type=i||"",this.parameters=r||{},this.tickmarkOffset=this.parameters.tickmarkOffset,this.options=this.parameters.options,l(this,"init"),i||s||this.addLabel()}addLabel(){let e=this,i=e.axis,s=i.options,r=i.chart,n=i.categories,c=i.logarithmic,p=i.names,g=e.pos,f=u(e.options&&e.options.labels,s.labels),m=i.tickPositions,x=g===m[0],y=g===m[m.length-1],b=(!f.step||1===f.step)&&1===i.tickInterval,v=m.info,S=e.label,C,k,M,w=this.parameters.category||(n?u(n[g],p[g],g):g);c&&d(w)&&(w=o(c.lin2log(w))),i.dateTime&&(v?C=(k=r.time.resolveDTLFormat(s.dateTimeLabelFormats[!s.grid&&v.higherRanks[g]||v.unitName])).main:d(w)&&(C=i.dateTime.getXDateFormat(w,s.dateTimeLabelFormats||{}))),e.isFirst=x,e.isLast=y;let A={axis:i,chart:r,dateTimeLabelFormat:C,isFirst:x,isLast:y,pos:g,tick:e,tickPositionInfo:v,value:w};l(this,"labelFormat",A);let T=e=>f.formatter?f.formatter.call(e,e):f.format?(e.text=i.defaultLabelFormatter.call(e),t.format(f.format,e,r)):i.defaultLabelFormatter.call(e),P=T.call(A,A),L=k&&k.list;L?e.shortenLabel=function(){for(M=0;M<L.length;M++)if(h(A,{dateTimeLabelFormat:L[M]}),S.attr({text:T.call(A,A)}),S.getBBox().width<i.getSlotWidth(e)-2*(f.padding||0))return;S.attr({text:""})}:e.shortenLabel=void 0,b&&i._addedPlotLB&&e.moveLabel(P,f),a(S)||e.movedLabel?S&&S.textStr!==P&&!b&&(!S.textWidth||f.style.width||S.styles.width||S.css({width:null}),S.attr({text:P}),S.textPxLength=S.getBBox().width):(e.label=S=e.createLabel(P,f),e.rotation=0)}createLabel(t,e,i){let s=this.axis,r=s.chart,o=a(t)&&e.enabled?r.renderer.text(t,i?.x,i?.y,e.useHTML).add(s.labelGroup):void 0;return o&&(r.styledMode||o.css(c(e.style)),o.textPxLength=o.getBBox().width),o}destroy(){n(this,this.axis)}
23499getPosition(t,e,i,s){let a=this.axis,n=a.chart,h=s&&n.oldChartHeight||n.chartHeight,d={x:t?o(a.translate(e+i,void 0,void 0,s)+a.transB):a.left+a.offset+(a.opposite?(s&&n.oldChartWidth||n.chartWidth)-a.right-a.left:0),y:t?h-a.bottom+a.offset-(a.opposite?a.height:0):o(h-a.translate(e+i,void 0,void 0,s)-a.transB)};return d.y=r(d.y,-1e5,1e5),l(this,"afterGetPosition",{pos:d}),d}getLabelPosition(t,e,i,r,o,n,h,d){let c,p;let g=this.axis,f=g.transA,m=g.isLinked&&g.linkedParent?g.linkedParent.reversed:g.reversed,x=g.staggerLines,y=g.tickRotCorr||{x:0,y:0},b=r||g.reserveSpaceDefault?0:-g.labelOffset*("center"===g.labelAlign?.5:1),v=o.distance,S={};return c=0===g.side?i.rotation?-v:-i.getBBox().height:2===g.side?y.y+v:Math.cos(i.rotation*s)*(y.y-i.getBBox(!1,0).height/2),a(o.y)&&(c=0===g.side&&g.horiz?o.y+c:o.y),t=t+u(o.x,[0,1,0,-1][g.side]*v)+b+y.x-(n&&r?n*f*(m?-1:1):0),e=e+c-(n&&!r?n*f*(m?1:-1):0),x&&(p=h/(d||1)%x,g.opposite&&(p=x-p-1),e+=g.labelOffset/x*p),S.x=t,S.y=Math.round(e),l(this,"afterGetLabelPosition",{pos:S,tickmarkOffset:n,index:h}),S}getLabelSize(){return this.label?this.label.getBBox()[this.axis.horiz?"height":"width"]:0}getMarkPath(t,e,i,s,r=!1,o){return o.crispLine([["M",t,e],["L",t+(r?0:-i),e+(r?i:0)]],s)}handleOverflow(t){let e=this.axis,i=e.options.labels,r=t.x,o=e.chart.chartWidth,a=e.chart.spacing,n=u(e.labelLeft,Math.min(e.pos,a[3])),h=u(e.labelRight,Math.max(e.isRadial?0:e.pos+e.len,o-a[1])),l=this.label,d=this.rotation,c={left:0,center:.5,right:1}[e.labelAlign||l.attr("align")],p=l.getBBox().width,g=e.getSlotWidth(this),f={},m=g,x=1,y,b,v;d||"justify"!==i.overflow?d<0&&r-c*p<n?v=Math.round(r/Math.cos(d*s)-n):d>0&&r+c*p>h&&(v=Math.round((o-r)/Math.cos(d*s))):(y=r-c*p,b=r+(1-c)*p,y<n?m=t.x+m*(1-c)-n:b>h&&(m=h-t.x+m*c,x=-1),(m=Math.min(g,m))<g&&"center"===e.labelAlign&&(t.x+=x*(g-m-c*(g-Math.min(p,m)))),(p>m||e.autoRotation&&(l.styles||{}).width)&&(v=m)),v&&(this.shortenLabel?this.shortenLabel():(f.width=Math.floor(v)+"px",(i.style||{}).textOverflow||(f.textOverflow="ellipsis"),l.css(f)))}moveLabel(t,e){let i=this,s=i.label,r=i.axis,o=!1,a;s&&s.textStr===t?(i.movedLabel=s,o=!0,delete i.label):p(r.ticks,function(e){o||e.isNew||e===i||!e.label||e.label.textStr!==t||(i.movedLabel=e.label,o=!0,e.labelPos=i.movedLabel.xy,delete e.label)}),!o&&(i.labelPos||s)&&(a=i.labelPos||s.xy,i.movedLabel=i.createLabel(t,e,a),i.movedLabel&&i.movedLabel.attr({opacity:0}))}render(t,e,i){let s=this.axis,r=s.horiz,a=this.pos,n=u(this.tickmarkOffset,s.tickmarkOffset),h=this.getPosition(r,a,n,e),d=h.x,c=h.y,p=s.pos,g=p+s.len,f=r?d:c;!s.chart.polar&&this.isNew&&(o(f)<p||f>g)&&(i=0);let m=u(i,this.label&&this.label.newOpacity,1);i=u(i,1),this.isActive=!0,this.renderGridLine(e,i),this.renderMark(h,i),this.renderLabel(h,e,m,t),this.isNew=!1,l(this,"afterRender")}renderGridLine(t,e){let i=this.axis,s=i.options,r={},o=this.pos,a=this.type,n=u(this.tickmarkOffset,i.tickmarkOffset),h=i.chart.renderer,l=this.gridLine,d,c=s.gridLineWidth,p=s.gridLineColor,g=s.gridLineDashStyle;"minor"===this.type&&(c=s.minorGridLineWidth,p=s.minorGridLineColor,g=s.minorGridLineDashStyle),l||(i.chart.styledMode||(r.stroke=p,r["stroke-width"]=c||0,r.dashstyle=g),a||(r.zIndex=1),t&&(e=0),this.gridLine=l=h.path().attr(r).addClass("highcharts-"+(a?a+"-":"")+"grid-line").add(i.gridGroup)),l&&(d=i.getPlotLinePath({value:o+n,lineWidth:l.strokeWidth(),force:"pass",old:t,acrossPanes:!1}))&&l[t||this.isNew?"attr":"animate"]({d:d,opacity:e})}renderMark(t,e){let i=this.axis,s=i.options,r=i.chart.renderer,o=this.type,a=i.tickSize(o?o+"Tick":"tick"),n=t.x,h=t.y,l=u(s["minor"!==o?"tickWidth":"minorTickWidth"],!o&&i.isXAxis?1:0),d=s["minor"!==o?"tickColor":"minorTickColor"],c=this.mark,p=!c;a&&(i.opposite&&(a[0]=-a[0]),c||(this.mark=c=r.path().addClass("highcharts-"+(o?o+"-":"")+"tick").add(i.axisGroup),i.chart.styledMode||c.attr({stroke:d,"stroke-width":l})),c[p?"attr":"animate"]({d:this.getMarkPath(n,h,a[0],c.strokeWidth(),i.horiz,r),opacity:e}))}renderLabel(t,e,i,s){let r=this.axis,o=r.horiz,a=r.options,n=this.label,h=a.labels,l=h.step,c=u(this.tickmarkOffset,r.tickmarkOffset),p=t.x,g=t.y,f=!0;n&&d(p)&&(n.xy=t=this.getLabelPosition(p,g,n,o,h,c,s,l),(!this.isFirst||this.isLast||a.showFirstLabel)&&(!this.isLast||this.isFirst||a.showLastLabel)?!o||h.step||h.rotation||e||0===i||this.handleOverflow(t):f=!1,l&&s%l&&(f=!1),f&&d(t.y)?(t.opacity=i,n[this.isNewLabel?"attr":"animate"](t).show(!0),this.isNewLabel=!1):(n.hide(),this.isNewLabel=!0))}replaceMovedLabel(){let t=this.label,e=this.axis;t&&!this.isNew&&(t.animate({opacity:0}
23499,void 0,t.destroy),delete this.label),e.isDirty=!0,this.label=this.movedLabel,delete this.movedLabel}}}),i(e,"Core/Axis/Axis.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Axis/AxisDefaults.js"],e["Core/Color/Color.js"],e["Core/Defaults.js"],e["Core/Foundation.js"],e["Core/Globals.js"],e["Core/Axis/Tick.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n){let{animObject:h}=t,{xAxis:l,yAxis:d}=e,{defaultOptions:c}=s,{registerEventOptions:p}=r,{deg2rad:u}=o,{arrayMax:g,arrayMin:f,clamp:m,correctFloat:x,defined:y,destroyObjectProperties:b,erase:v,error:S,extend:C,fireEvent:k,getClosestDistance:M,insertItem:w,isArray:A,isNumber:T,isString:P,merge:L,normalizeTickInterval:O,objectEach:D,pick:E,relativeLength:I,removeEvent:j,splat:B,syncTimeout:R}=n,z=(t,e)=>O(e,void 0,void 0,E(t.options.allowDecimals,e<.5||void 0!==t.tickAmount),!!t.tickAmount);C(c,{xAxis:l,yAxis:L(l,d)});class N{constructor(t,e,i){this.init(t,e,i)}init(t,e,i=this.coll){let s="xAxis"===i,r=this.isZAxis||(t.inverted?!s:s);this.chart=t,this.horiz=r,this.isXAxis=s,this.coll=i,k(this,"init",{userOptions:e}),this.opposite=E(e.opposite,this.opposite),this.side=E(e.side,this.side,r?this.opposite?0:2:this.opposite?1:3),this.setOptions(e);let o=this.options,a=o.labels,n=o.type;this.userOptions=e,this.minPixelPadding=0,this.reversed=E(o.reversed,this.reversed),this.visible=o.visible,this.zoomEnabled=o.zoomEnabled,this.hasNames="category"===n||!0===o.categories,this.categories=A(o.categories)&&o.categories||(this.hasNames?[]:void 0),this.names||(this.names=[],this.names.keys={}),this.plotLinesAndBandsGroups={},this.positiveValuesOnly=!!this.logarithmic,this.isLinked=y(o.linkedTo),this.ticks={},this.labelEdge=[],this.minorTicks={},this.plotLinesAndBands=[],this.alternateBands={},this.len??(this.len=0),this.minRange=this.userMinRange=o.minRange||o.maxZoom,this.range=o.range,this.offset=o.offset||0,this.max=void 0,this.min=void 0;let h=E(o.crosshair,B(t.options.tooltip.crosshairs)[s?0:1]);this.crosshair=!0===h?{}:h,-1===t.axes.indexOf(this)&&(s?t.axes.splice(t.xAxis.length,0,this):t.axes.push(this),w(this,t[this.coll])),t.orderItems(this.coll),this.series=this.series||[],t.inverted&&!this.isZAxis&&s&&!y(this.reversed)&&(this.reversed=!0),this.labelRotation=T(a.rotation)?a.rotation:void 0,p(this,o),k(this,"afterInit")}setOptions(t){let e=this.horiz?{labels:{autoRotation:[-45],padding:4},margin:15}:{labels:{padding:1},title:{rotation:90*this.side}};this.options=L(e,c[this.coll],t),k(this,"afterSetOptions",{userOptions:t})}defaultLabelFormatter(){let t=this.axis,{numberFormatter:e}=this.chart,i=T(this.value)?this.value:NaN,s=t.chart.time,r=t.categories,o=this.dateTimeLabelFormat,a=c.lang,n=a.numericSymbols,h=a.numericSymbolMagnitude||1e3,l=t.logarithmic?Math.abs(i):t.tickInterval,d=n&&n.length,p,u;if(r)u=`${this.value}`;else if(o)u=s.dateFormat(o,i);else if(d&&n&&l>=1e3)for(;d--&&void 0===u;)l>=(p=Math.pow(h,d+1))&&10*i%p==0&&null!==n[d]&&0!==i&&(u=e(i/p,-1)+n[d]);return void 0===u&&(u=Math.abs(i)>=1e4?e(i,-1):e(i,-1,void 0,"")),u}getSeriesExtremes(){let t;let e=this;k(this,"getSeriesExtremes",null,function(){e.hasVisibleSeries=!1,e.dataMin=e.dataMax=e.threshold=void 0,e.softThreshold=!e.isXAxis,e.series.forEach(i=>{if(i.reserveSpace()){let s=i.options,r,o=s.threshold,a,n;if(e.hasVisibleSeries=!0,e.positiveValuesOnly&&0>=(o||0)&&(o=void 0),e.isXAxis)(r=i.xData)&&r.length&&(r=e.logarithmic?r.filter(t=>t>0):r,a=(t=i.getXExtremes(r)).min,n=t.max,T(a)||a instanceof Date||(r=r.filter(T),a=(t=i.getXExtremes(r)).min,n=t.max),r.length&&(e.dataMin=Math.min(E(e.dataMin,a),a),e.dataMax=Math.max(E(e.dataMax,n),n)));else{let t=i.applyExtremes();T(t.dataMin)&&(a=t.dataMin,e.dataMin=Math.min(E(e.dataMin,a),a)),T(t.dataMax)&&(n=t.dataMax,e.dataMax=Math.max(E(e.dataMax,n),n)),y(o)&&(e.threshold=o),(!s.softThreshold||e.positiveValuesOnly)&&(e.softThreshold=!1)}}})}),k(this,"afterGetSeriesExtremes")}translate(t,e,i,s,r,o){let a=this.linkedParent||this,n=s&&a.old?a.old.min:a.min;if(!T(n))return NaN;let h=a.minPixelPadding,l=(a.isOrdinal||a.brokenAxis?.hasBreaks||a.logarithmic&&r)&&a.lin2val,d=1,c=0,p=s&&a.old?a.old.transA:a.transA,u=0;return p||(p=a.transA),i&&(d*=-1,c=a.len),a.reversed&&(d*=-1,c-=d*(a.sector||a.len)),e?(u=(t=t*d+c-h)/p+n,l&&(u=a.lin2val(u))):(l&&(t=a.val2lin(t)),u=d*(t-n)*p+c+d*h+(T(o)?p*o:0),a.isRadial||(u=x(u))),u}toPixels(t,e){return this.translate(t,!1,!this.horiz,void 0,!0)+(e?0:this.pos)}toValue(t,e){return this.translate(t-(e?0:this.pos),!0,!this.horiz,void 0,!0)}getPlotLinePath(t){let e=this,i=e.chart,s=e.left,r=e.top,o=t.old,a=t.value,n=t.lineWidth,h=o&&i.oldCh
23499artHeight||i.chartHeight,l=o&&i.oldChartWidth||i.chartWidth,d=e.transB,c=t.translatedValue,p=t.force,u,g,f,x,y;function b(t,e,i){return"pass"!==p&&(t<e||t>i)&&(p?t=m(t,e,i):y=!0),t}let v={value:a,lineWidth:n,old:o,force:p,acrossPanes:t.acrossPanes,translatedValue:c};return k(this,"getPlotLinePath",v,function(t){u=f=(c=m(c=E(c,e.translate(a,void 0,void 0,o)),-1e5,1e5))+d,g=x=h-c-d,T(c)?e.horiz?(g=r,x=h-e.bottom+(i.scrollablePixelsY||0),u=f=b(u,s,s+e.width)):(u=s,f=l-e.right+(i.scrollablePixelsX||0),g=x=b(g,r,r+e.height)):(y=!0,p=!1),t.path=y&&!p?void 0:i.renderer.crispLine([["M",u,g],["L",f,x]],n||1)}),v.path}getLinearTickPositions(t,e,i){let s,r,o;let a=x(Math.floor(e/t)*t),n=x(Math.ceil(i/t)*t),h=[];if(x(a+t)===a&&(o=20),this.single)return[e];for(s=a;s<=n&&(h.push(s),(s=x(s+t,o))!==r);)r=s;return h}getMinorTickInterval(){let{minorTicks:t,minorTickInterval:e}=this.options;return!0===t?E(e,"auto"):!1!==t?e:void 0}getMinorTickPositions(){let t=this.options,e=this.tickPositions,i=this.minorTickInterval,s=this.pointRangePadding||0,r=(this.min||0)-s,o=(this.max||0)+s,a=o-r,n=[],h;if(a&&a/i<this.len/3){let s=this.logarithmic;if(s)this.paddedTicks.forEach(function(t,e,r){e&&n.push.apply(n,s.getLogTickPositions(i,r[e-1],r[e],!0))});else if(this.dateTime&&"auto"===this.getMinorTickInterval())n=n.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(i),r,o,t.startOfWeek));else for(h=r+(e[0]-r)%i;h<=o&&h!==n[0];h+=i)n.push(h)}return 0!==n.length&&this.trimTicks(n),n}adjustForMinRange(){let t=this.options,e=this.logarithmic,{max:i,min:s,minRange:r}=this,o,a,n,h;this.isXAxis&&void 0===r&&!e&&(r=y(t.min)||y(t.max)||y(t.floor)||y(t.ceiling)?null:Math.min(5*(M(this.series.map(t=>(t.xIncrement?t.xData?.slice(0,2):t.xData)||[]))||0),this.dataMax-this.dataMin)),T(i)&&T(s)&&T(r)&&i-s<r&&(a=this.dataMax-this.dataMin>=r,o=(r-i+s)/2,n=[s-o,E(t.min,s-o)],a&&(n[2]=e?e.log2lin(this.dataMin):this.dataMin),h=[(s=g(n))+r,E(t.max,s+r)],a&&(h[2]=e?e.log2lin(this.dataMax):this.dataMax),(i=f(h))-s<r&&(n[0]=i-r,n[1]=E(t.min,i-r),s=g(n))),this.minRange=r,this.min=s,this.max=i}getClosest(){let t,e;if(this.categories)e=1;else{let i=[];this.series.forEach(function(t){let s=t.closestPointRange;t.xData?.length===1?i.push(t.xData[0]):!t.noSharedTooltip&&y(s)&&t.reserveSpace()&&(e=y(e)?Math.min(e,s):s)}),i.length&&(i.sort((t,e)=>t-e),t=M([i]))}return t&&e?Math.min(t,e):t||e}nameToX(t){let e=A(this.options.categories),i=e?this.categories:this.names,s=t.options.x,r;return t.series.requireSorting=!1,y(s)||(s=this.options.uniqueNames&&i?e?i.indexOf(t.name):E(i.keys[t.name],-1):t.series.autoIncrement()),-1===s?!e&&i&&(r=i.length):r=s,void 0!==r?(this.names[r]=t.name,this.names.keys[t.name]=r):t.x&&(r=t.x),r}updateNames(){let t=this,e=this.names;e.length>0&&(Object.keys(e.keys).forEach(function(t){delete e.keys[t]}),e.length=0,this.minRange=this.userMinRange,(this.series||[]).forEach(e=>{e.xIncrement=null,(!e.points||e.isDirtyData)&&(t.max=Math.max(t.max,e.xData.length-1),e.processData(),e.generatePoints()),e.data.forEach(function(i,s){let r;i?.options&&void 0!==i.name&&void 0!==(r=t.nameToX(i))&&r!==i.x&&(i.x=r,e.xData[s]=r)})}))}setAxisTranslation(){let t=this,e=t.max-t.min,i=t.linkedParent,s=!!t.categories,r=t.isXAxis,o=t.axisPointRange||0,a,n=0,h=0,l,d=t.transA;(r||s||o)&&(a=t.getClosest(),i?(n=i.minPointOffset,h=i.pointRangePadding):t.series.forEach(function(e){let i=s?1:r?E(e.options.pointRange,a,0):t.axisPointRange||0,l=e.options.pointPlacement;if(o=Math.max(o,i),!t.single||s){let t=e.is("xrange")?!r:r;n=Math.max(n,t&&P(l)?0:i/2),h=Math.max(h,t&&"on"===l?0:i)}}),l=t.ordinal&&t.ordinal.slope&&a?t.ordinal.slope/a:1,t.minPointOffset=n*=l,t.pointRangePadding=h*=l,t.pointRange=Math.min(o,t.single&&s?1:e),r&&a&&(t.closestPointRange=a)),t.translationSlope=t.transA=d=t.staticScale||t.len/(e+h||1),t.transB=t.horiz?t.left:t.bottom,t.minPixelPadding=d*n,k(this,"afterSetAxisTranslation")}minFromRange(){let{max:t,min:e}=this;return T(t)&&T(e)&&t-e||void 0}setTickInterval(t){let{categories:e,chart:i,dataMax:s,dataMin:r,dateTime:o,isXAxis:a,logarithmic:n,options:h,softThreshold:l}=this,d=T(this.threshold)?this.threshold:void 0,c=this.minRange||0,{ceiling:p,floor:u,linkedTo:g,softMax:f,softMin:m}=h,b=T(g)&&i[this.coll]?.[g],v=h.tickPixelInterval,C=h.maxPadding,M=h.minPadding,w=0,A,P=T(h.tickInterval)&&h.tickInterval>=0?h.tickInterval:void 0,L,O,D,I;if(o||e||b||this.getTickAmount(),D=E(this.userMin,h.min),I=E(this.userMax,h.max),b?(this.linkedParent=b,A=b.getExtremes(),this.min=E(A.min,A.dataMin),this.max=E(A.max,A.dataMax),h.type!==b.options.type&&S(11,!0,i)):(l&&y(d)&&T(s)&&T(r)&&(r>=d?(L=d,M=0):s<=d&&(O=d,C=0)),this.min=E(D,L,r),this.max=E(I,O,s)),T(this.max)&&T(this.min)&&(n&&(this.positiveValuesOnly&&!t&&0>=Math.min(this.min,E(r,this.min))&&S(10,!0,i),this.min=x(n.log2lin(this.min),16),this.max=x(n.log2lin(this.max),16)),this.range&&T(r)&&(this.userMin=this.min=D=Math.max(r,this.minFromRange()||0),this.userMax=I=this.max,this.range=void 0)),k(this,"foundExtremes"),this.adjustForMinRange(),T(this.min)&&T(this.max)){if(!T(this.userMin)&&T(m)&&m<this.min&&(this.min=D=m),!T(this.userMax)&&T(f)&&f>this.max&&(this.max=I=f),e||this.axisPointRange||this.stacking?.usePercentage||b||!(w=this.max-this.min)||(!y(D)&&M&&(this.min-=w*M),y(I)||!C||(this.max+=w*C)),!T(this.userMin)&&T(u)&&(this.min=Math.max(this.min,u)),!T(this.userMax)&&T(p)&&(this.max=Math.min(this.max,p)),l&&T(r)&&T(s)){let t=d||0;!y(D)&&this.min<t&&r>=t?this.min=h.minRange?Math.min(t,this.max-c):t:!y(I)&&this.max>t&&s<=t&&(this.max=h.minRange?Math.max(t,this.min+c):t)}!i.polar&&this.min>this.max&&(y(h.min)?this.max=this.min:y(h.max)&&(this.min=this.max)),w=this.max-this.min}if(this.min!==this.max&&T(this.min)&&T(this.max)?b&&!P&&v===b.options.tickPixelInterval?this.tickInterval=P=b.tickInterval:this.tickInterval=E(P,this.tickAmount?w/Math.max(this.tickAmount-1,1):void 0,e?1:w*v/Math.max(this.len,v)):this.tickInterval=1,a&&!t){let t=this.min!==this.old?.min||this.max!==this.old?.max;
vendor: 4,585 bytes, line 23499
23499this.series.forEach(function(e){e.forceCrop=e.forceCropping?.(),e.processData(t)}),k(this,"postProcessData",{hasExtremesChanged:t})}this.setAxisTranslation(),k(this,"initialAxisTranslation"),this.pointRange&&!P&&(this.tickInterval=Math.max(this.pointRange,this.tickInterval));let j=E(h.minTickInterval,o&&!this.series.some(t=>t.noSharedTooltip)?this.closestPointRange:0);!P&&this.tickInterval<j&&(this.tickInterval=j),o||n||P||(this.tickInterval=z(this,this.tickInterval)),this.tickAmount||(this.tickInterval=this.unsquish()),this.setTickPositions()}setTickPositions(){let t=this.options,e=t.tickPositions,i=t.tickPositioner,s=this.getMinorTickInterval(),r=!this.isPanning,o=r&&t.startOnTick,a=r&&t.endOnTick,n=[],h;if(this.tickmarkOffset=this.categories&&"between"===t.tickmarkPlacement&&1===this.tickInterval?.5:0,this.minorTickInterval="auto"===s&&this.tickInterval?this.tickInterval/t.minorTicksPerMajor:s,this.single=this.min===this.max&&y(this.min)&&!this.tickAmount&&(this.min%1==0||!1!==t.allowDecimals),e)n=e.slice();else if(T(this.min)&&T(this.max)){if(!this.ordinal?.positions&&(this.max-this.min)/this.tickInterval>Math.max(2*this.len,200))n=[this.min,this.max],S(19,!1,this.chart);else if(this.dateTime)n=this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval,t.units),this.min,this.max,t.startOfWeek,this.ordinal?.positions,this.closestPointRange,!0);else if(this.logarithmic)n=this.logarithmic.getLogTickPositions(this.tickInterval,this.min,this.max);else{let t=this.tickInterval,e=t;for(;e<=2*t;)if(n=this.getLinearTickPositions(this.tickInterval,this.min,this.max),this.tickAmount&&n.length>this.tickAmount)this.tickInterval=z(this,e*=1.1);else break}n.length>this.len&&(n=[n[0],n[n.length-1]])[0]===n[1]&&(n.length=1),i&&(this.tickPositions=n,(h=i.apply(this,[this.min,this.max]))&&(n=h))}this.tickPositions=n,this.paddedTicks=n.slice(0),this.trimTicks(n,o,a),!this.isLinked&&T(this.min)&&T(this.max)&&(this.single&&n.length<2&&!this.categories&&!this.series.some(t=>t.is("heatmap")&&"between"===t.options.pointPlacement)&&(this.min-=.5,this.max+=.5),e||h||this.adjustTickAmount()),k(this,"afterSetTickPositions")}trimTicks(t,e,i){let s=t[0],r=t[t.length-1],o=!this.isOrdinal&&this.minPointOffset||0;if(k(this,"trimTicks"),!this.isLinked){if(e&&s!==-1/0)this.min=s;else for(;this.min-o>t[0];)t.shift();if(i)this.max=r;else for(;this.max+o<t[t.length-1];)t.pop();0===t.length&&y(s)&&!this.options.tickPositions&&t.push((r+s)/2)}}alignToOthers(){let t;let e=this,i=e.chart,s=[this],r=e.options,o=i.options.chart,a="yAxis"===this.coll&&o.alignThresholds,n=[];if(e.thresholdAlignment=void 0,(!1!==o.alignTicks&&r.alignTicks||a)&&!1!==r.startOnTick&&!1!==r.endOnTick&&!e.logarithmic){let r=t=>{let{horiz:e,options:i}=t;return[e?i.left:i.top,i.width,i.height,i.pane].join(",")},o=r(this);i[this.coll].forEach(function(i){let{series:a}=i;a.length&&a.some(t=>t.visible)&&i!==e&&r(i)===o&&(t=!0,s.push(i))})}if(t&&a){s.forEach(t=>{let i=t.getThresholdAlignment(e);T(i)&&n.push(i)});let t=n.length>1?n.reduce((t,e)=>t+=e,0)/n.length:void 0;s.forEach(e=>{e.thresholdAlignment=t})}return t}getThresholdAlignment(t){if((!T(this.dataMin)||this!==t&&this.series.some(t=>t.isDirty||t.isDirtyData))&&this.getSeriesExtremes(),T(this.threshold)){let t=m((this.threshold-(this.dataMin||0))/((this.dataMax||0)-(this.dataMin||0)),0,1);return this.options.reversed&&(t=1-t),t}}getTickAmount(){let t=this.options,e=t.tickPixelInterval,i=t.tickAmount;y(t.tickInterval)||i||!(this.len<e)||this.isRadial||this.logarithmic||!t.startOnTick||!t.endOnTick||(i=2),!i&&this.alignToOthers()&&(i=Math.ceil(this.len/e)+1),i<4&&(this.finalTickAmt=i,i=5),this.tickAmount=i}adjustTickAmount(){let t=this,{finalTickAmt:e,max:i,min:s,options:r,tickPositions:o,tickAmount:a,thresholdAlignment:n}=t,h=o?.length,l=E(t.threshold,t.softThreshold?0:null),d,c,p=t.tickInterval,u,g=()=>o.push(x(o[o.length-1]+p)),f=()=>o.unshift(x(o[0]-p));if(T(n)&&(u=n<.5?Math.ceil(n*(a-1)):Math.floor(n*(a-1)),r.reversed&&(u=a-1-u)),t.hasData()&&T(s)&&T(i)){let n=()=>{t.transA*=(h-1)/(a-1),t.min=r.startOnTick?o[0]:Math.min(s,o[0]),t.max=r.endOnTick?o[o.length-1]:Math.max(i,o[o.length-1])};if(T(u)&&T(t.threshold)){for(;o[u]!==l||o.length!==a||o[0]>s||o[o.length-1]<i;){for(o.length=0,o.push(t.threshold);o.length<a;)void 0===o[u]||o[u]>t.threshold?f():g();if(p>8*t.tickInterval)break;p*=2}n()}else if(h<a){for(;o.length<a;)o.length%2||s===l?g():f();n()}if(y(e)){for(c=d=o.length;c--;)(3===e&&c%2==1||e<=2&&c>0&&c<d-1)&&o.splice(c,1);t.finalTickAmt=void 0}}}setScale(){let{coll:t,stacking:e}=this,i=!1,s=!1;
23499this.series.forEach(t=>{i=i||t.isDirtyData||t.isDirty,s=s||t.xAxis&&t.xAxis.isDirty||!1}),this.setAxisSize();let r=this.len!==(this.old&&this.old.len);r||i||s||this.isLinked||this.forceRedraw||this.userMin!==(this.old&&this.old.userMin)||this.userMax!==(this.old&&this.old.userMax)||this.alignToOthers()?(e&&"yAxis"===t&&e.buildStacks(),this.forceRedraw=!1,this.userMinRange||(this.minRange=void 0),this.getSeriesExtremes(),this.setTickInterval(),e&&"xAxis"===t&&e.buildStacks(),this.isDirty||(this.isDirty=r||this.min!==this.old?.min||this.max!==this.old?.max)):e&&e.cleanStacks(),i&&delete this.allExtremes,k(this,"afterSetScale")}setExtremes(t,e,i=!0,s,r){this.series.forEach(t=>{delete t.kdTree}),k(this,"setExtremes",r=C(r,{min:t,max:e}),t=>{this.userMin=t.min,this.userMax=t.max,this.eventArgs=t,i&&this.chart.redraw(s)})}setAxisSize(){let t=this.chart,e=this.options,i=e.offsets||[0,0,0,0],s=this.horiz,r=this.width=Math.round(I(E(e.width,t.plotWidth-i[3]+i[1]),t.plotWidth)),o=this.height=Math.round(I(E(e.height,t.plotHeight-i[0]+i[2]),t.plotHeight)),a=this.top=Math.round(I(E(e.top,t.plotTop+i[0]),t.plotHeight,t.plotTop)),n=this.left=Math.round(I(E(e.left,t.plotLeft+i[3]),t.plotWidth,t.plotLeft));this.bottom=t.chartHeight-o-a,this.right=t.chartWidth-r-n,this.len=Math.max(s?r:o,0),this.pos=s?n:a}getExtremes(){let t=this.logarithmic;return{min:t?x(t.lin2log(this.min)):this.min,max:t?x(t.lin2log(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}}getThreshold(t){let e=this.logarithmic,i=e?e.lin2log(this.min):this.min,s=e?e.lin2log(this.max):this.max;return null===t||t===-1/0?t=i:t===1/0?t=s:i>t?t=i:s<t&&(t=s),this.translate(t,0,1,0,1)}autoLabelAlign(t){let e=(E(t,0)-90*this.side+720)%360,i={align:"center"};return k(this,"autoLabelAlign",i,function(t){e>15&&e<165?t.align="right":e>195&&e<345&&(t.align="left")}),i.align}tickSize(t){let e=this.options,i=E(e["tick"===t?"tickWidth":"minorTickWidth"],"tick"===t&&this.isXAxis&&!this.categories?1:0),s=e["tick"===t?"tickLength":"minorTickLength"],r;i&&s&&("inside"===e[t+"Position"]&&(s=-s),r=[s,i]);let o={tickSize:r};return k(this,"afterTickSize",o),o.tickSize}labelMetrics(){let t=this.chart.renderer,e=this.ticks,i=e[Object.keys(e)[0]]||{};return this.chart.renderer.fontMetrics(i.label||i.movedLabel||t.box)}unsquish(){let t=this.options.labels,e=t.padding||0,i=this.horiz,s=this.tickInterval,r=this.len/(((this.categories?1:0)+this.max-this.min)/s),o=t.rotation,a=x(.8*this.labelMetrics().h),n=Math.max(this.max-this.min,0),h=function(t){let i=(t+2*e)/(r||1);return(i=i>1?Math.ceil(i):1)*s>n&&t!==1/0&&r!==1/0&&n&&(i=Math.ceil(n/s)),x(i*s)},l=s,d,c=Number.MAX_VALUE,p;if(i){if(!t.staggerLines&&(T(o)?p=[o]:r<t.autoRotationLimit&&(p=t.autoRotation)),p){let t,e;for(let i of p)(i===o||i&&i>=-90&&i<=90)&&(e=(t=h(Math.abs(a/Math.sin(u*i))))+Math.abs(i/360))<c&&(c=e,d=i,l=t)}}else l=h(.75*a);return this.autoRotation=p,this.labelRotation=E(d,T(o)?o:0),t.step?s:l}getSlotWidth(t){let e=this.chart,i=this.horiz,s=this.options.labels,r=Math.max(this.tickPositions.length-(this.categories?0:1),1),o=e.margin[3];if(t&&T(t.slotWidth))return t.slotWidth;if(i&&s.step<2)return s.rotation?0:(this.staggerLines||1)*this.len/r;if(!i){let t=s.style.width;if(void 0!==t)return parseInt(String(t),10);if(o)return o-e.spacing[3]}return .33*e.chartWidth}renderUnsquish(){let t=this.chart,e=t.renderer,i=this.tickPositions,s=this.ticks,r=this.options.labels,o=r.style,a=this.horiz,n=this.getSlotWidth(),h=Math.max(1,Math.round(n-(a?2*(r.padding||0):r.distance||0))),l={},d=this.labelMetrics(),c=o.textOverflow,p,u,g=0,f,m;if(P(r.rotation)||(l.rotation=r.rotation||0),i.forEach(function(t){let e=s[t];e.movedLabel&&e.replaceMovedLabel(),e&&e.label&&e.label.textPxLength>g&&(g=e.label.textPxLength)}),this.maxLabelLength=g,this.autoRotation)g>h&&g>d.h?l.rotation=this.labelRotation:this.labelRotation=0;else if(n&&(p=h,!c))for(u="clip",m=i.length;!a&&m--;)(f=s[i[m]].label)&&("ellipsis"===f.styles.textOverflow?f.css({textOverflow:"clip"}):f.textPxLength>n&&f.css({width:n+"px"}),f.getBBox().height>this.len/i.length-(d.h-d.f)&&(f.specificTextOverflow="ellipsis"));l.rotation&&(p=g>.5*t.chartHeight?.33*t.chartHeight:g,c||(u="ellipsis")),this.labelAlign=r.align||this.autoLabelAlign(this.labelRotation),this.labelAlign&&(l.align=this.labelAlign),i.forEac
23499h(function(t){let e=s[t],i=e&&e.label,r=o.width,a={};i&&(i.attr(l),e.shortenLabel?e.shortenLabel():p&&!r&&"nowrap"!==o.whiteSpace&&(p<i.textPxLength||"SPAN"===i.element.tagName)?(a.width=p+"px",c||(a.textOverflow=i.specificTextOverflow||u),i.css(a)):!i.styles.width||a.width||r||i.css({width:null}),delete i.specificTextOverflow,e.rotation=l.rotation)},this),this.tickRotCorr=e.rotCorr(d.b,this.labelRotation||0,0!==this.side)}hasData(){return this.series.some(function(t){return t.hasData()})||this.options.showEmpty&&y(this.min)&&y(this.max)}addTitle(t){let e;let i=this.chart.renderer,s=this.horiz,r=this.opposite,o=this.options.title,a=this.chart.styledMode;this.axisTitle||((e=o.textAlign)||(e=(s?{low:"left",middle:"center",high:"right"}:{low:r?"right":"left",middle:"center",high:r?"left":"right"})[o.align]),this.axisTitle=i.text(o.text||"",0,0,o.useHTML).attr({zIndex:7,rotation:o.rotation||0,align:e}).addClass("highcharts-axis-title"),a||this.axisTitle.css(L(o.style)),this.axisTitle.add(this.axisGroup),this.axisTitle.isNew=!0),a||o.style.width||this.isRadial||this.axisTitle.css({width:this.len+"px"}),this.axisTitle[t?"show":"hide"](t)}generateTick(t){let e=this.ticks;e[t]?e[t].addLabel():e[t]=new a(this,t)}createGroups(){let{axisParent:t,chart:e,coll:i,options:s}=this,r=e.renderer,o=(e,o,a)=>r.g(e).attr({zIndex:a}).addClass(`highcharts-${i.toLowerCase()}${o} `+(this.isRadial?`highcharts-radial-axis${o} `:"")+(s.className||"")).add(t);this.axisGroup||(this.gridGroup=o("grid","-grid",s.gridZIndex),this.axisGroup=o("axis","",s.zIndex),this.labelGroup=o("axis-labels","-labels",s.labels.zIndex))}getOffset(){let t=this,{chart:e,horiz:i,options:s,side:r,ticks:o,tickPositions:a,coll:n}=t,h=e.inverted&&!t.isZAxis?[1,0,3,2][r]:r,l=t.hasData(),d=s.title,c=s.labels,p=T(s.crossing),u=e.axisOffset,g=e.clipOffset,f=[-1,1,1,-1][r],m,x=0,b,v=0,S=0,C,M;if(t.showAxis=m=l||s.showEmpty,t.staggerLines=t.horiz&&c.staggerLines||void 0,t.createGroups(),l||t.isLinked?(a.forEach(function(e){t.generateTick(e)}),t.renderUnsquish(),t.reserveSpaceDefault=0===r||2===r||({1:"left",3:"right"})[r]===t.labelAlign,E(c.reserveSpace,!p&&null,"center"===t.labelAlign||null,t.reserveSpaceDefault)&&a.forEach(function(t){S=Math.max(o[t].getLabelSize(),S)}),t.staggerLines&&(S*=t.staggerLines),t.labelOffset=S*(t.opposite?-1:1)):D(o,function(t,e){t.destroy(),delete o[e]}),d?.text&&!1!==d.enabled&&(t.addTitle(m),m&&!p&&!1!==d.reserveSpace&&(t.titleOffset=x=t.axisTitle.getBBox()[i?"height":"width"],v=y(b=d.offset)?0:E(d.margin,i?5:10))),t.renderLine(),t.offset=f*E(s.offset,u[r]?u[r]+(s.margin||0):0),t.tickRotCorr=t.tickRotCorr||{x:0,y:0},M=0===r?-t.labelMetrics().h:2===r?t.tickRotCorr.y:0,C=Math.abs(S)+v,S&&(C-=M,C+=f*(i?E(c.y,t.tickRotCorr.y+f*c.distance):E(c.x,f*c.distance))),t.axisTitleMargin=E(b,C),t.getMaxLabelDimensions&&(t.maxLabelDimensions=t.getMaxLabelDimensions(o,a)),"colorAxis"!==n&&g){let e=this.tickSize("tick");u[r]=Math.max(u[r],(t.axisTitleMargin||0)+x+f*t.offset,C,a&&a.length&&e?e[0]+f*t.offset:0);let i=!t.axisLine||s.offset?0:t.axisLine.strokeWidth()/2;g[h]=Math.max(g[h],i)}k(this,"afterGetOffset")}getLinePath(t){let e=this.chart,i=this.opposite,s=this.offset,r=this.horiz,o=this.left+(i?this.width:0)+s,a=e.chartHeight-this.bottom-(i?this.height:0)+s;return i&&(t*=-1),e.renderer.crispLine([["M",r?this.left:o,r?a:this.top],["L",r?e.chartWidth-this.right:o,r?a:e.chartHeight-this.bottom]],t)}renderLine(){this.axisLine||(this.axisLine=this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup),this.chart.styledMode||this.axisLine.attr({stroke:this.options.lineColor,"stroke-width":this.options.lineWidth,zIndex:7}))}getTitlePosition(t){let e=this.horiz,i=this.left,s=this.top,r=this.len,o=this.options.title,a=e?i:s,n=this.opposite,h=this.offset,l=o.x,d=o.y,c=this.chart.renderer.fontMetrics(t),p=t?Math.max(t.getBBox(!1,0).height-c.h-1,0):0,u={low:a+(e?0:r),middle:a+r/2,high:a+(e?r:0)}[o.align],g=(e?s+this.height:i)+(e?1:-1)*(n?-1:1)*(this.axisTitleMargin||0)+[-p,p,c.f,-p][this.side],f={x:e?u+l:g+(n?this.width:0)+h+l,y:e?g+d-(n?this.height:0)+h:u+d};return k(this,"afterGetTitlePosition",{titlePosition:f}),f}renderMinorTick(t,e){let i=this.minorTicks;i[t]||(i[t]=new a(this,t,"minor")),e&&i[t].isNew&&i[t].render(null,!0),i[t].render(null,!1,1)}
23499renderTick(t,e,i){let s=this.isLinked,r=this.ticks;(!s||t>=this.min&&t<=this.max||this.grid&&this.grid.isColumn)&&(r[t]||(r[t]=new a(this,t)),i&&r[t].isNew&&r[t].render(e,!0,-1),r[t].render(e))}render(){let t,e;let i=this,s=i.chart,r=i.logarithmic,n=s.renderer,l=i.options,d=i.isLinked,c=i.tickPositions,p=i.axisTitle,u=i.ticks,g=i.minorTicks,f=i.alternateBands,m=l.stackLabels,x=l.alternateGridColor,y=l.crossing,b=i.tickmarkOffset,v=i.axisLine,S=i.showAxis,C=h(n.globalAnimation);if(i.labelEdge.length=0,i.overlap=!1,[u,g,f].forEach(function(t){D(t,function(t){t.isActive=!1})}),T(y)){let t=this.isXAxis?s.yAxis[0]:s.xAxis[0],e=[1,-1,-1,1][this.side];if(t){let s=t.toPixels(y,!0);i.horiz&&(s=t.len-s),i.offset=e*s}}if(i.hasData()||d){let n=i.chart.hasRendered&&i.old&&T(i.old.min);i.minorTickInterval&&!i.categories&&i.getMinorTickPositions().forEach(function(t){i.renderMinorTick(t,n)}),c.length&&(c.forEach(function(t,e){i.renderTick(t,e,n)}),b&&(0===i.min||i.single)&&(u[-1]||(u[-1]=new a(i,-1,null,!0)),u[-1].render(-1))),x&&c.forEach(function(a,n){e=void 0!==c[n+1]?c[n+1]+b:i.max-b,n%2==0&&a<i.max&&e<=i.max+(s.polar?-b:b)&&(f[a]||(f[a]=new o.PlotLineOrBand(i,{}
23499)),t=a+b,f[a].options={from:r?r.lin2log(t):t,to:r?r.lin2log(e):e,color:x,className:"highcharts-alternate-grid"},f[a].render(),f[a].isActive=!0)}),i._addedPlotLB||(i._addedPlotLB=!0,(l.plotLines||[]).concat(l.plotBands||[]).forEach(function(t){i.addPlotBandOrLine(t)}))}[u,g,f].forEach(function(t){let e=[],i=C.duration;D(t,function(t,i){t.isActive||(t.render(i,!1,0),t.isActive=!1,e.push(i))}),R(function(){let i=e.length;for(;i--;)t[e[i]]&&!t[e[i]].isActive&&(t[e[i]].destroy(),delete t[e[i]])},t!==f&&s.hasRendered&&i?i:0)}),v&&(v[v.isPlaced?"animate":"attr"]({d:this.getLinePath(v.strokeWidth())}),v.isPlaced=!0,v[S?"show":"hide"](S)),p&&S&&(p[p.isNew?"attr":"animate"](i.getTitlePosition(p)),p.isNew=!1),m&&m.enabled&&i.stacking&&i.stacking.renderStackTotals(),i.old={len:i.len,max:i.max,min:i.min,transA:i.transA,userMax:i.userMax,userMin:i.userMin},i.isDirty=!1,k(this,"afterRender")}redraw(){this.visible&&(this.render(),this.plotLinesAndBands.forEach(function(t){t.render()})),this.series.forEach(function(t){t.isDirty=!0})}getKeepProps(){return this.keepProps||N.keepProps}destroy(t){let e=this,i=e.plotLinesAndBands,s=this.eventOptions;if(k(this,"destroy",{keepEvents:t}),t||j(e),[e.ticks,e.minorTicks,e.alternateBands].forEach(function(t){b(t)}),i){let t=i.length;for(;t--;)i[t].destroy()}for(let t in["axisLine","axisTitle","axisGroup","gridGroup","labelGroup","cross","scrollbar"].forEach(function(t){e[t]&&(e[t]=e[t].destroy())}),e.plotLinesAndBandsGroups)e.plotLinesAndBandsGroups[t]=e.plotLinesAndBandsGroups[t].destroy();D(e,function(t,i){-1===e.getKeepProps().indexOf(i)&&delete e[i]}),this.eventOptions=s}drawCrosshair(t,e){let s=this.crosshair,r=E(s&&s.snap,!0),o=this.chart,a,n,h,l=this.cross,d;if(k(this,"drawCrosshair",{e:t,point:e}),t||(t=this.cross&&this.cross.e),s&&!1!==(y(e)||!r)){if(r?y(e)&&(n=E("colorAxis"!==this.coll?e.crosshairPos:null,this.isXAxis?e.plotX:this.len-e.plotY)):n=t&&(this.horiz?t.chartX-this.pos:this.len-t.chartY+this.pos),y(n)&&(d={value:e&&(this.isXAxis?e.x:E(e.stackY,e.y)),translatedValue:n},o.polar&&C(d,{isCrosshair:!0,chartX:t&&t.chartX,chartY:t&&t.chartY,point:e}),a=this.getPlotLinePath(d)||null),!y(a)){this.hideCrosshair();return}h=this.categories&&!this.isRadial,l||(this.cross=l=o.renderer.path().addClass("highcharts-crosshair highcharts-crosshair-"+(h?"category ":"thin ")+(s.className||"")).attr({zIndex:E(s.zIndex,2)}).add(),!o.styledMode&&(l.attr({stroke:s.color||(h?i.parse("#ccd3ff").setOpacity(.25).get():"#cccccc"),"stroke-width":E(s.width,1)}).css({"pointer-events":"none"}),s.dashStyle&&l.attr({dashstyle:s.dashStyle}))),l.show().attr({d:a}),h&&!s.width&&l.attr({"stroke-width":this.transA}),this.cross.e=t}else this.hideCrosshair();k(this,"afterDrawCrosshair",{e:t,point:e})}hideCrosshair(){this.cross&&this.cross.hide(),k(this,"afterHideCrosshair")}update(t,e){let i=this.chart;t=L(this.userOptions,t),this.destroy(!0),this.init(i,t),i.isDirtyBox=!0,E(e,!0)&&i.redraw()}remove(t){let e=this.chart,i=this.coll,s=this.series,r=s.length;for(;r--;)s[r]&&s[r].remove(!1);v(e.axes,this),v(e[i]||[],this),e.orderItems(i),this.destroy(),e.isDirtyBox=!0,E(t,!0)&&e.redraw()}setTitle(t,e){this.update({title:t},e)}setCategories(t,e){this.update({categories:t},e)}}return N.keepProps=["coll","extKey","hcEvents","len","names","series","userMax","userMin"],N}),i(e,"Core/Axis/DateTimeAxis.js",[e["Core/Utilities.js"]],function(t){var e;let{addEvent:i,getMagnitude:s,normalizeTickInterval:r,timeUnits:o}=t;return function(t){function e(){return this.chart.time.getTimeTicks.apply(this.chart.time,arguments)}function a(){if("datetime"!==this.options.type){this.dateTime=void 0;return}this.dateTime||(this.dateTime=new n(this))}t.compose=function(t){return t.keepProps.includes("dateTime")||(t.keepProps.push("dateTime"),t.prototype.getTimeTicks=e,i(t,"afterSetOptions",a)),t};class n{constructor(t){this.axis=t}normalizeTimeTickInterval(t,e){let i=e||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]],a=i[i.length-1],n=o[a[0]],h=a[1],l;for(l=0;l<i.length&&(n=o[(a=i[l])[0]],h=a[1],!i[l+1]||!(t<=(n*h[h.length-1]+o[i[l+1][0]])/2));l++);n===o.year&&t<5*n&&(h=[1,2,5]);let d=r(t/n,h,"year"===a[0]?Math.max(s(t/n),1):1);return{unitRange:n,count:d,unitName:a[0]}}getXDateFormat(t,e){let{axis:i}=this,s=i.chart.time;return i.closestPointRange?s.getDateFormat(i.closestPointRange,t,i.options.startOfWeek,e)||s.resolveDTLFormat(e.year).main:s.resolveDTLFormat(e.day).main}}t.Additions=n}(e||(e={})),e}),i(e,"Core/Axis/LogarithmicAxis.js",[e["Core/Utilities.js"]],function(t){var e;let{addEvent:i,normalizeTickInterval:s,pick:r}=t;return function(t){function e(t){let e=t.userOptions,i=this.logarithmic;"logarithmic"!==e.type?this.logarithmic=void 0:i||(i=this.logarithmic=new a(this))}function o(){let t=this.logarithmic;t&&(this.lin2val=function(e){return t.lin2log(e)},this.val2lin=function(e){return t.log2lin(e)})}t.compose=function(t){return t.keepProps.includes("logarithmic")||(t.keepProps.push("logarithmic"),i(t,"init",e),i(t,"afterInit",o)),t};class a{constructor(t){this.axis=t}getLogTickPositions(t,e,i,o){let a=this.axis,n=a.len,h=a.options,l=[];
23499if(o||(this.minorAutoInterval=void 0),t>=.5)t=Math.round(t),l=a.getLinearTickPositions(t,e,i);else if(t>=.08){let s,r,a,n,h,d,c;let p=Math.floor(e);for(s=t>.3?[1,2,4]:t>.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9],r=p;r<i+1&&!c;r++)for(a=0,n=s.length;a<n&&!c;a++)(h=this.log2lin(this.lin2log(r)*s[a]))>e&&(!o||d<=i)&&void 0!==d&&l.push(d),d>i&&(c=!0),d=h}else{let d=this.lin2log(e),c=this.lin2log(i),p=o?a.getMinorTickInterval():h.tickInterval,u=h.tickPixelInterval/(o?5:1),g=o?n/a.tickPositions.length:n;t=s(t=r("auto"===p?null:p,this.minorAutoInterval,(c-d)*u/(g||1))),l=a.getLinearTickPositions(t,d,c).map(this.log2lin),o||(this.minorAutoInterval=t/5)}return o||(a.tickInterval=t),l}lin2log(t){return Math.pow(10,t)}log2lin(t){return Math.log(t)/Math.LN10}}t.Additions=a}(e||(e={})),e}),i(e,"Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js",[e["Core/Utilities.js"]],function(t){var e;let{erase:i,extend:s,isNumber:r}=t;return function(t){let e;function o(t){return this.addPlotBandOrLine(t,"plotBands")}function a(t,i){let s=this.userOptions,r=new e(this,t);if(this.visible&&(r=r.render()),r){if(this._addedPlotLB||(this._addedPlotLB=!0,(s.plotLines||[]).concat(s.plotBands||[]).forEach(t=>{this.addPlotBandOrLine(t)})),i){let e=s[i]||[];e.push(t),s[i]=e}this.plotLinesAndBands.push(r)}return r}function n(t){return this.addPlotBandOrLine(t,"plotLines")}function h(t,e,i){i=i||this.options;let s=this.getPlotLinePath({value:e,force:!0,acrossPanes:i.acrossPanes}),o=[],a=this.horiz,n=!r(this.min)||!r(this.max)||t<this.min&&e<this.min||t>this.max&&e>this.max,h=this.getPlotLinePath({value:t,force:!0,acrossPanes:i.acrossPanes}),l,d=1,c;if(h&&s)for(n&&(c=h.toString()===s.toString(),d=0),l=0;l<h.length;l+=2){let t=h[l],e=h[l+1],i=s[l],r=s[l+1];("M"===t[0]||"L"===t[0])&&("M"===e[0]||"L"===e[0])&&("M"===i[0]||"L"===i[0])&&("M"===r[0]||"L"===r[0])&&(a&&i[1]===t[1]?(i[1]+=d,r[1]+=d):a||i[2]!==t[2]||(i[2]+=d,r[2]+=d),o.push(["M",t[1],t[2]],["L",e[1],e[2]],["L",r[1],r[2]],["L",i[1],i[2]],["Z"])),o.isFlat=c}return o}function l(t){this.removePlotBandOrLine(t)}function d(t){let e=this.plotLinesAndBands,s=this.options,r=this.userOptions;if(e){let o=e.length;for(;o--;)e[o].id===t&&e[o].destroy();[s.plotLines||[],r.plotLines||[],s.plotBands||[],r.plotBands||[]].forEach(function(e){for(o=e.length;o--;)(e[o]||{}).id===t&&i(e,e[o])})}}function c(t){this.removePlotBandOrLine(t)}t.compose=function(t,i){let r=i.prototype;return r.addPlotBand||(e=t,s(r,{addPlotBand:o,addPlotLine:n,addPlotBandOrLine:a,getPlotBandPath:h,removePlotBand:l,removePlotLine:c,removePlotBandOrLine:d})),i}}(e||(e={})),e}),i(e,"Core/Axis/PlotLineOrBand/PlotLineOrBand.js",[e["Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js"],e["Core/Utilities.js"]],function(t,e){let{arrayMax:i,arrayMin:s,defined:r,destroyObjectProperties:o,erase:a,fireEvent:n,merge:h,objectEach:l,pick:d}=e;class c{static compose(e){return t.compose(c,e)}constructor(t,e){this.axis=t,this.options=e,this.id=e.id}render(){n(this,"render");let{axis:t,options:e}=this,{horiz:i,logarithmic:s}=t,{color:o,events:a,zIndex:c=0}=e,p={},u=t.chart.renderer,g=e.to,f=e.from,m=e.value,x=e.borderWidth,y=e.label,{label:b,svgElem:v}=this,S=[],C,k=r(f)&&r(g),M=r(m),w=!v,A={class:"highcharts-plot-"+(k?"band ":"line ")+(e.className||"")},T=k?"bands":"lines";if(!t.chart.styledMode&&(M?(A.stroke=o||"#999999",A["stroke-width"]=d(e.width,1),e.dashStyle&&(A.dashstyle=e.dashStyle)):k&&(A.fill=o||"#e6e9ff",x&&(A.stroke=e.borderColor,A["stroke-width"]=x))),p.zIndex=c,T+="-"+c,(C=t.plotLinesAndBandsGroups[T])||(t.plotLinesAndBandsGroups[T]=C=u.g("plot-"+T).attr(p).add()),v||(this.svgElem=v=u.path().attr(A).add(C)),r(m))S=t.getPlotLinePath({value:s?.log2lin(m)??m,lineWidth:v.strokeWidth(),acrossPanes:e.acrossPanes});else{if(!(r(f)&&r(g)))return;S=t.getPlotBandPath(s?.log2lin(f)??f,s?.log2lin(g)??g,e)}return!this.eventsAdded&&a&&(l(a,(t,e)=>{v?.on(e,t=>{a[e].apply(this,[t])})}),this.eventsAdded=!0),(w||!v.d)&&S?.length?v.attr({d:S}):v&&(S?(v.show(),v.animate({d:S})):v.d&&(v.hide(),b&&(this.label=b=b.destroy()))),y&&(r(y.text)||r(y.formatter))&&S?.length&&t.width>0&&t.height>0&&!S.isFlat?(y=h({align:i&&k?"center":void 0,x:i?!k&&4:10,verticalAlign:!i&&k?"middle":void 0,y:i?k?16:10:k?6:-4,rotation:i&&!k?90:0},y),this.renderLabel(y,S,k,c)):b&&b.hide(),this}renderLabel(t,e,r,o){let a=this.axis,n=a.chart.renderer,l=this.label;l||(this.label=l=n.text(this.getLabelText(t),0,0,t.useHTML).attr({align:t.textAlign||t.align,rotation:t.rotation,class:"highcharts-plot-"+(r?"band":"line")+"-label "+(t.className||""),zIndex:o}),a.chart.styledMode||l.css(h({fontSize:"0.8em",textOverflow:"ellipsis"},t.style)),l.add());let d=e.xBounds||[e[0][1],e[1][1],r?e[2][1]:e[0][1]],c=e.yBounds||[e[0][2],e[1][2],r?e[2][2]:e[0][2]],p=s(d),u=s(c);if(l.align(t,!1,{x:p,y:u,width:i(d)-p,height:i(c)-u}),!l.alignValue||"left"===l.alignValue){let e=t.clip?a.width:a.chart.chartWidth;l.css({width:(90===l.rotation?a.height-(l.alignAttr.y-a.top):e-(l.alignAttr.x-a.left))+"px"})}l.show(!0)}getLabelText(t){return r(t.formatter)?t.formatter.call(this):t.text}destroy(){a(this.axis.plotLinesAndBands,this),delete this.axis,o(this)}}return c}
23499),i(e,"Core/Tooltip.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o){var a;let{animObject:n}=t,{format:h}=e,{composed:l,doc:d,isSafari:c}=i,{distribute:p}=s,{addEvent:u,clamp:g,css:f,discardElement:m,extend:x,fireEvent:y,isArray:b,isNumber:v,isString:S,merge:C,pick:k,pushUnique:M,splat:w,syncTimeout:A}=o;class T{constructor(t,e,i){this.allowShared=!0,this.crosshairs=[],this.distance=0,this.isHidden=!0,this.isSticky=!1,this.options={},this.outside=!1,this.chart=t,this.init(t,e),this.pointer=i}bodyFormatter(t){return t.map(function(t){let e=t.series.tooltipOptions;return(e[(t.point.formatPrefix||"point")+"Formatter"]||t.point.tooltipFormatter).call(t.point,e[(t.point.formatPrefix||"point")+"Format"]||"")})}cleanSplit(t){this.chart.series.forEach(function(e){let i=e&&e.tt;i&&(!i.isActive||t?e.tt=i.destroy():i.isActive=!1)})}defaultFormatter(t){let e;let i=this.points||w(this);return(e=(e=[t.tooltipFooterHeaderFormatter(i[0])]).concat(t.bodyFormatter(i))).push(t.tooltipFooterHeaderFormatter(i[0],!0)),e}destroy(){this.label&&(this.label=this.label.destroy()),this.split&&(this.cleanSplit(!0),this.tt&&(this.tt=this.tt.destroy())),this.renderer&&(this.renderer=this.renderer.destroy(),m(this.container)),o.clearTimeout(this.hideTimer)}getAnchor(t,e){let i;let{chart:s,pointer:r}=this,o=s.inverted,a=s.plotTop,n=s.plotLeft;if((t=w(t))[0].series&&t[0].series.yAxis&&!t[0].series.yAxis.options.reversedStacks&&(t=t.slice().reverse()),this.followPointer&&e)void 0===e.chartX&&(e=r.normalize(e)),i=[e.chartX-n,e.chartY-a];else if(t[0].tooltipPos)i=t[0].tooltipPos;else{let s=0,r=0;t.forEach(function(t){let e=t.pos(!0);e&&(s+=e[0],r+=e[1])}),s/=t.length,r/=t.length,this.shared&&t.length>1&&e&&(o?s=e.chartX:r=e.chartY),i=[s-n,r-a]}return i.map(Math.round)}getClassName(t,e,i){let s=this.options,r=t.series,o=r.options;return[s.className,"highcharts-label",i&&"highcharts-tooltip-header",e?"highcharts-tooltip-box":"highcharts-tooltip",!i&&"highcharts-color-"+k(t.colorIndex,r.colorIndex),o&&o.className].filter(S).join(" ")}getLabel(){let t=this,e=this.chart.styledMode,s=this.options,o=this.split&&this.allowShared,a=this.container,n=this.chart.renderer;if(this.label){let t=!this.label.hasClass("highcharts-label");(!o&&t||o&&!t)&&this.destroy()}if(!this.label){if(this.outside){let t=this.chart.options.chart.style,e=r.getRendererType();this.container=a=i.doc.createElement("div"),a.className="highcharts-tooltip-container",f(a,{position:"absolute",top:"1px",pointerEvents:"none",zIndex:Math.max(this.options.style.zIndex||0,(t&&t.zIndex||0)+3)}),this.renderer=n=new e(a,0,0,t,void 0,void 0,n.styledMode)}if(o?this.label=n.g("tooltip"):(this.label=n.label("",0,0,s.shape,void 0,void 0,s.useHTML,void 0,"tooltip").attr({padding:s.padding,r:s.borderRadius}),e||this.label.attr({fill:s.backgroundColor,"stroke-width":s.borderWidth||0}).css(s.style).css({pointerEvents:s.style.pointerEvents||(this.shouldStickOnContact()?"auto":"none")})),t.outside){let e=this.label;[e.xSetter,e.ySetter].forEach((i,s)=>{e[s?"ySetter":"xSetter"]=r=>{i.call(e,t.distance),e[s?"y":"x"]=r,a&&(a.style[s?"top":"left"]=`${r}px`)}})}this.label.attr({zIndex:8}).shadow(s.shadow).add()}return a&&!a.parentElement&&i.doc.body.appendChild(a),this.label}getPlayingField(){let{body:t,documentElement:e}=d,{chart:i,distance:s,outside:r}=this;return{width:r?Math.max(t.scrollWidth,e.scrollWidth,t.offsetWidth,e.offsetWidth,e.clientWidth)-2*s:i.chartWidth,height:r?Math.max(t.scrollHeight,e.scrollHeight,t.offsetHeight,e.offsetHeight,e.clientHeight):i.chartHeight}}getPosition(t,e,i){let{distance:s,chart:r,outside:o,pointer:a}=this,{inverted:n,plotLeft:h,plotTop:l,polar:d}=r,{plotX:c=0,plotY:p=0}=i,u={},g=n&&i.h||0,{height:f,width:m}=this.getPlayingField(),x=a.getChartPosition(),y=t=>t*x.scaleX,b=t=>t*x.scaleY,v=i=>{let a="x"===i;return[i,a?m:f,a?t:e].concat(o?[a?y(t):b(e),a?x.left-s+y(c+h):x.top-s+b(p+l),0,a?m:f]:[a?t:e,a?c+h:p+l,a?h:l,a?h+r.plotWidth:l+r.plotHeight])},S=v("y"),C=v("x"),M,w=!!i.negative;!d&&r.hoverSeries?.yAxis?.reversed&&(w=!w);let A=!this.followPointer&&k(i.ttBelow,!d&&!n===w),T=function(t,e,
23499i,r,a,n,h){let l=o?"y"===t?b(s):y(s):s,d=(i-r)/2,c=r<a-s,p=a+s+r<e,f=a-l-i+d,m=a+l-d;if(A&&p)u[t]=m;else if(!A&&c)u[t]=f;else if(c)u[t]=Math.min(h-r,f-g<0?f:f-g);else{if(!p)return!1;u[t]=Math.max(n,m+g+i>e?m:m+g)}},P=function(t,e,i,r,o){if(o<s||o>e-s)return!1;o<i/2?u[t]=1:o>e-r/2?u[t]=e-r-2:u[t]=o-i/2},L=function(t){[S,C]=[C,S],M=t},O=()=>{!1!==T.apply(0,S)?!1!==P.apply(0,C)||M||(L(!0),O()):M?u.x=u.y=0:(L(!0),O())};return(n&&!d||this.len>1)&&L(),O(),u}hide(t){let e=this;o.clearTimeout(this.hideTimer),t=k(t,this.options.hideDelay),this.isHidden||(this.hideTimer=A(function(){let i=e.getLabel();e.getLabel().animate({opacity:0},{duration:t?150:t,complete:()=>{i.hide(),e.container&&e.container.remove()}}),e.isHidden=!0},t))}init(t,e){this.chart=t,this.options=e,this.crosshairs=[],this.isHidden=!0,this.split=e.split&&!t.inverted&&!t.polar,this.shared=e.shared||this.split,this.outside=k(e.outside,!!(t.scrollablePixelsX||t.scrollablePixelsY))}shouldStickOnContact(t){return!!(!this.followPointer&&this.options.stickOnContact&&(!t||this.pointer.inClass(t.target,"highcharts-tooltip")))}move(t,e,i,s){let r=this,o=n(!r.isHidden&&r.options.animation),a=r.followPointer||(r.len||0)>1,h={x:t,y:e};a||(h.anchorX=i,h.anchorY=s),o.step=()=>r.drawTracker(),r.getLabel().animate(h,o)}refresh(t,e){let{chart:i,options:s,pointer:r,shared:a}=this,n=w(t),l=n[0],d=[],c=s.format,p=s.formatter||this.defaultFormatter,u=i.styledMode,g={};if(!s.enabled||!l.series)return;o.clearTimeout(this.hideTimer),this.allowShared=!(!b(t)&&t.series&&t.series.noSharedTooltip),this.followPointer=!this.split&&l.series.tooltipOptions.followPointer;let f=this.getAnchor(t,e),m=f[0],x=f[1];a&&this.allowShared?(r.applyInactiveState(n),n.forEach(function(t){t.setState("hover"),d.push(t.getLabelConfig())}),(g=l.getLabelConfig()).points=d):g=l.getLabelConfig(),this.len=d.length;let v=S(c)?h(c,g,i):p.call(g,this),C=l.series;if(this.distance=k(C.tooltipOptions.distance,16),!1===v)this.hide();else{if(this.split&&this.allowShared)this.renderSplit(v,n);else{let t=m,o=x;if(e&&r.isDirectTouch&&(t=e.chartX-i.plotLeft,o=e.chartY-i.plotTop),i.polar||!1===C.options.clip||n.some(e=>r.isDirectTouch||e.series.shouldShowTooltip(t,o))){let t=this.getLabel();(!s.style.width||u)&&t.css({width:(this.outside?this.getPlayingField():i.spacingBox).width+"px"}),t.attr({text:v&&v.join?v.join(""):v}),t.addClass(this.getClassName(l),!0),u||t.attr({stroke:s.borderColor||l.color||C.color||"#666666"}),this.updatePosition({plotX:m,plotY:x,negative:l.negative,ttBelow:l.ttBelow,h:f[2]||0})}else{this.hide();return}}this.isHidden&&this.label&&this.label.attr({opacity:1}).show(),this.isHidden=!1}y(this,"refresh")}renderSplit(t,e){let i=this,{chart:s,chart:{chartWidth:r,chartHeight:o,plotHeight:a,plotLeft:n,plotTop:h,scrollablePixelsY:l=0,scrollablePixelsX:u,styledMode:f},distance:m,options:y,options:{positioner:b},pointer:v}=i,{scrollLeft:C=0,scrollTop:M=0}=s.scrollablePlotArea?.scrollingContainer||{},w=i.outside&&"number"!=typeof u?d.documentElement.getBoundingClientRect():{left:C,right:C+r,top:M,bottom:M+o},A=i.getLabel(),T=this.renderer||s.renderer,P=!!(s.xAxis[0]&&s.xAxis[0].opposite),{left:L,top:O}=v.getChartPosition(),D=h+M,E=0,I=a-l;function j(t,e,s,r,o=!0){let a,n;return s?(a=P?0:I,n=g(t-r/2,w.left,w.right-r-(i.outside?L:0))):(a=e-D,n=g(n=o?t-r-m:t+m,o?n:w.left,w.right)),{x:n,y:a}}S(t)&&(t=[!1,t]);let B=t.slice(0,e.length+1).reduce(function(t,s,r){if(!1!==s&&""!==s){let o=e[r-1]||{isHeader:!0,plotX:e[0].plotX,plotY:a,series:{}},l=o.isHeader,d=l?i:o.series,c=d.tt=function(t,e,s){let r=t,{isHeader:o,series:a}=e;if(!r){let t={padding:y.padding,r:y.borderRadius};f||(t.fill=y.backgroundColor,t["stroke-width"]=y.borderWidth??1),r=T.label("",0,0,y[o?"headerShape":"shape"],void 0,void 0,y.useHTML).addClass(i.getClassName(e,!0,o)).attr(t).add(A)}return r.isActive=!0,r.attr({text:s}),f||r.css(y.style).attr({stroke:y.borderColor||e.color||a.color||"#333333"}),r}(d.tt,o,s.toString()),p=c.getBBox(),u=p.width+c.strokeWidth();l&&(E=p.height,I+=E,P&&(D-=E));let{anchorX:x,anchorY:v}=function(t){let e,i;let{isHeader:s,plotX:r=0,plotY:o=0,series:l}=t;if(s)e=Math.max(n+r,n),i=h+a/2;else{let{xAxis:t,yAxis:s}=l;e=t.pos+g(r,-m,t.len+m),l.shouldShowTooltip(0,s.pos-h+o,{ignoreX:!0})&&(i=s.pos+o)}return{anchorX:e=g(e,w.left-m,w.right+m),anchorY:i}}(o);if("number"==typeof v){let e=p.height+1,s=b?b.call(i,u,e,o):j(x,v,l,u);t.push({align:b?0:void 0,anchorX:x,anchorY:v,boxWidth:u,point:o,rank:k(s.rank,l?1:0),size:e,target:s.y,tt:c,x:s.x})}else c.isActive=!1}return t},[]);!b&&B.some(t=>{let{outside:e}=i,s=(e?L:0)+t.anchorX;return s<w.left&&s+t.boxWidth<w.right||s<L-w.left+t.boxWidth&&w.right-s>s})&&(B=B.map(t=>{let{x:e,y:i}=j(t.anchorX,t.anchorY,t.point.isHeader,t.boxWidth,!1);return x(t,{target:i,x:e})})),i.cleanSplit(),p(B,I);let R={left:L,right:L};B.forEach(function(t){let{x:e,boxWidth:s,isHeader:r}=t;!r&&(i.outside&&L+e<R.left&&(R.left=L+e),!r&&i.outside&&R.left+s>R.right&&(R.right=L+e))}),B.forEach(function(t){let{x:e,anchorX:s,anchorY:r,pos:o,point:{isHeader:a}}=t,n={visibility:void 0===o?"hidden":"inherit",x:e,y:(o||0)+D,anchorX:s,anchorY:r};
23499if(i.outside&&e<s){let t=L-R.left;t>0&&(a||(n.x=e+t,n.anchorX=s+t),a&&(n.x=(R.right-R.left)/2,n.anchorX=s+t))}t.tt.attr(n)});let{container:z,outside:N,renderer:W}=i;if(N&&z&&W){let{width:t,height:e,x:i,y:s}=A.getBBox();W.setSize(t+i,e+s,!1),z.style.left=R.left+"px",z.style.top=O+"px"}c&&A.attr({opacity:1===A.opacity?.999:1})}drawTracker(){if(!this.shouldStickOnContact()){this.tracker&&(this.tracker=this.tracker.destroy());return}let t=this.chart,e=this.label,i=this.shared?t.hoverPoints:t.hoverPoint;if(!e||!i)return;let s={x:0,y:0,width:0,height:0},r=this.getAnchor(i),o=e.getBBox();r[0]+=t.plotLeft-(e.translateX||0),r[1]+=t.plotTop-(e.translateY||0),s.x=Math.min(0,r[0]),s.y=Math.min(0,r[1]),s.width=r[0]<0?Math.max(Math.abs(r[0]),o.width-r[0]):Math.max(Math.abs(r[0]),o.width),s.height=r[1]<0?Math.max(Math.abs(r[1]),o.height-Math.abs(r[1])):Math.max(Math.abs(r[1]),o.height),this.tracker?this.tracker.attr(s):(this.tracker=e.renderer.rect(s).addClass("highcharts-tracker").add(e),t.styledMode||this.tracker.attr({fill:"rgba(0,0,0,0)"}))}styledModeFormat(t){return t.replace('style="font-size: 0.8em"','class="highcharts-header"').replace(/style="color:{(point|series)\.color}"/g,'class="highcharts-color-{$1.colorIndex} {series.options.className} {point.options.className}"')}tooltipFooterHeaderFormatter(t,e){let i=t.series,s=i.tooltipOptions,r=i.xAxis,o=r&&r.dateTime,a={isFooter:e,labelConfig:t},n=s.xDateFormat,l=s[e?"footerFormat":"headerFormat"];return y(this,"headerFormatter",a,function(e){o&&!n&&v(t.key)&&(n=o.getXDateFormat(t.key,s.dateTimeLabelFormats)),o&&n&&(t.point&&t.point.tooltipDateKeys||["key"]).forEac
23499h(function(t){l=l.replace("{point."+t+"}","{point."+t+":"+n+"}")}),i.chart.styledMode&&(l=this.styledModeFormat(l)),e.text=h(l,{point:t,series:i},this.chart)}),a.text}update(t){this.destroy(),this.init(this.chart,C(!0,this.options,t))}updatePosition(t){let{chart:e,container:i,distance:s,options:r,pointer:o,renderer:a}=this,{height:n=0,width:h=0}=this.getLabel(),{left:l,top:d,scaleX:c,scaleY:p}=o.getChartPosition(),u=(r.positioner||this.getPosition).call(this,h,n,t),g=(t.plotX||0)+e.plotLeft,m=(t.plotY||0)+e.plotTop,x;a&&i&&(r.positioner&&(u.x+=l-s,u.y+=d-s),x=(r.borderWidth||0)+2*s+2,a.setSize(h+x,n+x,!1),(1!==c||1!==p)&&(f(i,{transform:`scale(${c}, ${p})`}),g*=c,m*=p),g+=l-u.x,m+=d-u.y),this.move(Math.round(u.x),Math.round(u.y||0),g,m)}}return(a=T||(T={})).compose=function(t){M(l,"Core.Tooltip")&&u(t,"afterInit",function(){let t=this.chart;t.options.tooltip&&(t.tooltip=new a(t,t.options.tooltip,this))})},T}),i(e,"Core/Series/Point.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Animation/AnimationUtilities.js"],e["Core/Defaults.js"],e["Core/Templating.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){let{animObject:o}=e,{defaultOptions:a}=i,{format:n}=s,{addEvent:h,crisp:l,erase:d,extend:c,fireEvent:p,getNestedProperty:u,isArray:g,isFunction:f,isNumber:m,isObject:x,merge:y,pick:b,syncTimeout:v,removeEvent:S,uniqueKey:C}=r;class k{animateBeforeDestroy(){let t=this,e={x:t.startXPos,opacity:0},i=t.getGraphicalProps();i.singular.forEach(function(i){t[i]=t[i].animate("dataLabel"===i?{x:t[i].startXPos,y:t[i].startYPos,opacity:0}:e)}),i.plural.forEach(function(e){t[e].forEach(function(e){e.element&&e.animate(c({x:t.startXPos},e.startYPos?{x:e.startXPos,y:e.startYPos}:{}))})})}applyOptions(t,e){let i=this.series,s=i.options.pointValKey||i.pointValKey;return c(this,t=k.prototype.optionsToObject.call(this,t)),this.options=this.options?c(this.options,t):t,t.group&&delete this.group,t.dataLabels&&delete this.dataLabels,s&&(this.y=k.prototype.getNestedProperty.call(this,s)),this.selected&&(this.state="select"),"name"in this&&void 0===e&&i.xAxis&&i.xAxis.hasNames&&(this.x=i.xAxis.nameToX(this)),void 0===this.x&&i?void 0===e?this.x=i.autoIncrement():this.x=e:m(t.x)&&i.options.relativeXValue&&(this.x=i.autoIncrement(t.x)),this.isNull=this.isValid&&!this.isValid(),this.formatPrefix=this.isNull?"null":"point",this}destroy(){if(!this.destroyed){let t=this,e=t.series,i=e.chart,s=e.options.dataSorting,r=i.hoverPoints,a=o(t.series.chart.renderer.globalAnimation),n=()=>{for(let e in(t.graphic||t.graphics||t.dataLabel||t.dataLabels)&&(S(t),t.destroyElements()),t)delete t[e]};t.legendItem&&i.legend.destroyItem(t),r&&(t.setState(),d(r,t),r.length||(i.hoverPoints=null)),t===i.hoverPoint&&t.onMouseOut(),s&&s.enabled?(this.animateBeforeDestroy(),v(n,a.duration)):n(),i.pointCount--}this.destroyed=!0}destroyElements(t){let e=this,i=e.getGraphicalProps(t);i.singular.forEach(function(t){e[t]=e[t].destroy()}),i.plural.forEach(function(t){e[t].forEach(function(t){t&&t.element&&t.destroy()}),delete e[t]})}firePointEvent(t,e,i){let s=this,r=this.series.options;s.manageEvent(t),"click"===t&&r.allowPointSelect&&(i=function(t){!s.destroyed&&s.select&&s.select(null,t.ctrlKey||t.metaKey||t.shiftKey)}),p(s,t,e,i)}getClassName(){return"highcharts-point"+(this.selected?" highcharts-point-select":"")+(this.negative?" highcharts-negative":"")+(this.isNull?" highcharts-null-point":"")+(void 0!==this.colorIndex?" highcharts-color-"+this.colorIndex:"")+(this.options.className?" "+this.options.className:"")+(this.zone&&this.zone.className?" "+this.zone.className.replace("highcharts-negative",""):"")}getGraphicalProps(t){let e,i;let s=this,r=[],o={singular:[],plural:[]};for((t=t||{graphic:1,dataLabel:1}).graphic&&r.push("graphic","connector"),t.dataLabel&&r.push("dataLabel","dataLabelPath","dataLabelUpper"),i=r.length;i--;)s[e=r[i]]&&o.singular.push(e);return["graphic","dataLabel"].forEach(function(e){let i=e+"s";t[e]&&s[i]&&o.plural.push(i)}),o}getLabelConfig(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}}getNestedProperty(t){return t?0===t.indexOf("custom.")?u(t,this.options):this[t]:void 0}getZone(){let t=this.series,e=t.zones,i=t.zoneAxis||"y",s,r=0;for(s=e[0];this[i]>=s.value;)s=e[++r];return this.nonZonedColor||(this.nonZonedColor=this.color),s&&s.color&&!this.options.color?this.color=s.color:this.color=this.nonZonedColor,s}hasNewShapeType(){return(this.graphic&&(this.graphic.symbolName||this.graphic.element.nodeName))!==this.shapeType}constructor(t,e,i){this.formatPrefix="point",this.visible=!0,this.series=t,this.applyOptions(e,i),this.id??(this.id=C()),this.resolveColor(),t.chart.pointCount++,p(this,"afterInit")}isValid(){return(m(this.x)||this.x instanceof Date)&&m(this.y)}optionsToObject(t){let e=this.series,i=e.options.keys,s=i||e.pointArrayMap||["y"],r=s.length,o={},a,n=0,h=0;if(m(t)||null===t)o[s[0]]=t;else if(g(t))for(!i&&t.length>r&&("string"==(a=typeof t[0])?o.name=t[0]:"number"===a&&(o.x=t[0]),n++);h<r;)i&&void 0===t[n]||(s[h].indexOf(".")>0?k.prototype.setNestedProperty(o,t[n],s[h]):o[s[h]]=t[n]),n++,h++;else"object"==typeof t&&(o=t,t.dataLabels&&(e.hasDataLabels=()=>!0),t.marker&&(e._hasPointMarkers=!0));return o}pos(t,e=this.plotY){if(!this.destroyed){let{plotX:i,series:s}=this,{chart:r,xAxis:o,yAxis:a}=s,n=0,h=0;if(m(i)&&m(e))return t&&(n=o?o.pos:r.plotLeft,h=a?a.pos:r.plotTop),r.inverted&&o&&a?[a.len-e+h,o.len-i+n]:[i+n,e+h]}}resolveColor(){let t=this.series,e=t.chart.options.chart,i=t.chart.styledMode,s,r,o=e.colorCount,a;delete this.nonZonedColor,t.options.colorByPoint?(i||(s=(r=t.options.colors||t.chart.options.colors)[t.colorCounter],o=r.length),a=t.colorCounter,t.colorCounter++,t.colorCounter===o&&(t.colorCounter=0)):(i||(s=t.color),a=t.colorIndex),this.colorIndex=b(this.options.colorIndex,a),this.color=b(this.options.color,s)}setNestedProperty(t,e,i){return i.split(".").reduce(function(t,i,s,r){let o=r.length-1===s;return t[i]=o?e:x(t[i],!0)?t[i]:{},t[i]},t),t}shouldDraw(){return!this.isNull}tooltipFormatter(t){let e=this.series,i=e.tooltipOptions,s=b(i.valueDecimals,""),r=i.valuePrefix||"",o=i.valueSuffix||"";return e.chart.styledMode&&(t=e.chart.tooltip.styledModeFormat(t)),(e.pointArrayMap||["y"]).forEac
23499h(function(e){e="{point."+e,(r||o)&&(t=t.replace(RegExp(e+"}","g"),r+e+"}"+o)),t=t.replace(RegExp(e+"}","g"),e+":,."+s+"f}")}),n(t,{point:this,series:this.series},e.chart)}update(t,e,i,s){let r;let o=this,a=o.series,n=o.graphic,h=a.chart,l=a.options;function d(){o.applyOptions(t);let s=n&&o.hasMockGraphic,d=null===o.y?!s:s;n&&d&&(o.graphic=n.destroy(),delete o.hasMockGraphic),x(t,!0)&&(n&&n.element&&t&&t.marker&&void 0!==t.marker.symbol&&(o.graphic=n.destroy()),t?.dataLabels&&o.dataLabel&&(o.dataLabel=o.dataLabel.destroy())),r=o.index,a.updateParallelArrays(o,r),l.data[r]=x(l.data[r],!0)||x(t,!0)?o.options:b(t,l.data[r]),a.isDirty=a.isDirtyData=!0,!a.fixedBox&&a.hasCartesianSeries&&(h.isDirtyBox=!0),"point"===l.legendType&&(h.isDirtyLegend=!0),e&&h.redraw(i)}e=b(e,!0),!1===s?d():o.firePointEvent("update",{options:t},d)}remove(t,e){this.series.removePoint(this.series.data.indexOf(this),t,e)}select(t,e){let i=this,s=i.series,r=s.chart;t=b(t,!i.selected),this.selectedStaging=t,i.firePointEvent(t?"select":"unselect",{accumulate:e},function(){i.selected=i.options.selected=t,s.options.data[s.data.indexOf(i)]=i.options,i.setState(t&&"select"),e||r.getSelectedPoints().forEac
23499h(function(t){let e=t.series;t.selected&&t!==i&&(t.selected=t.options.selected=!1,e.options.data[e.data.indexOf(t)]=t.options,t.setState(r.hoverPoints&&e.options.inactiveOtherPoints?"inactive":""),t.firePointEvent("unselect"))})}),delete this.selectedStaging}onMouseOver(t){let{inverted:e,pointer:i}=this.series.chart;i&&(t=t?i.normalize(t):i.getChartCoordinatesFromPoint(this,e),i.runPointActions(t,this))}onMouseOut(){let t=this.series.chart;this.firePointEvent("mouseOut"),this.series.options.inactiveOtherPoints||(t.hoverPoints||[]).forEach(function(t){t.setState()}),t.hoverPoints=t.hoverPoint=null}manageEvent(t){let e=y(this.series.options.point,this.options),i=e.events?.[t];f(i)&&(!this.hcEvents?.[t]||this.hcEvents?.[t]?.map(t=>t.fn).indexOf(i)===-1)?(h(this,t,i),this.hasImportedEvents=!0):this.hasImportedEvents&&!i&&this.hcEvents?.[t]&&(S(this,t),delete this.hcEvents[t],Object.keys(this.hcEvents)||(this.hasImportedEvents=!1))}setState(e,i){let s=this.series,r=this.state,o=s.options.states[e||"normal"]||{},n=a.plotOptions[s.type].marker&&s.options.marker,h=n&&!1===n.enabled,l=n&&n.states&&n.states[e||"normal"]||{},d=!1===l.enabled,u=this.marker||{},g=s.chart,f=n&&s.markerAttribs,x=s.halo,y,v,S,C=s.stateMarkerGraphic,k;if((e=e||"")===this.state&&!i||this.selected&&"select"!==e||!1===o.enabled||e&&(d||h&&!1===l.enabled)||e&&u.states&&u.states[e]&&!1===u.states[e].enabled)return;if(this.state=e,f&&(y=s.markerAttribs(this,e)),this.graphic&&!this.hasMockGraphic){if(r&&this.graphic.removeClass("highcharts-point-"+r),e&&this.graphic.addClass("highcharts-point-"+e),!g.styledMode){v=s.pointAttribs(this,e),S=b(g.options.chart.animation,o.animation);let t=v.opacity;s.options.inactiveOtherPoints&&m(t)&&(this.dataLabels||[]).forEach(function(e){e&&!e.hasClass("highcharts-data-label-hidden")&&(e.animate({opacity:t},S),e.connector&&e.connector.animate({opacity:t},S))}),this.graphic.animate(v,S)}y&&this.graphic.animate(y,b(g.options.chart.animation,l.animation,n.animation)),C&&C.hide()}else e&&l&&(k=u.symbol||s.symbol,C&&C.currentSymbol!==k&&(C=C.destroy()),y&&(C?C[i?"animate":"attr"]({x:y.x,y:y.y}):k&&(s.stateMarkerGraphic=C=g.renderer.symbol(k,y.x,y.y,y.width,y.height).add(s.markerGroup),C.currentSymbol=k)),!g.styledMode&&C&&"inactive"!==this.state&&C.attr(s.pointAttribs(this,e))),C&&(C[e&&this.isInside?"show":"hide"](),C.element.point=this,C.addClass(this.getClassName(),!0));let M=o.halo,w=this.graphic||C,A=w&&w.visibility||"inherit";M&&M.size&&w&&"hidden"!==A&&!this.isCluster?(x||(s.halo=x=g.renderer.path().add(w.parentGroup)),x.show()[i?"animate":"attr"]({d:this.haloPath(M.size)}),x.attr({class:"highcharts-halo highcharts-color-"+b(this.colorIndex,s.colorIndex)+(this.className?" "+this.className:""),visibility:A,zIndex:-1}),x.point=this,g.styledMode||x.attr(c({fill:this.color||s.color,"fill-opacity":M.opacity},t.filterUserAttributes(M.attributes||{})))):x?.point?.haloPath&&!x.point.destroyed&&x.animate({d:x.point.haloPath(0)},null,x.hide),p(this,"afterSetState",{state:e})}haloPath(t){let e=this.pos();return e?this.series.chart.renderer.symbols.circle(l(e[0],1)-t,e[1]-t,2*t,2*t):[]}}return k}),i(e,"Core/Pointer.js",[e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{parse:r}=t,{charts:o,composed:a,isTouchDevice:n}=e,{addEvent:h,attr:l,css:d,extend:c,find:p,fireEvent:u,isNumber:g,isObject:f,objectEach:m,offset:x,pick:y,pushUnique:b,splat:v}=i;class S{applyInactiveState(t){let e=[],i;(t||[]).forEach(function(t){i=t.series,e.push(i),i.linkedParent&&e.push(i.linkedParent),i.linkedSeries&&(e=e.concat(i.linkedSeries)),i.navigatorSeries&&e.push(i.navigatorSeries)}),this.chart.series.forEach(function(t){-1===e.indexOf(t)?t.setState("inactive",!0):t.options.inactiveOtherPoints&&t.setAllPointsToState("inactive")})}destroy(){let t=this;this.eventsToUnbind.forEach(t=>t()),this.eventsToUnbind=[],!e.chartCount&&(S.unbindDocumentMouseUp&&(S.unbindDocumentMouseUp=S.unbindDocumentMouseUp()),S.unbindDocumentTouchEnd&&(S.unbindDocumentTouchEnd=S.unbindDocumentTouchEnd())),clearInterval(t.tooltipTimeout),m(t,function(e,i){t[i]=void 0})}getSelectionMarkerAttrs(t,e){let i={args:{chartX:t,chartY:e},attrs:{},shapeType:"rect"};return u(this,"getSelectionMarkerAttrs",i,i=>{let s;let{chart:r,zoomHor:o,zoomVert:a}
vendor: 4,219 bytes, line 23499
23499=this,{mouseDownX:n=0,mouseDownY:h=0}=r,l=i.attrs;l.x=r.plotLeft,l.y=r.plotTop,l.width=o?1:r.plotWidth,l.height=a?1:r.plotHeight,o&&(s=t-n,l.width=Math.max(1,Math.abs(s)),l.x=(s>0?0:s)+n),a&&(s=e-h,l.height=Math.max(1,Math.abs(s)),l.y=(s>0?0:s)+h)}),i}drag(t){let{chart:e}=this,{mouseDownX:i=0,mouseDownY:s=0}=e,{panning:o,panKey:a,selectionMarkerFill:n}=e.options.chart,h=e.plotLeft,l=e.plotTop,d=e.plotWidth,c=e.plotHeight,p=f(o)?o.enabled:o,u=a&&t[`${a}Key`],g=t.chartX,m=t.chartY,x,y=this.selectionMarker;if((!y||!y.touch)&&(g<h?g=h:g>h+d&&(g=h+d),m<l?m=l:m>l+c&&(m=l+c),this.hasDragged=Math.sqrt(Math.pow(i-g,2)+Math.pow(s-m,2)),this.hasDragged>10)){x=e.isInsidePlot(i-h,s-l,{visiblePlotOnly:!0});let{shapeType:a,attrs:d}=this.getSelectionMarkerAttrs(g,m);(e.hasCartesianSeries||e.mapView)&&this.hasZoom&&x&&!u&&!y&&(this.selectionMarker=y=e.renderer[a](),y.attr({class:"highcharts-selection-marker",zIndex:7}).add(),e.styledMode||y.attr({fill:n||r("#334eff").setOpacity(.25).get()})),y&&y.attr(d),x&&!y&&p&&e.pan(t,o)}}dragStart(t){let e=this.chart;e.mouseIsDown=t.type,e.cancelClick=!1,e.mouseDownX=t.chartX,e.mouseDownY=t.chartY}getSelectionBox(t){let e={args:{marker:t},result:t.getBBox()};return u(this,"getSelectionBox",e),e.result}drop(t){let e;let{chart:i,selectionMarker:s}=this;for(let t of i.axes)t.isPanning&&(t.isPanning=!1,(t.options.startOnTick||t.options.endOnTick||t.series.some(t=>t.boosted))&&(t.forceRedraw=!0,t.setExtremes(t.userMin,t.userMax,!1),e=!0));if(e&&i.redraw(),s&&t){if(this.hasDragged){let e=this.getSelectionBox(s);i.transform({axes:i.axes.filter(t=>t.zoomEnabled&&("xAxis"===t.coll&&this.zoomX||"yAxis"===t.coll&&this.zoomY)),selection:{originalEvent:t,xAxis:[],yAxis:[],...e},from:e})}g(i.index)&&(this.selectionMarker=s.destroy())}i&&g(i.index)&&(d(i.container,{cursor:i._cursor}),i.cancelClick=this.hasDragged>10,i.mouseIsDown=!1,this.hasDragged=0,this.pinchDown=[])}findNearestKDPoint(t,e,i){let s;return t.forEach(function(t){let r=!(t.noSharedTooltip&&e)&&0>t.options.findNearestPointBy.indexOf("y"),o=t.searchPoint(i,r);f(o,!0)&&o.series&&(!f(s,!0)||function(t,i){let s=t.distX-i.distX,r=t.dist-i.dist,o=i.series.group?.zIndex-t.series.group?.zIndex;return 0!==s&&e?s:0!==r?r:0!==o?o:t.series.index>i.series.index?-1:1}(s,o)>0)&&(s=o)}),s}getChartCoordinatesFromPoint(t,e){let{xAxis:i,yAxis:s}=t.series,r=t.shapeArgs;if(i&&s){let o=t.clientX??t.plotX??0,a=t.plotY||0;return t.isNode&&r&&g(r.x)&&g(r.y)&&(o=r.x,a=r.y),e?{chartX:s.len+s.pos-a,chartY:i.len+i.pos-o}:{chartX:o+i.pos,chartY:a+s.pos}}if(r&&r.x&&r.y)return{chartX:r.x,chartY:r.y}}getChartPosition(){if(this.chartPosition)return this.chartPosition;let{container:t}=this.chart,e=x(t);this.chartPosition={left:e.left,top:e.top,scaleX:1,scaleY:1};let{offsetHeight:i,offsetWidth:s}=t;return s>2&&i>2&&(this.chartPosition.scaleX=e.width/s,this.chartPosition.scaleY=e.height/i),this.chartPosition}getCoordinates(t){let e={xAxis:[],yAxis:[]};for(let i of this.chart.axes)e[i.isXAxis?"xAxis":"yAxis"].push({axis:i,value:i.toValue(t[i.horiz?"chartX":"chartY"])});return e}getHoverData(t,e,i,s,r,o){let a=[],n=function(t){return t.visible&&!(!r&&t.directTouch)&&y(t.options.enableMouseTracking,!0)},h=e,l,d={chartX:o?o.chartX:void 0,chartY:o?o.chartY:void 0,shared:r};u(this,"beforeGetHoverData",d),l=h&&!h.stickyTracking?[h]:i.filter(t=>t.stickyTracking&&(d.filter||n)(t));let c=s&&t||!o?t:this.findNearestKDPoint(l,r,o);return h=c&&c.series,c&&(r&&!h.noSharedTooltip?(l=i.filter(function(t){return d.filter?d.filter(t):n(t)&&!t.noSharedTooltip})).forEach(function(t){let e=p(t.points,function(t){return t.x===c.x&&!t.isNull});f(e)&&(t.boosted&&t.boost&&(e=t.boost.getPoint(e)),a.push(e))}):a.push(c)),u(this,"afterGetHoverData",d={hoverPoint:c}),{hoverPoint:d.hoverPoint,hoverSeries:h,hoverPoints:a}}getPointFromEvent(t){let e=t.target,i;for(;e&&!i;)i=e.point,e=e.parentNode;return i}onTrackerMouseOut(t){let e=this.chart,i=t.relatedTarget,s=e.hoverSeries;this.isDirectTouch=!1,!s||!i||s.stickyTracking||this.inClass(i,"highcharts-tooltip")||this.inClass(i,"highcharts-series-"+s.index)&&this.inClass(i,"highcharts-tracker")||s.onMouseOut()}inClass(t,e){let i=t,s;for(;i;){if(s=l(i,"class")){if(-1!==s.indexOf(e))return!0;
vendor: 4,445 bytes, line 23499
23499if(-1!==s.indexOf("highcharts-container"))return!1}i=i.parentElement}}constructor(t,e){this.hasDragged=0,this.pointerCaptureEventsToUnbind=[],this.eventsToUnbind=[],this.options=e,this.chart=t,this.runChartClick=!!e.chart.events?.click,this.pinchDown=[],this.setDOMEvents(),u(this,"afterInit")}normalize(t,e){let i=t.touches,s=i?i.length?i.item(0):y(i.changedTouches,t.changedTouches)[0]:t;e||(e=this.getChartPosition());let r=s.pageX-e.left,o=s.pageY-e.top;return c(t,{chartX:Math.round(r/=e.scaleX),chartY:Math.round(o/=e.scaleY)})}onContainerClick(t){let e=this.chart,i=e.hoverPoint,s=this.normalize(t),r=e.plotLeft,o=e.plotTop;!e.cancelClick&&(i&&this.inClass(s.target,"highcharts-tracker")?(u(i.series,"click",c(s,{point:i})),e.hoverPoint&&i.firePointEvent("click",s)):(c(s,this.getCoordinates(s)),e.isInsidePlot(s.chartX-r,s.chartY-o,{visiblePlotOnly:!0})&&u(e,"click",s)))}onContainerMouseDown(t){let i=(1&(t.buttons||t.button))==1;t=this.normalize(t),e.isFirefox&&0!==t.button&&this.onContainerMouseMove(t),(void 0===t.button||i)&&(this.zoomOption(t),i&&t.preventDefault?.(),this.dragStart(t))}onContainerMouseLeave(t){let{pointer:e}=o[y(S.hoverChartIndex,-1)]||{};t=this.normalize(t),this.onContainerMouseMove(t),e&&t.relatedTarget&&!this.inClass(t.relatedTarget,"highcharts-tooltip")&&(e.reset(),e.chartPosition=void 0)}onContainerMouseEnter(){delete this.chartPosition}onContainerMouseMove(t){let e=this.chart,i=e.tooltip,s=this.normalize(t);this.setHoverChartIndex(t),("mousedown"===e.mouseIsDown||this.touchSelect(s))&&this.drag(s),!e.openMenu&&(this.inClass(s.target,"highcharts-tracker")||e.isInsidePlot(s.chartX-e.plotLeft,s.chartY-e.plotTop,{visiblePlotOnly:!0}))&&!(i&&i.shouldStickOnContact(s))&&(this.inClass(s.target,"highcharts-no-tooltip")?this.reset(!1,0):this.runPointActions(s))}onDocumentTouchEnd(t){this.onDocumentMouseUp(t)}onContainerTouchMove(t){this.touchSelect(t)?this.onContainerMouseMove(t):this.touch(t)}onContainerTouchStart(t){this.touchSelect(t)?this.onContainerMouseDown(t):(this.zoomOption(t),this.touch(t,!0))}onDocumentMouseMove(t){let e=this.chart,i=e.tooltip,s=this.chartPosition,r=this.normalize(t,s);!s||e.isInsidePlot(r.chartX-e.plotLeft,r.chartY-e.plotTop,{visiblePlotOnly:!0})||i&&i.shouldStickOnContact(r)||this.inClass(r.target,"highcharts-tracker")||this.reset()}onDocumentMouseUp(t){o[y(S.hoverChartIndex,-1)]?.pointer?.drop(t)}pinch(t){let e=this,{chart:i,hasZoom:s,lastTouches:r}=e,o=[].map.call(t.touches||[],t=>e.normalize(t)),a=o.length,n=1===a&&(e.inClass(t.target,"highcharts-tracker")&&i.runTrackerClick||e.runChartClick),h=i.tooltip,l=1===a&&y(h?.options.followTouchMove,!0);a>1?e.initiated=!0:l&&(e.initiated=!1),s&&e.initiated&&!n&&!1!==t.cancelable&&t.preventDefault(),"touchstart"===t.type?(e.pinchDown=o,e.res=!0):l?this.runPointActions(e.normalize(t)):r&&(u(i,"touchpan",{originalEvent:t,touches:o},()=>{let e=t=>{let e=t[0],i=t[1]||e;return{x:e.chartX,y:e.chartY,width:i.chartX-e.chartX,height:i.chartY-e.chartY}};i.transform({axes:i.axes.filter(t=>t.zoomEnabled&&(this.zoomHor&&t.horiz||this.zoomVert&&!t.horiz)),to:e(o),from:e(r),trigger:t.type})}),e.res&&(e.res=!1,this.reset(!1,0))),e.lastTouches=o}reset(t,e){let i=this.chart,s=i.hoverSeries,r=i.hoverPoint,o=i.hoverPoints,a=i.tooltip,n=a&&a.shared?o:r;t&&n&&v(n).forEach(function(e){e.series.isCartesian&&void 0===e.plotX&&(t=!1)}),t?a&&n&&v(n).length&&(a.refresh(n),a.shared&&o?o.forEach(function(t){t.setState(t.state,!0),t.series.isCartesian&&(t.series.xAxis.crosshair&&t.series.xAxis.drawCrosshair(null,t),t.series.yAxis.crosshair&&t.series.yAxis.drawCrosshair(null,t))}):r&&(r.setState(r.state,!0),i.axes.forEach(function(t){t.crosshair&&r.series[t.coll]===t&&t.drawCrosshair(null,r)}))):(r&&r.onMouseOut(),o&&o.forEach(function(t){t.setState()}),s&&s.onMouseOut(),a&&a.hide(e),this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove()),i.axes.forEach(function(t){t.hideCrosshair()}),i.hoverPoints=i.hoverPoint=void 0)}runPointActions(t,e,i){let s=this.chart,r=s.series,a=s.tooltip&&s.tooltip.options.enabled?s.tooltip:void 0,n=!!a&&a.shared,l=e||s.hoverPoint,d=l&&l.series||s.hoverSeries,c=(!t||"touchmove"!==t.type)&&(!!e||d&&d.directTouch&&this.isDirectTouch),u=this.getHoverData(l,d,r,c,n,t);l=u.hoverPoint,d=u.hoverSeries;let g=u.hoverPoints,f=d&&d.tooltipOptions.followPointer&&!d.tooltipOptions.split,m=n&&d&&!d.noSharedTooltip;if(l&&(i||l!==s.hoverPoint||a&&a.isHidden)){if((s.hoverPoints||[]).forEac
23499h(function(t){-1===g.indexOf(t)&&t.setState()}),s.hoverSeries!==d&&d.onMouseOver(),this.applyInactiveState(g),(g||[]).forEach(function(t){t.setState("hover")}),s.hoverPoint&&s.hoverPoint.firePointEvent("mouseOut"),!l.series)return;s.hoverPoints=g,s.hoverPoint=l,l.firePointEvent("mouseOver",void 0,()=>{a&&l&&a.refresh(m?g:l,t)})}else if(f&&a&&!a.isHidden){let e=a.getAnchor([{}],t);s.isInsidePlot(e[0],e[1],{visiblePlotOnly:!0})&&a.updatePosition({plotX:e[0],plotY:e[1]})}this.unDocMouseMove||(this.unDocMouseMove=h(s.container.ownerDocument,"mousemove",t=>o[S.hoverChartIndex??-1]?.pointer?.onDocumentMouseMove(t)),this.eventsToUnbind.push(this.unDocMouseMove)),s.axes.forEach(function(e){let i;let r=y((e.crosshair||{}).snap,!0);!r||(i=s.hoverPoint)&&i.series[e.coll]===e||(i=p(g,t=>t.series&&t.series[e.coll]===e)),i||!r?e.drawCrosshair(t,i):e.hideCrosshair()})}setDOMEvents(){let t=this.chart.container,e=t.ownerDocument;t.onmousedown=this.onContainerMouseDown.bind(this),t.onmousemove=this.onContainerMouseMove.bind(this),t.onclick=this.onContainerClick.bind(this),this.eventsToUnbind.push(h(t,"mouseenter",this.onContainerMouseEnter.bind(this)),h(t,"mouseleave",this.onContainerMouseLeave.bind(this))),S.unbindDocumentMouseUp||(S.unbindDocumentMouseUp=h(e,"mouseup",this.onDocumentMouseUp.bind(this)));let i=this.chart.renderTo.parentElement;for(;i&&"BODY"!==i.tagName;)this.eventsToUnbind.push(h(i,"scroll",()=>{delete this.chartPosition})),i=i.parentElement;this.eventsToUnbind.push(h(t,"touchstart",this.onContainerTouchStart.bind(this),{passive:!1}),h(t,"touchmove",this.onContainerTouchMove.bind(this),{passive:!1})),S.unbindDocumentTouchEnd||(S.unbindDocumentTouchEnd=h(e,"touchend",this.onDocumentTouchEnd.bind(this),{passive:!1})),this.setPointerCapture(),h(this.chart,"redraw",this.setPointerCapture.bind(this))}setPointerCapture(){if(!n)return;let t=this.pointerCaptureEventsToUnbind,e=this.chart,i=e.container,s=y(e.options.tooltip?.followTouchMove,!0)&&e.series.some(t=>t.options.findNearestPointBy.indexOf("y")>-1);!this.hasPointerCapture&&s?(t.push(h(i,"pointerdown",t=>{t.target?.hasPointerCapture(t.pointerId)&&t.target?.releasePointerCapture(t.pointerId)}),h(i,"pointermove",t=>{e.pointer?.getPointFromEvent(t)?.onMouseOver(t)})),e.styledMode||d(i,{"touch-action":"none"}),i.className+=" highcharts-no-touch-action",this.hasPointerCapture=!0):this.hasPointerCapture&&!s&&(t.forEach(t=>t()),t.length=0,e.styledMode||d(i,{"touch-action":y(e.options.chart.style?.["touch-action"],"manipulation")}),i.className=i.className.replace(" highcharts-no-touch-action",""),this.hasPointerCapture=!1)}setHoverChartIndex(t){let i=this.chart,s=e.charts[y(S.hoverChartIndex,-1)];s&&s!==i&&s.pointer?.onContainerMouseLeave(t||{relatedTarget:i.container}),s&&s.mouseIsDown||(S.hoverChartIndex=i.index)}touch(t,e){let i;let{chart:s,pinchDown:r=[]}=this;this.setHoverChartIndex(),1===t.touches.length?(t=this.normalize(t),s.isInsidePlot(t.chartX-s.plotLeft,t.chartY-s.plotTop,{visiblePlotOnly:!0})&&!s.openMenu?(e&&this.runPointActions(t),"touchmove"===t.type&&(i=!!r[0]&&Math.pow(r[0].chartX-t.chartX,2)+Math.pow(r[0].chartY-t.chartY,2)>=16),y(i,!0)&&this.pinch(t)):e&&this.reset()):2===t.touches.length&&this.pinch(t)}touchSelect(t){return!!(this.chart.zooming.singleTouch&&t.touches&&1===t.touches.length)}zoomOption(t){let e=this.chart,i=e.inverted,s=e.zooming.type||"",r,o;/touch/.test(t.type)&&(s=y(e.zooming.pinchType,s)),this.zoomX=r=/x/.test(s),this.zoomY=o=/y/.test(s),this.zoomHor=r&&!i||o&&i,this.zoomVert=o&&!i||r&&i,this.hasZoom=r||o}}return(s=S||(S={})).compose=function(t){b(a,"Core.Pointer")&&h(t,"beforeRender",function(){this.pointer=new s(this,this.options)})},S}),i(e,"Core/Legend/Legend.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Series/Point.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o){var a;let{animObject:n,setAnimation:h}=t,{format:l}=e,{composed:d,marginNames:c}=i,{distribute:p}=r,{addEvent:u,createElement:g,css:f,defined:m,discardElement:x,find:y,fireEvent:b,isNumber:v,merge:S,pick:C,pushUnique:k,relativeLength:M,stableSort:w,syncTimeout:A}=o;class T{constructor(t,e){this.allItems=[],this.initialItemY=0,this.itemHeight=0,this.itemMarginBottom=0,this.itemMarginTop=0,this.itemX=0,this.itemY=0,this.lastItemY=0,this.lastLineHeight=0,this.legendHeight=0,this.legendWidth=0,this.maxItemWidth=0,this.maxLegendWidth=0,this.offsetWidth=0,this.padding=0,this.pages=[],this.symbolHeight=0,this.symbolWi
23499dth=0,this.titleHeight=0,this.totalItemWidth=0,this.widthOption=0,this.chart=t,this.setOptions(e),e.enabled&&(this.render(),u(this.chart,"endResize",function(){this.legend.positionCheckboxes()})),u(this.chart,"render",()=>{this.options.enabled&&this.proximate&&(this.proximatePositions(),this.positionItems())})}setOptions(t){let e=C(t.padding,8);this.options=t,this.chart.styledMode||(this.itemStyle=t.itemStyle,this.itemHiddenStyle=S(this.itemStyle,t.itemHiddenStyle)),this.itemMarginTop=t.itemMarginTop,this.itemMarginBottom=t.itemMarginBottom,this.padding=e,this.initialItemY=e-5,this.symbolWidth=C(t.symbolWidth,16),this.pages=[],this.proximate="proximate"===t.layout&&!this.chart.inverted,this.baseline=void 0}update(t,e){let i=this.chart;this.setOptions(S(!0,this.options,t)),this.destroy(),i.isDirtyLegend=i.isDirtyBox=!0,C(e,!0)&&i.redraw(),b(this,"afterUpdate",{redraw:e})}colorizeItem(t,e){let{area:i,group:s,label:r,line:o,symbol:a}=t.legendItem||{};if(s?.[e?"removeClass":"addClass"]("highcharts-legend-item-hidden"),!this.chart.styledMode){let{itemHiddenStyle:s={}}=this,n=s.color,{fillColor:h,fillOpacity:l,lineColor:d,marker:c}=t.options,p=t=>(!e&&(t.fill&&(t.fill=n),t.stroke&&(t.stroke=n)),t);r?.css(S(e?this.itemStyle:s)),o?.attr(p({stroke:d||t.color})),a&&a.attr(p(c&&a.isMarker?t.pointAttribs():{fill:t.color})),i?.attr(p({fill:h||t.color,"fill-opacity":h?1:l??.75}))}b(this,"afterColorizeItem",{item:t,visible:e})}positionItems(){this.allItems.forEach(this.positionItem,this),this.chart.isResizing||this.positionCheckboxes()}positionItem(t){let{group:e,x:i=0,y:s=0}=t.legendItem||{},r=this.options,o=r.symbolPadding,a=!r.rtl,n=t.checkbox;if(e&&e.element){let r={translateX:a?i:this.legendWidth-i-2*o-4,translateY:s};e[m(e.translateY)?"animate":"attr"](r,void 0,()=>{b(this,"afterPositionItem",{item:t})})}n&&(n.x=i,n.y=s)}destroyItem(t){let e=t.checkbox,i=t.legendItem||{};for(let t of["group","label","line","symbol"])i[t]&&(i[t]=i[t].destroy());e&&x(e),t.legendItem=void 0}destroy(){for(let t of this.getAllItems())this.destroyItem(t);for(let t of["clipRect","up","down","pager","nav","box","title","group"])this[t]&&(this[t]=this[t].destroy());this.display=null}positionCheckboxes(){let t;let e=this.group&&this.group.alignAttr,i=this.clipHeight||this.legendHeight,s=this.titleHeight;e&&(t=e.translateY,this.allItems.forEach(function(r){let o;let a=r.checkbox;a&&(o=t+s+a.y+(this.scrollOffset||0)+3,f(a,{left:e.translateX+r.checkboxOffset+a.x-20+"px",top:o+"px",display:this.proximate||o>t-6&&o<t+i-6?"":"none"}))},this))}renderTitle(){let t=this.options,e=this.padding,i=t.title,s,r=0;i.text&&(this.title||(this.title=this.chart.renderer.label(i.text,e-3,e-4,void 0,void 0,void 0,t.useHTML,void 0,"legend-title").attr({zIndex:1}),this.chart.styledMode||this.title.css(i.style),this.title.add(this.group)),i.width||this.title.css({width:this.maxLegendWidth+"px"}),r=(s=this.title.getBBox()).height,this.offsetWidth=s.width,this.contentGroup.attr({translateY:r})),this.titleHeight=r}setText(t){let e=this.options;t.legendItem.label.attr({text:e.labelFormat?l(e.labelFormat,t,this.chart):e.labelFormatter.call(t)})}renderItem(t){let e=t.legendItem=t.legendItem||{},i=this.chart,s=i.renderer,r=this.options,o="horizontal"===r.layout,a=this.symbolWidth,n=r.symbolPadding||0,h=this.itemStyle,l=this.itemHiddenStyle,d=o?C(r.itemDistance,20):0,c=!r.rtl,p=!t.series,u=!p&&t.series.drawLegendSymbol?t.series:t,g=u.options,f=!!this.createCheckboxForItem&&g&&g.showCheckbox,m=r.useHTML,x=t.options.className,y=e.label,b=a+n+d+(f?20:0);!y&&(e.group=s.g("legend-item").addClass("highcharts-"+u.type+"-series highcharts-color-"+t.colorIndex+(x?" "+x:"")+(p?" highcharts-series-"+t.index:"")).attr({zIndex:1}).add(this.scrollGroup),e.label=y=s.text("",c?a+n:-n,this.baseline||0,m),i.styledMode||y.css(S(t.visible?h:l)),y.attr({align:c?"left":"right",zIndex:2}).add(e.group),!this.baseline&&(this.fontMetrics=s.fontMetrics(y),this.baseline=this.fontMetrics.f+3+this.itemMarginTop,y.attr("y",this.baseline),this.symbolHeight=C(r.symbolHeight,this.fontMetrics.f),r.squareSymbol&&(this.symbolWi
23499dth=C(r.symbolWidth,Math.max(this.symbolHeight,16)),b=this.symbolWidth+n+d+(f?20:0),c&&y.attr("x",this.symbolWidth+n))),u.drawLegendSymbol(this,t),this.setItemEvents&&this.setItemEvents(t,y,m)),f&&!t.checkbox&&this.createCheckboxForItem&&this.createCheckboxForItem(t),this.colorizeItem(t,t.visible),(i.styledMode||!h.width)&&y.css({width:(r.itemWidth||this.widthOption||i.spacingBox.width)-b+"px"}),this.setText(t);let v=y.getBBox(),k=this.fontMetrics&&this.fontMetrics.h||0;t.itemWidth=t.checkboxOffset=r.itemWidth||e.labelWidth||v.width+b,this.maxItemWidth=Math.max(this.maxItemWidth,t.itemWidth),this.totalItemWidth+=t.itemWidth,this.itemHeight=t.itemHeight=Math.round(e.labelHeight||(v.height>1.5*k?v.height:k))}layoutItem(t){let e=this.options,i=this.padding,s="horizontal"===e.layout,r=t.itemHeight,o=this.itemMarginBottom,a=this.itemMarginTop,n=s?C(e.itemDistance,20):0,h=this.maxLegendWidth,l=e.alignColumns&&this.totalItemWidth>h?this.maxItemWidth:t.itemWidth,d=t.legendItem||{};s&&this.itemX-i+l>h&&(this.itemX=i,this.lastLineHeight&&(this.itemY+=a+this.lastLineHeight+o),this.lastLineHeight=0),this.lastItemY=a+this.itemY+o,this.lastLineHeight=Math.max(r,this.lastLineHeight),d.x=this.itemX,d.y=this.itemY,s?this.itemX+=l:(this.itemY+=a+r+o,this.lastLineHeight=r),this.offsetWidth=this.widthOption||Math.max((s?this.itemX-i-(t.checkbox?0:n):l)+i,this.offsetWidth)}getAllItems(){let t=[];return this.chart.series.forEach(function(e){let i=e&&e.options;e&&C(i.showInLegend,!m(i.linkedTo)&&void 0,!0)&&(t=t.concat((e.legendItem||{}).labels||("point"===i.legendType?e.data:e)))}),b(this,"afterGetAllItems",{allItems:t}),t}getAlignment(){let t=this.options;return this.proximate?t.align.charAt(0)+"tv":t.floating?"":t.align.charAt(0)+t.verticalAlign.charAt(0)+t.layout.charAt(0)}adjustMargins(t,e){let i=this.chart,s=this.options,r=this.getAlignment();r&&[/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/].forEac
vendor: 5,700 bytes, line 23499
23499h(function(o,a){o.test(r)&&!m(t[a])&&(i[c[a]]=Math.max(i[c[a]],i.legend[(a+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][a]*s[a%2?"x":"y"]+C(s.margin,12)+e[a]+(i.titleOffset[a]||0)))})}proximatePositions(){let t;let e=this.chart,i=[],s="left"===this.options.align;for(let r of(this.allItems.forEach(function(t){let r,o,a=s,n,h;t.yAxis&&(t.xAxis.options.reversed&&(a=!a),t.points&&(r=y(a?t.points:t.points.slice(0).reverse(),function(t){return v(t.plotY)})),o=this.itemMarginTop+t.legendItem.label.getBBox().height+this.itemMarginBottom,h=t.yAxis.top-e.plotTop,n=t.visible?(r?r.plotY:t.yAxis.height)+(h-.3*o):h+t.yAxis.height,i.push({target:n,size:o,item:t}))},this),p(i,e.plotHeight)))t=r.item.legendItem||{},v(r.pos)&&(t.y=e.plotTop-e.spacing[0]+r.pos)}render(){let t=this.chart,e=t.renderer,i=this.options,s=this.padding,r=this.getAllItems(),o,a,n,h=this.group,l,d=this.box;this.itemX=s,this.itemY=this.initialItemY,this.offsetWidth=0,this.lastItemY=0,this.widthOption=M(i.width,t.spacingBox.width-s),l=t.spacingBox.width-2*s-i.x,["rm","lm"].indexOf(this.getAlignment().substring(0,2))>-1&&(l/=2),this.maxLegendWidth=this.widthOption||l,h||(this.group=h=e.g("legend").addClass(i.className||"").attr({zIndex:7}).add(),this.contentGroup=e.g().attr({zIndex:1}).add(h),this.scrollGroup=e.g().add(this.contentGroup)),this.renderTitle(),w(r,(t,e)=>(t.options&&t.options.legendIndex||0)-(e.options&&e.options.legendIndex||0)),i.reversed&&r.reverse(),this.allItems=r,this.display=o=!!r.length,this.lastLineHeight=0,this.maxItemWidth=0,this.totalItemWidth=0,this.itemHeight=0,r.forEach(this.renderItem,this),r.forEach(this.layoutItem,this),a=(this.widthOption||this.offsetWidth)+s,n=this.lastItemY+this.lastLineHeight+this.titleHeight,n=this.handleOverflow(n)+s,d||(this.box=d=e.rect().addClass("highcharts-legend-box").attr({r:i.borderRadius}).add(h)),t.styledMode||d.attr({stroke:i.borderColor,"stroke-width":i.borderWidth||0,fill:i.backgroundColor||"none"}).shadow(i.shadow),a>0&&n>0&&d[d.placed?"animate":"attr"](d.crisp.call({},{x:0,y:0,width:a,height:n},d.strokeWidth())),h[o?"show":"hide"](),t.styledMode&&"none"===h.getStyle("display")&&(a=n=0),this.legendWidth=a,this.legendHeight=n,o&&this.align(),this.proximate||this.positionItems(),b(this,"afterRender")}align(t=this.chart.spacingBox){let e=this.chart,i=this.options,s=t.y;/(lth|ct|rth)/.test(this.getAlignment())&&e.titleOffset[0]>0?s+=e.titleOffset[0]:/(lbh|cb|rbh)/.test(this.getAlignment())&&e.titleOffset[2]>0&&(s-=e.titleOffset[2]),s!==t.y&&(t=S(t,{y:s})),e.hasRendered||(this.group.placed=!1),this.group.align(S(i,{width:this.legendWidth,height:this.legendHeight,verticalAlign:this.proximate?"top":i.verticalAlign}),!0,t)}handleOverflow(t){let e=this,i=this.chart,s=i.renderer,r=this.options,o=r.y,a="top"===r.verticalAlign,n=this.padding,h=r.maxHeight,l=r.navigation,d=C(l.animation,!0),c=l.arrowSize||12,p=this.pages,u=this.allItems,g=function(t){"number"==typeof t?S.attr({height:t}):S&&(e.clipRect=S.destroy(),e.contentGroup.clip()),e.contentGroup.div&&(e.contentGroup.div.style.clip=t?"rect("+n+"px,9999px,"+(n+t)+"px,0)":"auto")},f=function(t){return e[t]=s.circle(0,0,1.3*c).translate(c/2,c/2).add(v),i.styledMode||e[t].attr("fill","rgba(0,0,0,0.0001)"),e[t]},m,x,y,b=i.spacingBox.height+(a?-o:o)-n,v=this.nav,S=this.clipRect;return"horizontal"!==r.layout||"middle"===r.verticalAlign||r.floating||(b/=2),h&&(b=Math.min(b,h)),p.length=0,t&&b>0&&t>b&&!1!==l.enabled?(this.clipHeight=m=Math.max(b-20-this.titleHeight-n,0),this.currentPage=C(this.currentPage,1),this.fullHeight=t,u.forEach((t,e)=>{let i=(y=t.legendItem||{}).y||0,s=Math.round(y.label.getBBox().height),r=p.length;(!r||i-p[r-1]>m&&(x||i)!==p[r-1])&&(p.push(x||i),r++),y.pageIx=r-1,x&&((u[e-1].legendItem||{}).pageIx=r-1),e===u.length-1&&i+s-p[r-1]>m&&i>p[r-1]&&(p.push(i),y.pageIx=r),i!==x&&(x=i)}),S||(S=e.clipRect=s.clipRect(0,n-2,9999,0),e.contentGroup.clip(S)),g(m),v||(this.nav=v=s.g().attr({zIndex:1}).add(this.group),this.up=s.symbol("triangle",0,0,c,c).add(v),f("upTracker").on("click",function(){e.scroll(-1,d)}),this.pager=s.text("",15,10).addClass("highcharts-legend-navigation"),!i.styledMode&&l.style&&this.pager.css(l.style),this.pager.add(v),this.down=s.symbol("triangle-down",0,0,c,c).add(v),f("downTracker").on("click",function(){e.scroll(1,d)})),e.scroll(0),t=b):v&&(g(),this.nav=v.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0),t}scroll(t,e){let i=this.chart,s=this.pages,r=s.length,o=this.clipHeight,a=this.options.navigation,l=this.pager,d=this.padding,c=this.currentPage+t;c>r&&(c=r),c>0&&(void 0!==e&&h(e,i),this.nav.attr({translateX:d,translateY:o+this.padding+7+this.titleHeight,visibility:"inherit"}),[this.up,this.upTracker].forEach(function(t){t.attr({class:1===c?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"})}),l.attr({text:c+"/"+r}),[this.down,this.downTracker].forEach(function(t){t.attr({x:18+this.pager.getBBox().width,class:c===r?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"})},this),i.styledMode||(this.up.attr({fill:1===c?a.inactiveColor:a.activeColor}),this.upTracker.css({cursor:1===c?"default":"pointer"}),this.down.attr({fill:c===r?a.inactiveColor:a.activeColor}),this.downTracker.css({cursor:c===r?"default":"pointer"})),this.scrollOffset=-s[c-1]+this.initialItemY,this.scrollGroup.animate({translateY:this.scrollOffset}),this.currentPage=c,this.positionCheckboxes(),A(()=>{b(this,"afterScroll",{currentPage:c})},n(C(e,i.renderer.globalAnimation,!0)).duration))}setItemEvents(t,e,i){let r=this,o=t.legendItem||{},a=r.chart.renderer.boxWrapper,n=t instanceof s,h="highcharts-legend-"+(n?"point":"series")+"-active",l=r.chart.styledMode,d=i?[e,o.symbol]:[o.group],c=e=>
23499{r.allItems.forEach(i=>{t!==i&&[i].concat(i.linkedSeries||[]).forEach(t=>{t.setState(e,!n)})})};for(let i of d)i&&i.on("mouseover",function(){t.visible&&c("inactive"),t.setState("hover"),t.visible&&a.addClass(h),l||e.css(r.options.itemHoverStyle)}).on("mouseout",function(){r.chart.styledMode||e.css(S(t.visible?r.itemStyle:r.itemHiddenStyle)),c(""),a.removeClass(h),t.setState()}).on("click",function(e){let i="legendItemClick",s=function(){t.setVisible&&t.setVisible(),c(t.visible?"inactive":"")};a.removeClass(h),e={browserEvent:e},t.firePointEvent?t.firePointEvent(i,e,s):b(t,i,e,s)})}createCheckboxForItem(t){t.checkbox=g("input",{type:"checkbox",className:"highcharts-legend-checkbox",checked:t.selected,defaultChecked:t.selected},this.options.itemCheckboxStyle,this.chart.container),u(t.checkbox,"click",function(e){let i=e.target;b(t.series||t,"checkboxClick",{checked:i.checked,item:t},function(){t.select()})})}}return(a=T||(T={})).compose=function(t){k(d,"Core.Legend")&&u(t,"beforeMargins",function(){this.legend=new a(this,this.options.legend)})},T}),i(e,"Core/Legend/LegendSymbol.js",[e["Core/Utilities.js"]],function(t){var e;let{extend:i,merge:s,pick:r}=t;return function(t){function e(t,e,o){let a=this.legendItem=this.legendItem||{},{chart:n,options:h}=this,{baseline:l=0,symbolWidth:d,symbolHeight:c}=t,p=this.symbol||"circle",u=c/2,g=n.renderer,f=a.group,m=l-Math.round(c*(o?.4:.3)),x={},y,b=h.marker,v=0;if(n.styledMode||(x["stroke-width"]=Math.min(h.lineWidth||0,24),h.dashStyle?x.dashstyle=h.dashStyle:"square"===h.linecap||(x["stroke-linecap"]="round")),a.line=g.path().addClass("highcharts-graph").attr(x).add(f),o&&(a.area=g.path().addClass("highcharts-area").add(f)),x["stroke-linecap"]&&(v=Math.min(a.line.strokeWidth(),d)/2),d){let t=[["M",v,m],["L",d-v,m]];a.line.attr({d:t}),a.area?.attr({d:[...t,["L",d-v,l],["L",v,l]]})}if(b&&!1!==b.enabled&&d){let t=Math.min(r(b.radius,u),u);0===p.indexOf("url")&&(b=s(b,{width:c,height:c}),t=0),a.symbol=y=g.symbol(p,d/2-t,m-t,2*t,2*t,i({context:"legend"},b)).addClass("highcharts-point").add(f),y.isMarker=!0}}t.areaMarker=function(t,i){e.call(this,t,i,!0)},t.lineMarker=e,t.rectangle=function(t,e){let i=e.legendItem||{},s=t.options,o=t.symbolHeight,a=s.squareSymbol,n=a?o:t.symbolWidth;i.symbol=this.chart.renderer.rect(a?(t.symbolWidth-o)/2:0,t.baseline-o+1,n,o,r(t.options.symbolRadius,o/2)).addClass("highcharts-point").attr({zIndex:3}).add(i.group)}}(e||(e={})),e}),i(e,"Core/Series/SeriesDefaults.js",[],function(){return{lineWidth:2,allowPointSelect:!1,crisp:!0,showCheckbox:!1,animation:{duration:1e3},enableMouseTracking:!0,events:{},marker:{enabledThreshold:2,lineColor:"#ffffff",lineWidth:0,radius:4,states:{normal:{animation:!0},hover:{animation:{duration:150},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:"#cccccc",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{animation:{},align:"center",borderWidth:0,defer:!0,formatter:function(){let{numberFormatter:t}=this.series.chart;return"number"!=typeof this.y?"":t(this.y,-1)},padding:5,style:{fontSize:"0.7em",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0},cropThreshold:300,opacity:1,pointRange:0,softThreshold:!0,states:{normal:{animation:!0},hover:{animation:{duration:150},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{animation:{duration:0}},inactive:{animation:{duration:150},opacity:.2}},stickyTracking:!0,turboThreshold:1e3,findNearestPointBy:"x"}}),i(e,"Core/Series/SeriesRegistry.js",[e["Core/Globals.js"],e["Core/Defaults.js"],e["Core/Series/Point.js"],e["Core/Utilities.js"]],function(t,e,i,s){var r;let{defaultOptions:o}=e,{extend:a,extendClass:n,merge:h}=s;return function(e){function s(t,s){let r=o.plotOptions||{},a=s.defaultOptions,n=s.prototype;return n.type=t,n.pointClass||(n.pointClass=i),!e.seriesTypes[t]&&(a&&(r[t]=a),e.seriesTypes[t]=s,!0)}e.seriesTypes=t.seriesTypes,e.registerSeriesType=s,e.seriesType=function(t,r,l,d,c){let p=o.plotOptions||{};if(r=r||"",p[t]=h(p[r],l),delete e.seriesTypes[t],s(t,n(e.seriesTypes[r]||function(){},d)),e.seriesTypes[t].prototype.type=t,c){class s extends i{}a(s.prototype,c),e.seriesTypes[t].prototype.pointClass=s}return e.seriesTypes[t]}}(r||(r={})),r}
23499),i(e,"Core/Series/Series.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Defaults.js"],e["Core/Foundation.js"],e["Core/Globals.js"],e["Core/Legend/LegendSymbol.js"],e["Core/Series/Point.js"],e["Core/Series/SeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n,h,l){let{animObject:d,setAnimation:c}=t,{defaultOptions:p}=e,{registerEventOptions:u}=i,{svg:g,win:f}=s,{seriesTypes:m}=n,{arrayMax:x,arrayMin:y,clamp:b,correctFloat:v,crisp:S,defined:C,destroyObjectProperties:k,diffObjects:M,erase:w,error:A,extend:T,find:P,fireEvent:L,getClosestDistance:O,getNestedProperty:D,insertItem:E,isArray:I,isNumber:j,isString:B,merge:R,objectEach:z,pick:N,removeEvent:W,splat:G,syncTimeout:H}=l;class X{constructor(){this.zoneAxis="y"}init(t,e){let i;L(this,"init",{options:e});let s=this,r=t.series;this.eventsToUnbind=[],s.chart=t,s.options=s.setOptions(e);let o=s.options,a=!1!==o.visible;s.linkedSeries=[],s.bindAxes(),T(s,{name:o.name,state:"",visible:a,selected:!0===o.selected}),u(this,o);let n=o.events;(n&&n.click||o.point&&o.point.events&&o.point.events.click||o.allowPointSelect)&&(t.runTrackerClick=!0),s.getColor(),s.getSymbol(),s.parallelArrays.forEach(function(t){s[t+"Data"]||(s[t+"Data"]=[])}),s.isCartesian&&(t.hasCartesianSeries=!0),r.length&&(i=r[r.length-1]),s._i=N(i&&i._i,-1)+1,s.opacity=s.options.opacity,t.orderItems("series",E(this,r)),o.dataSorting&&o.dataSorting.enabled?s.setDataSortingOptions():s.points||s.data||s.setData(o.data,!1),L(this,"afterInit")}is(t){return m[t]&&this instanceof m[t]}bindAxes(){let t;let e=this,i=e.options,s=e.chart;L(this,"bindAxes",null,function(){(e.axisTypes||[]).forEach(function(r){(s[r]||[]).forEach(function(s){t=s.options,
23499(N(i[r],0)===s.index||void 0!==i[r]&&i[r]===t.id)&&(E(e,s.series),e[r]=s,s.isDirty=!0)}),e[r]||e.optionalAxis===r||A(18,!0,s)})}),L(this,"afterBindAxes")}updateParallelArrays(t,e,i){let s=t.series,r=j(e)?function(i){let r="y"===i&&s.toYData?s.toYData(t):t[i];s[i+"Data"][e]=r}:function(t){Array.prototype[e].apply(s[t+"Data"],i)};s.parallelArrays.forEach(r)}hasData(){return this.visible&&void 0!==this.dataMax&&void 0!==this.dataMin||this.visible&&this.yData&&this.yData.length>0}hasMarkerChanged(t,e){let i=t.marker,s=e.marker||{};return i&&(s.enabled&&!i.enabled||s.symbol!==i.symbol||s.height!==i.height||s.width!==i.width)}autoIncrement(t){let e=this.options,i=e.pointIntervalUnit,s=e.relativeXValue,r=this.chart.time,o=this.xIncrement,a,n;return(o=N(o,e.pointStart,0),this.pointInterval=n=N(this.pointInterval,e.pointInterval,1),s&&j(t)&&(n*=t),i&&(a=new r.Date(o),"day"===i?r.set("Date",a,r.get("Date",a)+n):"month"===i?r.set("Month",a,r.get("Month",a)+n):"year"===i&&r.set("FullYear",a,r.get("FullYear",a)+n),n=a.getTime()-o),s&&j(t))?o+n:(this.xIncrement=o+n,o)}setDataSortingOptions(){let t=this.options;T(this,{requireSorting:!1,sorted:!1,enabledDataSorting:!0,allowDG:!1}),C(t.pointRange)||(t.pointRange=1)}setOptions(t){let e;let i=this.chart,s=i.options.plotOptions,r=i.userOptions||{},o=R(t),a=i.styledMode,n={plotOptions:s,userOptions:o};L(this,"setOptions",n);let h=n.plotOptions[this.type],l=r.plotOptions||{},d=l.series||{},c=p.plotOptions[this.type]||{},u=l[this.type]||{};this.userOptions=n.userOptions;let g=R(h,s.series,u,o);this.tooltipOptions=R(p.tooltip,p.plotOptions.series?.tooltip,c?.tooltip,i.userOptions.tooltip,l.series?.tooltip,u.tooltip,o.tooltip),this.stickyTracking=N(o.stickyTracking,u.stickyTracking,d.stickyTracking,!!this.tooltipOptions.shared&&!this.noSharedTooltip||g.stickyTracking),null===h.marker&&delete g.marker,this.zoneAxis=g.zoneAxis||"y";let f=this.zones=(g.zones||[]).map(t=>({...t}));return(g.negativeColor||g.negativeFillColor)&&!g.zones&&(e={value:g[this.zoneAxis+"Threshold"]||g.threshold||0,className:"highcharts-negative"},a||(e.color=g.negativeColor,e.fillColor=g.negativeFillColor),f.push(e)),f.length&&C(f[f.length-1].value)&&f.push(a?{}:{color:this.color,fillColor:this.fillColor}),L(this,"afterSetOptions",{options:g}),g}getName(){return N(this.options.name,"Series "+(this.index+1))}getCyclic(t,e,i){let s,r;let o=this.chart,a=`${t}Index`,n=`${t}Counter`,h=i?.length||o.options.chart.colorCount;!e&&(C(r=N("color"===t?this.options.colorIndex:void 0,this[a]))?s=r:(o.series.length||(o[n]=0),s=o[n]%h,o[n]+=1),i&&(e=i[s])),void 0!==s&&(this[a]=s),this[t]=e}getColor(){this.chart.styledMode?this.getCyclic("color"):this.options.colorByPoint?this.color="#cccccc":this.getCyclic("color",this.options.color||p.plotOptions[this.type].color,this.chart.options.colors)}getPointsCollection(){return(this.hasGroupedData?this.points:this.data)||[]}getSymbol(){let t=this.options.marker;this.getCyclic("symbol",t.symbol,this.chart.options.symbols)}findPointIndex(t,e){let i,s,r;let a=t.id,n=t.x,h=this.points,l=this.options.dataSorting;if(a){let t=this.chart.get(a);t instanceof o&&(i=t)}else if(this.linkedParent||this.enabledDataSorting||this.options.relativeXValue){let e=e=>!e.touched&&e.index===t.index;if(l&&l.matchByName?e=e=>!e.touched&&e.name===t.name:this.options.relativeXValue&&(e=e=>!e.touched&&e.options.x===t.x),!(i=P(h,e)))return}return i&&void 0!==(r=i&&i.index)&&(s=!0),void 0===r&&j(n)&&(r=this.xData.indexOf(n,e)),-1!==r&&void 0!==r&&this.cropped&&(r=r>=this.cropStart?r-this.cropStart:r),!s&&j(r)&&h[r]&&h[r].touched&&(r=void 0),r}updateData(t,e){let i=this.options,s=i.dataSorting,r=this.points,o=[],a=this.requireSorting,n=t.length===r.length,h,l,d,c,p=!0;if(this.xIncrement=null,t.forEach(function(t,e){let l;let d=C(t)&&this.pointClass.prototype.optionsToObject.call({series:this},t)||{},p=d.x;d.id||j(p)?(-1===(l=this.findPointIndex(d,c))||void 0===l?o.push(t):r[l]&&t!==i.data[l]?(r[l].update(t,!1,null,!1),r[l].touched=!0,a&&(c=l+1)):r[l]&&(r[l].touched=!0),(!n||e!==l||s&&s.enabled||this.hasDerivedData)&&(h=!0)):o.push(t)},this),h)for(l=r.length;l--;)(d=r[l])&&!d.touched&&d.remove&&d.remove(!1,e);else!n||s&&s.enabled?p=!1:(t.forEach(function(t,e){t===r[e].y||r[e].destroyed||r[e].update(t,!1,null,!1)}),o.length=0);return r.forEach(function(t){t&&(t.touched=!1)}
23499),!!p&&(o.forEach(function(t){this.addPoint(t,!1,null,null,!1)},this),null===this.xIncrement&&this.xData&&this.xData.length&&(this.xIncrement=x(this.xData),this.autoIncrement()),!0)}setData(t,e=!0,i,s){let r=this,o=r.points,a=o&&o.length||0,n=r.options,h=r.chart,l=n.dataSorting,d=r.xAxis,c=n.turboThreshold,p=this.xData,u=this.yData,g=r.pointArrayMap,f=g&&g.length,m=n.keys,x,y,b,v=0,S=1,C=null,k;h.options.chart.allowMutatingData||(n.data&&delete r.options.data,r.userOptions.data&&delete r.userOptions.data,k=R(!0,t));let M=(t=k||t||[]).length;if(l&&l.enabled&&(t=this.sortData(t)),h.options.chart.allowMutatingData&&!1!==s&&M&&a&&!r.cropped&&!r.hasGroupedData&&r.visible&&!r.boosted&&(b=this.updateData(t,i)),!b){if(r.xIncrement=null,r.colorCounter=0,this.parallelArrays.forEach(function(t){r[t+"Data"].length=0}),c&&M>c){if(j(C=r.getFirstValidPoint(t)))for(x=0;x<M;x++)p[x]=this.autoIncrement(),u[x]=t[x];else if(I(C)){if(f){if(C.length===f)for(x=0;x<M;x++)p[x]=this.autoIncrement(),u[x]=t[x];else for(x=0;x<M;x++)y=t[x],p[x]=y[0],u[x]=y.slice(1,f+1)}else if(m&&(v=m.indexOf("x"),S=m.indexOf("y"),v=v>=0?v:0,S=S>=0?S:1),1===C.length&&(S=0),v===S)for(x=0;x<M;x++)p[x]=this.autoIncrement(),u[x]=t[x][S];else for(x=0;x<M;x++)y=t[x],p[x]=y[v],u[x]=y[S]}else A(12,!1,h)}else for(x=0;x<M;x++)y={series:r},r.pointClass.prototype.applyOptions.apply(y,[t[x]]),r.updateParallelArrays(y,x);for(u&&B(u[0])&&A(14,!0,h),r.data=[],r.options.data=r.userOptions.data=t,x=a;x--;)o[x]?.destroy();d&&(d.minRange=d.userMinRange),r.isDirty=h.isDirtyBox=!0,r.isDirtyData=!!o,i=!1}"point"===n.legendType&&(this.processData(),this.generatePoints()),e&&h.redraw(i)}sortData(t){let e=this,i=e.options.dataSorting.sortKey||"y",s=function(t,e){return C(e)&&t.pointClass.prototype.optionsToObject.call({series:t},e)||{}};return t.forEach(function(i,r){t[r]=s(e,i),t[r].index=r},this),t.concat().sort((t,e)=>{let s=D(i,t),r=D(i,e);return r<s?-1:r>s?1:0}).forEach(function(t,e){t.x=e},this),e.linkedSeries&&e.linkedSeries.forEach(function(e){let i=e.options,r=i.data;i.dataSorting&&i.dataSorting.enabled||!r||(r.forEach(function(i,o){r[o]=s(e,i),t[o]&&(r[o].x=t[o].x,r[o].index=o)}),e.setData(r,!1))}),t}getProcessedData(t){let e=this,i=e.xAxis,s=e.options.cropThreshold,r=i?.logarithmic,o=e.isCartesian,a,n,h=0,l,d,c,p=e.xData,u=e.yData,g=!1,f=p.length;i&&(d=(l=i.getExtremes()).min,c=l.max,g=!!(i.categories&&!i.names.length)),o&&e.sorted&&!t&&(!s||f>s||e.forceCrop)&&(p[f-1]<d||p[0]>c?(p=[],u=[]):e.yData&&(p[0]<d||p[f-1]>c)&&(p=(a=this.cropData(e.xData,e.yData,d,c)).xData,u=a.yData,h=a.start,n=!0));let m=O([r?p.map(r.log2lin):p],()=>e.requireSorting&&!g&&A(15,!1,e.chart));return{xData:p,yData:u,cropped:n,cropStart:h,closestPointRange:m}}processData(t){let e=this.xAxis;if(this.isCartesian&&!this.isDirty&&!e.isDirty&&!this.yAxis.isDirty&&!t)return!1;let i=this.getProcessedData();this.cropped=i.cropped,this.cropStart=i.cropStart,this.processedXData=i.xData,this.processedYData=i.yData,this.closestPointRange=this.basePointRange=i.closestPointRange,L(this,"afterProcessData")}cropData(t,e,i,s){let r=t.length,o,a,n=0,h=r;for(o=0;o<r;o++)if(t[o]>=i){n=Math.max(0,o-1);break}for(a=o;a<r;a++)if(t[a]>s){h=a+1;break}return{xData:t.slice(n,h),yData:e.slice(n,h),start:n,end:h}}generatePoints(){let t=this.options,e=this.processedData||t.data,i=this.processedXData,s=this.processedYData,r=this.pointClass,o=i.length,a=this.cropStart||0,n=this.hasGroupedData,h=t.keys,l=[],d=t.dataGrouping&&t.dataGrouping.groupAll?a:0,c,p,u,g,f=this.data;if(!f&&!n){let t=[];t.length=e.length,f=this.data=t}for(h&&n&&(this.options.keys=!1),g=0;g<o;g++)p=a+g,n?((u=new r(this,[i[g]].concat(G(s[g])))).dataGroup=this.groupMap[d+g],u.dataGroup.options&&(u.options=u.dataGroup.options,T(u,u.dataGroup.options),delete u.dataLabels)):(u=f[p])||void 0===e[p]||(f[p]=u=new r(this,e[p],i[g])),u&&(u.index=n?d+g:p,l[g]=u);if(this.options.keys=h,f&&(o!==(c=f.length)||n))for(g=0;g<c;g++)g!==a||n||(g+=o),f[g]&&(f[g].destroyElements(),f[g].plotX=void 0);this.data=f,this.points=l,L(this,"afterGeneratePoints")}getXExtremes(t){return{min:y(t),max:x(t)}}getExtremes(t,e){let i=this.xAxis,s=this.yAxis,r=[],o=this.requireSorting&&!this.is("column")?1:0,a=!!s&&s.positiveValuesOnly,n=e||this.getExtremesFromAll||this.options.getExtremesFromAll,{processedXData:h,processedYData:l}=this,d,c,p,u,g,f,m,b=0,v=0,S=0;if(this.cropped&&n){let t=this.getProcessedData(!0);h=t.xData,l=t.yData}let C=(t=t||this.stackedYData||l||[]).length,k=h||this.xData;for(i&&(b=(d=i.getExtremes()).min,v=d.max),f=0;f<C;f++)if(u=k[f],c=(j(g=t[f])||I(g))&&((j(g)?g>0:g.length)||!a),p=e||this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||!i||(k[f+o]||u)>=b&&(k[f-o]||u)<=v,c&&p){if(m=g.length)for(;m--;)j(g[m])&&(r[S++]=g[m]);else r[S++]=g}let M={activeYData:r,dataMin:y(r),dataMax:x(r)};return L(this,"afterGetExtremes",{dataExtremes:M}),M}applyExtremes(){let t=this.getExtremes();return this.dataMin=t.dataMin,this.dataMax=t.dataMax,t}getFirstValidPoint(t){let e=t.length,i=0,s=null;for(;null===s&&i<e;)s=t[i],i++;return s}translate(){this.processedXData||this.processData(),this.generatePoints();
23499let t=this.options,e=t.stacking,i=this.xAxis,s=i.categories,r=this.enabledDataSorting,o=this.yAxis,a=this.points,n=a.length,h=this.pointPlacementToXValue(),l=!!h,d=t.threshold,c=t.startFromThreshold?d:0,p,u,g,f,m=Number.MAX_VALUE;function x(t){return b(t,-1e5,1e5)}for(p=0;p<n;p++){let t;let n=a[p],y=n.x,b,S,k=n.y,M=n.low,w=e&&o.stacking?.stacks[(this.negStacks&&k<(c?0:d)?"-":"")+this.stackKey];u=i.translate(y,!1,!1,!1,!0,h),n.plotX=j(u)?v(x(u)):void 0,e&&this.visible&&w&&w[y]&&(f=this.getStackIndicator(f,y,this.index),!n.isNull&&f.key&&(S=(b=w[y]).points[f.key]),b&&I(S)&&(M=S[0],k=S[1],M===c&&f.key===w[y].base&&(M=N(j(d)?d:o.min)),o.positiveValuesOnly&&C(M)&&M<=0&&(M=void 0),n.total=n.stackTotal=N(b.total),n.percentage=C(n.y)&&b.total?n.y/b.total*100:void 0,n.stackY=k,this.irregularWidths||b.setOffset(this.pointXOffset||0,this.barW||0,void 0,void 0,void 0,this.xAxis))),n.yBottom=C(M)?x(o.translate(M,!1,!0,!1,!0)):void 0,this.dataModify&&(k=this.dataModify.modifyValue(k,p)),j(k)&&void 0!==n.plotX&&(t=j(t=o.translate(k,!1,!0,!1,!0))?x(t):void 0),n.plotY=t,n.isInside=this.isPointInside(n),n.clientX=l?v(i.translate(y,!1,!1,!1,!0,h)):u,n.negative=(n.y||0)<(d||0),n.category=N(s&&s[n.x],n.x),n.isNull||!1===n.visible||(void 0!==g&&(m=Math.min(m,Math.abs(u-g))),g=u),n.zone=this.zones.length?n.getZone():void 0,!n.graphic&&this.group&&r&&(n.isNew=!0)}this.closestPointRangePx=m,L(this,"afterTranslate")}getValidPoints(t,e,i){let s=this.chart;return(t||this.points||[]).filter(function(t){let{plotX:r,plotY:o}=t;return!!((i||!t.isNull&&j(o))&&(!e||s.isInsidePlot(r,o,{inverted:s.inverted})))&&!1!==t.visible})}getClipBox(){let{chart:t,xAxis:e,yAxis:i}=this,{x:s,y:r,width:o,height:a}=R(t.clipBox);return e&&e.len!==t.plotSizeX&&(o=e.len),i&&i.len!==t.plotSizeY&&(a=i.len),t.inverted&&!this.invertible&&([o,a]=[a,o]),{x:s,y:r,width:o,height:a}}getSharedClipKey(){return this.sharedClipKey=(this.options.xAxis||0)+","+(this.options.yAxis||0),this.sharedClipKey}setClip(){let{chart:t,group:e,markerGroup:i}=this,s=t.sharedClips,r=t.renderer,o=this.getClipBox(),a=this.getSharedClipKey(),n=s[a];n?n.animate(o):s[a]=n=r.clipRect(o),e&&e.clip(!1===this.options.clip?void 0:n),i&&i.clip()}animate(t){let{chart:e,group:i,markerGroup:s}=this,r=e.inverted,o=d(this.options.animation),a=[this.getSharedClipKey(),o.duration,o.easing,o.defer].join(","),n=e.sharedClips[a],h=e.sharedCl
23499ips[a+"m"];if(t&&i){let t=this.getClipBox();if(n)n.attr("height",t.height);else{t.width=0,r&&(t.x=e.plotHeight),n=e.renderer.clipRect(t),e.sharedClips[a]=n;let i={x:-99,y:-99,width:r?e.plotWidth+199:99,height:r?99:e.plotHeight+199};h=e.renderer.clipRect(i),e.sharedClips[a+"m"]=h}i.clip(n),s?.clip(h)}else if(n&&!n.hasClass("highcharts-animating")){let t=this.getClipBox(),i=o.step;(s?.element.childNodes.length||e.series.length>1)&&(o.step=function(t,e){i&&i.apply(e,arguments),"width"===e.prop&&h?.element&&h.attr(r?"height":"width",t+99)}),n.addClass("highcharts-animating").animate(t,o)}}afterAnimate(){this.setClip(),z(this.chart.sharedClips,(t,e,i)=>{t&&!this.chart.container.querySelector(`[clip-path="url(#${t.id})"]`)&&(t.destroy(),delete i[e])}),this.finishedAnimating=!0,L(this,"afterAnimate")}drawPoints(t=this.points){let e,i,s,r,o,a,n;let h=this.chart,l=h.styledMode,{colorAxis:d,options:c}=this,p=c.marker,u=this[this.specialGroup||"markerGroup"],g=this.xAxis,f=N(p.enabled,!g||!!g.isRadial||null,this.closestPointRangePx>=p.enabledThreshold*p.radius);if(!1!==p.enabled||this._hasPointMarkers)for(e=0;e<t.length;e++)if(r=(s=(i=t[e]).graphic)?"animate":"attr",o=i.marker||{},a=!!i.marker,(f&&void 0===o.enabled||o.enabled)&&!i.isNull&&!1!==i.visible){let t=N(o.symbol,this.symbol,"rect");n=this.markerAttribs(i,i.selected&&"select"),this.enabledDataSorting&&(i.startXPos=g.reversed?-(n.width||0):g.width);let e=!1!==i.isInside;if(!s&&e&&((n.width||0)>0||i.hasImage)&&(i.graphic=s=h.renderer.symbol(t,n.x,n.y,n.width,n.height,a?o:p).add(u),this.enabledDataSorting&&h.hasRendered&&(s.attr({x:i.startXPos}),r="animate")),s&&"animate"===r&&s[e?"show":"hide"](e).animate(n),s){let t=this.pointAttribs(i,l||!i.selected?void 0:"select");l?d&&s.css({fill:t.fill}):s[r](t)}s&&s.addClass(i.getClassName(),!0)}else s&&(i.graphic=s.destroy())}markerAttribs(t,e){let i=this.options,s=i.marker,r=t.marker||{},o=r.symbol||s.symbol,a={},n,h,l=N(r.radius,s&&s.radius);e&&(n=s.states[e],l=N((h=r.states&&r.states[e])&&h.radius,n&&n.radius,l&&l+(n&&n.radiusPlus||0))),t.hasImage=o&&0===o.indexOf("url"),t.hasImage&&(l=0);let d=t.pos();return j(l)&&d&&(i.crisp&&(d[0]=S(d[0],t.hasImage?0:"rect"===o?s?.lineWidth||0:1)),a.x=d[0]-l,a.y=d[1]-l),l&&(a.width=a.height=2*l),a}pointAttribs(t,e){let i=this.options.marker,s=t&&t.options,r=s&&s.marker||{},o=s&&s.color,a=t&&t.color,n=t&&t.zone&&t.zone.color,h,l,d=this.color,c,p,u=N(r.lineWidth,i.lineWidth),g=1;return d=o||n||a||d,c=r.fillColor||i.fillColor||d,p=r.lineColor||i.lineColor||d,e=e||"normal",h=i.states[e]||{},u=N((l=r.states&&r.states[e]||{}).lineWidth,h.lineWidth,u+N(l.lineWidthPlus,h.lineWidthPlus,0)),c=l.fillColor||h.fillColor||c,{stroke:p=l.lineColor||h.lineColor||p,"stroke-width":u,fill:c,opacity:g=N(l.opacity,h.opacity,g)}}destroy(t){let e,i,s;
vendor: 5,829 bytes, line 23499
23499let r=this,o=r.chart,a=/AppleWebKit\/533/.test(f.navigator.userAgent),n=r.data||[];for(L(r,"destroy",{keepEventsForUpdate:t}),this.removeEvents(t),(r.axisTypes||[]).forEach(function(t){(s=r[t])&&s.series&&(w(s.series,r),s.isDirty=s.forceRedraw=!0)}),r.legendItem&&r.chart.legend.destroyItem(r),e=n.length;e--;)(i=n[e])&&i.destroy&&i.destroy();for(let t of r.zones)k(t,void 0,!0);l.clearTimeout(r.animationTimeout),z(r,function(t,e){t instanceof h&&!t.survive&&t[a&&"group"===e?"hide":"destroy"]()}),o.hoverSeries===r&&(o.hoverSeries=void 0),w(o.series,r),o.orderItems("series"),z(r,function(e,i){t&&"hcEvents"===i||delete r[i]})}applyZones(){let{area:t,chart:e,graph:i,zones:s,points:r,xAxis:o,yAxis:a,zoneAxis:n}=this,{inverted:h,renderer:l}=e,d=this[`${n}Axis`],{isXAxis:c,len:p=0}=d||{},u=(i?.strokeWidth()||0)/2+1,g=(t,e=0,i=0)=>{h&&(i=p-i);let{translated:s=0,lineClip:r}=t,o=i-s;r?.push(["L",e,Math.abs(o)<u?i-u*(o<=0?-1:1):s])};if(s.length&&(i||t)&&d&&j(d.min)){let e=d.getExtremes().max,u=t=>{t.forEach((e,i)=>{("M"===e[0]||"L"===e[0])&&(t[i]=[e[0],c?p-e[1]:e[1],c?e[2]:p-e[2]])})};if(s.forEach(t=>{t.lineClip=[],t.translated=b(d.toPixels(N(t.value,e),!0)||0,0,p)}),i&&!this.showLine&&i.hide(),t&&t.hide(),"y"===n&&r.length<o.len)for(let t of r){let{plotX:e,plotY:i,zone:r}=t,o=r&&s[s.indexOf(r)-1];r&&g(r,e,i),o&&g(o,e,i)}let f=[],m=d.toPixels(d.getExtremes().min,!0);s.forEach(e=>{let s=e.lineClip||[],r=Math.round(e.translated||0);o.reversed&&s.reverse();let{clip:n,simpleClip:d}=e,p=0,g=0,x=o.len,y=a.len;c?(p=r,x=m):(g=r,y=m);let b=[["M",p,g],["L",x,g],["L",x,y],["L",p,y],["Z"]],v=[b[0],...s,b[1],b[2],...f,b[3],b[4]];f=s.reverse(),m=r,h&&(u(v),t&&u(b)),n?(n.animate({d:v}),d?.animate({d:b})):(n=e.clip=l.path(v),t&&(d=e.simpleClip=l.path(b))),i&&e.graph?.clip(n),t&&e.area?.clip(d)})}else this.visible&&(i&&i.show(),t&&t.show())}plotGroup(t,e,i,s,r){let o=this[t],a=!o,n={visibility:i,zIndex:s||.1};return C(this.opacity)&&!this.chart.styledMode&&"inactive"!==this.state&&(n.opacity=this.opacity),o||(this[t]=o=this.chart.renderer.g().add(r)),o.addClass("highcharts-"+e+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(C(this.colorIndex)?"highcharts-color-"+this.colorIndex+" ":"")+(this.options.className||"")+(o.hasClass("highcharts-tracker")?" highcharts-tracker":""),!0),o.attr(n)[a?"attr":"animate"](this.getPlotBox(e)),o}getPlotBox(t){let e=this.xAxis,i=this.yAxis,s=this.chart,r=s.inverted&&!s.polar&&e&&this.invertible&&"series"===t;return s.inverted&&(e=i,i=this.xAxis),{translateX:e?e.left:s.plotLeft,translateY:i?i.top:s.plotTop,rotation:r?90:0,rotationOriginX:r?(e.len-i.len)/2:0,rotationOriginY:r?(e.len+i.len)/2:0,scaleX:r?-1:1,scaleY:1}}removeEvents(t){let{eventsToUnbind:e}=this;t||W(this),e.length&&(e.forEach(t=>{t()}),e.length=0)}render(){let t=this,{chart:e,options:i,hasRendered:s}=t,r=d(i.animation),o=t.visible?"inherit":"hidden",a=i.zIndex,n=e.seriesGroup,h=t.finishedAnimating?0:r.duration;L(this,"render"),t.plotGroup("group","series",o,a,n),t.markerGroup=t.plotGroup("markerGroup","markers",o,a,n),!1!==i.clip&&t.setClip(),h&&t.animate?.(!0),t.drawGraph&&(t.drawGraph(),t.applyZones()),t.visible&&t.drawPoints(),t.drawDataLabels?.(),t.redrawPoints?.(),i.enableMouseTracking&&t.drawTracker?.(),h&&t.animate?.(),s||(h&&r.defer&&(h+=r.defer),t.animationTimeout=H(()=>{t.afterAnimate()},h||0)),t.isDirty=!1,t.hasRendered=!0,L(t,"afterRender")}redraw(){let t=this.isDirty||this.isDirtyData;this.translate(),this.render(),t&&delete this.kdTree}reserveSpace(){return this.visible||!this.chart.options.chart.ignoreHiddenSeries}searchPoint(t,e){let{xAxis:i,yAxis:s}=this,r=this.chart.inverted;return this.searchKDTree({clientX:r?i.len-t.chartY+i.pos:t.chartX-i.pos,plotY:r?s.len-t.chartX+s.pos:t.chartY-s.pos},e,t)}buildKDTree(t){this.buildingKdTree=!0;let e=this,i=e.options.findNearestPointBy.indexOf("y")>-1?2:1;delete e.kdTree,H(function(){e.kdTree=function t(i,s,r){let o,a;let n=i?.length;if(n)return o=e.kdAxisArray[s%r],i.sort((t,e)=>(t[o]||0)-(e[o]||0)),{point:i[a=Math.floor(n/2)],left:t(i.slice(0,a),s+1,r),right:t(i.slice(a+1),s+1,r)}}(e.getValidPoints(void 0,!e.directTouch),i,i),e.buildingKdTree=!1},e.options.kdNow||t?.type==="touchstart"?0:1)}searchKDTree(t,e,i){let s=this,[r,o]=this.kdAxisArray,a=e?"distX":"dist",n=(s.options.findNearestPointBy||"").indexOf("y")>-1?2:1,h=!!s.isBubble;if(this.kdTree||this.buildingKdTree||this.buildKDTree(i),this.kdTree)return function t(e,i,n,l){let d=i.point,c=s.kdAxisArray[n%l],p,u,g=d;!function(t,e){let i=t[r],s=e[r],a=C(i)&&C(s)?i-s:null,n=t[o],l=e[o],d=C(n)&&C(l)?n-l:0,c=h&&e.marker?.radius||0;e.dist=Math.sqrt((a&&a*a||0)+d*d)-c,e.distX=C(a)?Math.abs(a)-c:Number.MAX_VALUE}(e,d);let f=(e[c]||0)-(d[c]||0)+(h&&d.marker?.radius||0),m=f<0?"left":"right",x=f<0?"right":"left";return i[m]&&(g=(p=t(e,i[m],n+1,l))[a]<g[a]?p:d),i[x]&&Math.sqrt(f*f)<g[a]&&(g=(u=t(e,i[x],n+1,l))[a]<g[a]?u:g),g}(t,this.kdTree,n,n)}pointPlacementToXValue(){let{options:t,xAxis:e}=this,i=t.pointPlacement;return"between"===i&&(i=e.reversed?-.5:.5),j(i)?i*(t.pointRange||e.pointRange):0}isPointInside(t){let{chart:e,xAxis:i,yAxis:s}=this,{plotX:r=-1,plotY:o=-1}=t;return o>=0&&o<=(s?s.len:e.plotHeight)&&r>=0&&r<=(i?i.len:e.plotWidth)}drawTracker(){let t=this,e=t.options,i=e.trackByArea,s=[].concat((i?t.areaPath:t.graphPath)||[]),r=t.chart,o=r.pointer,a=r.renderer,n=r.options.tooltip?.snap||0,h=()=>{e.enableMouseTracking&&r.hoverSeries!==t&&t.onMouseOver()},l="rgba(192,192,192,"+(g?1e-4:.002)+")",d=t.tracker;d?d.attr({d:s}):t.graph&&(t.tracker=d=a.path(s).attr({visibility:t.visible?"inherit":"hidden",zIndex:2}).addClass(i?"highcharts-tracker-area":"highcharts-tracker-line").add(t.group),r.styledMode||d.attr({"stroke-linecap":"round","stroke-linejoin":"round",stroke:l,fill:i?l:"none","stroke-width":t.graph.strokeWidth()+(i?0:2*n)}
23499),[t.tracker,t.markerGroup,t.dataLabelsGroup].forEach(t=>{t&&(t.addClass("highcharts-tracker").on("mouseover",h).on("mouseout",t=>{o?.onTrackerMouseOut(t)}),e.cursor&&!r.styledMode&&t.css({cursor:e.cursor}),t.on("touchstart",h))})),L(this,"afterDrawTracker")}addPoint(t,e,i,s,r){let o,a;let n=this.options,h=this.data,l=this.chart,d=this.xAxis,c=d&&d.hasNames&&d.names,p=n.data,u=this.xData;e=N(e,!0);let g={series:this};this.pointClass.prototype.applyOptions.apply(g,[t]);let f=g.x;if(a=u.length,this.requireSorting&&f<u[a-1])for(o=!0;a&&u[a-1]>f;)a--;this.updateParallelArrays(g,"splice",[a,0,0]),this.updateParallelArrays(g,a),c&&g.name&&(c[f]=g.name),p.splice(a,0,t),(o||this.processedData)&&(this.data.splice(a,0,null),this.processData()),"point"===n.legendType&&this.generatePoints(),i&&(h[0]&&h[0].remove?h[0].remove(!1):(h.shift(),this.updateParallelArrays(g,"shift"),p.shift())),!1!==r&&L(this,"addPoint",{point:g}),this.isDirty=!0,this.isDirtyData=!0,e&&l.redraw(s)}removePoint(t,e,i){let s=this,r=s.data,o=r[t],a=s.points,n=s.chart,h=function(){a&&a.length===r.length&&a.splice(t,1),r.splice(t,1),s.options.data.splice(t,1),s.updateParallelArrays(o||{series:s},"splice",[t,1]),o&&o.destroy(),s.isDirty=!0,s.isDirtyData=!0,e&&n.redraw()};c(i,n),e=N(e,!0),o?o.firePointEvent("remove",null,h):h()}remove(t,e,i,s){let r=this,o=r.chart;function a(){r.destroy(s),o.isDirtyLegend=o.isDirtyBox=!0,o.linkSeries(s),N(t,!0)&&o.redraw(e)}!1!==i?L(r,"remove",null,a):a()}update(t,e){L(this,"update",{options:t=M(t,this.userOptions)});let i=this,s=i.chart,r=i.userOptions,o=i.initialType||i.type,a=s.options.plotOptions,n=m[o].prototype,h=i.finishedAnimating&&{animation:!1},l={},d,c,p=["colorIndex","eventOptions","navigatorSeries","symbolIndex","baseSeries"],u=t.type||r.type||s.options.chart.type,g=!(this.hasDerivedData||u&&u!==this.type||void 0!==t.pointStart||void 0!==t.pointInterval||void 0!==t.relativeXValue||t.joinBy||t.mapData||["dataGrouping","pointStart","pointInterval","pointIntervalUnit","keys"].some(t=>i.hasOptionChanged(t)));u=u||o,g&&(p.push("data","isDirtyData","isDirtyCanvas","points","processedData","processedXData","processedYData","xIncrement","cropped","_hasPointMarkers","hasDataLabels","nodes","layout","level","mapMap","mapData","minY","maxY","minX","maxX","transformGroups"),!1!==t.visible&&p.push("area","graph"),i.parallelArrays.forEach(function(t){p.push(t+"Data")}),t.data&&(t.dataSorting&&T(i.options.dataSorting,t.dataSorting),this.setData(t.data,!1))),t=R(r,{index:void 0===r.index?i.index:r.index,pointStart:a?.series?.pointStart??r.pointStart??i.xData?.[0]},!g&&{data:i.options.data},t,h),g&&t.data&&(t.data=i.options.data),(p=["group","markerGroup","dataLabelsGroup","transformGroup"].concat(p)).forEach(function(t){p[t]=i[t],delete i[t]});let f=!1;if(m[u]){if(f=u!==i.type,i.remove(!1,!1,!1,!0),f){if(s.propFromSeries(),Object.setPrototypeOf)Object.setPrototypeOf(i,m[u].prototype);else{let t=Object.hasOwnProperty.call(i,"hcEvents")&&i.hcEvents;for(c in n)i[c]=void 0;T(i,m[u].prototype),t?i.hcEvents=t:delete i.hcEvents}}}else A(17,!0,s,{missingModuleFor:u});if(p.forEach(function(t){i[t]=p[t]}),i.init(s,t),g&&this.points)for(let t of(!1===(d=i.options).visible?(l.graphic=1,l.dataLabel=1):(this.hasMarkerChanged(d,r)&&(l.graphic=1),i.hasDataLabels?.()||(l.dataLabel=1)),this.points))t&&t.series&&(t.resolveColor(),Object.keys(l).length&&t.destroyElements(l),!1===d.showInLegend&&t.legendItem&&s.legend.destroyItem(t));i.initialType=o,s.linkSeries(),s.setSortedData(),f&&i.linkedSeries.length&&(i.isDirtyData=!0),L(this,"afterUpdate"),N(e,!0)&&s.redraw(!!g&&void 0)}setName(t){this.name=this.options.name=this.userOptions.name=t,this.chart.isDirtyLegend=!0}hasOptionChanged(t){let e=this.chart,i=this.options[t],s=e.options.plotOptions,r=this.userOptions[t],o=N(s?.[this.type]?.[t],s?.series?.[t]);return r&&!C(o)?i!==r:i!==N(o,i)}onMouseOver(){let t=this.chart,e=t.hoverSeries,i=t.pointer;i?.setHoverChartIndex(),e&&e!==this&&e.onMouseOut(),this.options.events.mouseOver&&L(this,"mouseOver"),this.setState("hover"),t.hoverSeries=this}onMouseOut(){let t=this.options,e=this.chart,i=e.tooltip,s=e.hoverPoint;
23499e.hoverSeries=null,s&&s.onMouseOut(),this&&t.events.mouseOut&&L(this,"mouseOut"),i&&!this.stickyTracking&&(!i.shared||this.noSharedTooltip)&&i.hide(),e.series.forEach(function(t){t.setState("",!0)})}setState(t,e){let i=this,s=i.options,r=i.graph,o=s.inactiveOtherPoints,a=s.states,n=N(a[t||"normal"]&&a[t||"normal"].animation,i.chart.options.chart.animation),h=s.lineWidth,l=s.opacity;if(t=t||"",i.state!==t&&([i.group,i.markerGroup,i.dataLabelsGroup].forEach(function(e){e&&(i.state&&e.removeClass("highcharts-series-"+i.state),t&&e.addClass("highcharts-series-"+t))}),i.state=t,!i.chart.styledMode)){if(a[t]&&!1===a[t].enabled)return;if(t&&(h=a[t].lineWidth||h+(a[t].lineWidthPlus||0),l=N(a[t].opacity,l)),r&&!r.dashstyle&&j(h))for(let t of[r,...this.zones.map(t=>t.graph)])t?.animate({"stroke-width":h},n);o||[i.group,i.markerGroup,i.dataLabelsGroup,i.labelBySeries].forEach(function(t){t&&t.animate({opacity:l},n)})}e&&o&&i.points&&i.setAllPointsToState(t||void 0)}setAllPointsToState(t){this.points.forEach(function(e){e.setState&&e.setState(t)})}setVisible(t,e){let i=this,s=i.chart,r=s.options.chart.ignoreHiddenSeries,o=i.visible;i.visible=t=i.options.visible=i.userOptions.visible=void 0===t?!o:t;let a=t?"show":"hide";["group","dataLabelsGroup","markerGroup","tracker","tt"].forEach(t=>{i[t]?.[a]()}),(s.hoverSeries===i||s.hoverPoint?.series===i)&&i.onMouseOut(),i.legendItem&&s.legend.colorizeItem(i,t),i.isDirty=!0,i.options.stacking&&s.series.forEach(t=>{t.options.stacking&&t.visible&&(t.isDirty=!0)}),i.linkedSeries.forEach(e=>{e.setVisible(t,!1)}),r&&(s.isDirtyBox=!0),L(i,a),!1!==e&&s.redraw()}show(){this.setVisible(!0)}hide(){this.setVisible(!1)}select(t){this.selected=t=this.options.selected=void 0===t?!this.selected:t,this.checkbox&&(this.checkbox.checked=t),L(this,t?"select":"unselect")}shouldShowTooltip(t,e,i={}){return i.series=this,i.visiblePlotOnly=!0,this.chart.isInsidePlot(t,e,i)}drawLegendSymbol(t,e){r[this.options.legendSymbol||"rectangle"]?.call(this,t,e)}}return X.defaultOptions=a,X.types=n.seriesTypes,X.registerType=n.registerSeriesType,T(X.prototype,{axisTypes:["xAxis","yAxis"],coll:"series",colorCounter:0,directTouch:!1,invertible:!0,isCartesian:!0,kdAxisArray:["clientX","plotY"],parallelArrays:["x","y"],pointClass:o,requireSorting:!0,sorted:!0}),n.series=X,X}),i(e,"Core/Chart/Chart.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Axis/Axis.js"],e["Core/Defaults.js"],e["Core/Templating.js"],e["Core/Foundation.js"],e["Core/Globals.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Time.js"],e["Core/Utilities.js"],e["Core/Renderer/HTML/AST.js"],e["Core/Axis/Tick.js"]],function(t,e,i,s,r,o,a,n,h,l,d,c,p,u){let{animate:g,animObject:f,setAnimation:m}=t,{defaultOptions:x,defaultTime:y}=i,{numberFormat:b}=s,{registerEventOptions:v}=r,{charts:S,doc:C,marginNames:k,svg:M,win:w}=o,{seriesTypes:A}=h,{addEvent:T,attr:P,createElement:L,css:O,defined:D,diffObjects:E,discardElement:I,erase:j,error:B,extend:R,find:z,fireEvent:N,getStyle:W,isArray:G,isNumber:H,isObject:X,isString:F,merge:Y,objectEach:U,pick:V,pInt:$,relativeLength:Z,removeEvent:_,splat:q,syncTimeout:K,uniqueKey:J}=c;class Q{static chart(t,e,i){return new Q(t,e,i)}constructor(t,e,i){this.sharedClips={};let s=[...arguments];(F(t)||t.nodeName)&&(this.renderTo=s.shift()),this.init(s[0],s[1])}setZoomOptions(){let t=this.options.chart,e=t.zooming;this.zooming={...e,type:V(t.zoomType,e.type),key:V(t.zoomKey,e.key),pinchType:V(t.pinchType,e.pinchType),singleTouch:V(t.zoomBySingleTouch,e.singleTouch,!1),resetButton:Y(e.resetButton,t.resetZoomButton)}}init(t,e){N(this,"init",{args:arguments},function(){let i=Y(x,t),s=i.chart;this.userOptions=R({},t),this.margin=[],this.spacing=[],this.labelCollectors=[],this.callback=e,this.isResizing=0,this.options=i,this.axes=[],this.series=[],this.time=t.time&&Object.keys(t.time).length?new d(t.time):o.time,this.numberFormatter=s.numberFormatter||b,this.styledMode=s.styledMode,this.hasCartesianSeries=s.showAxes,this.index=S.length,S.push(this),o.chartCount++,v(this,s),this.xAxis=[],this.yAxis=[],this.pointCount=this.colorCounter=this.symbolCounter=0,this.setZoomOptions(),N(this,"afterInit"),this.firstRen
23499der()})}initSeries(t){let e=this.options.chart,i=t.type||e.type,s=A[i];s||B(17,!0,this,{missingModuleFor:i});let r=new s;return"function"==typeof r.init&&r.init(this,t),r}setSortedData(){this.getSeriesOrderByLinks().forEach(function(t){t.points||t.data||!t.enabledDataSorting||t.setData(t.options.data,!1)})}getSeriesOrderByLinks(){return this.series.concat().sort(function(t,e){return t.linkedSeries.length||e.linkedSeries.length?e.linkedSeries.length-t.linkedSeries.length:0})}orderItems(t,e=0){let i=this[t],s=this.options[t]=q(this.options[t]).slice(),r=this.userOptions[t]=this.userOptions[t]?q(this.userOptions[t]).slice():[];if(this.hasRendered&&(s.splice(e),r.splice(e)),i)for(let t=e,o=i.length;t<o;++t){let e=i[t];e&&(e.index=t,e instanceof n&&(e.name=e.getName()),e.options.isInternal||(s[t]=e.options,r[t]=e.userOptions))}}isInsidePlot(t,e,i={}){let{inverted:s,plotBox:r,plotLeft:o,plotTop:a,scrollablePlotBox:n}=this,{scrollLeft:h=0,scrollTop:l=0}=i.visiblePlotOnly&&this.scrollablePlotArea?.scrollingContainer||{},d=i.series,c=i.visiblePlotOnly&&n||r,p=i.inverted?e:t,u=i.inverted?t:e,g={x:p,y:u,isInsidePlot:!0,options:i};if(!i.ignoreX){let t=d&&(s&&!this.polar?d.yAxis:d.xAxis)||{pos:o,len:1/0},e=i.paneCoordinates?t.pos+p:o+p;e>=Math.max(h+o,t.pos)&&e<=Math.min(h+o+c.width,t.pos+t.len)||(g.isInsidePlot=!1)}if(!i.ignoreY&&g.isInsidePlot){let t=!s&&i.axis&&!i.axis.isXAxis&&i.axis||d&&(s?d.xAxis:d.yAxis)||{pos:a,len:1/0},e=i.paneCoordinates?t.pos+u:a+u;e>=Math.max(l+a,t.pos)&&e<=Math.min(l+a+c.height,t.pos+t.len)||(g.isInsidePlot=!1)}return N(this,"afterIsInsidePlot",g),g.isInsidePlot}redraw(t){N(this,"beforeRedraw");let e=this.hasCartesianSeries?this.axes:this.colorAxis||[],i=this.series,s=this.pointer,r=this.legend,o=this.userOptions.legend,a=this.renderer,n=a.isHidden(),h=[],l,d,c,p=this.isDirtyBox,u=this.isDirtyLegend,g;for(a.rootFontSize=a.boxWrapper.getStyle("font-size"),this.setResponsive&&this.setResponsive(!1),m(!!this.hasRendered&&t,this),n&&this.temporaryDisplay(),this.layOutTitles(!1),c=i.length;c--;)if(((g=i[c]).options.stacking||g.options.centerInCategory)&&(d=!0,g.isDirty)){l=!0;break}if(l)for(c=i.length;c--;)(g=i[c]).options.stacking&&(g.isDirty=!0);i.forEach(function(t){t.isDirty&&("point"===t.options.legendType?("function"==typeof t.updateTotals&&t.updateTotals(),u=!0):o&&(o.labelFormatter||o.labelFormat)&&(u=!0)),t.isDirtyData&&N(t,"updatedData")}),u&&r&&r.options.enabled&&(r.render(),this.isDirtyLegend=!1),d&&this.getStacks(),e.forEach(function(t){t.updateNames(),t.setScale()}),this.getMargins(),e.forEach(function(t){t.isDirty&&(p=!0)}),e.forEach(function(t){let e=t.min+","+t.max;t.extKey!==e&&(t.extKey=e,h.push(function(){N(t,"afterSetExtremes",R(t.eventArgs,t.getExtremes())),delete t.eventArgs})),(p||d)&&t.redraw()}),p&&this.drawChartBox(),N(this,"predraw"),i.forEach(function(t){(p||t.isDirty)&&t.visible&&t.redraw(),t.isDirtyData=!1}),s&&s.reset(!0),a.draw(),N(this,"redraw"),N(this,"render"),n&&this.temporaryDisplay(!0),h.forEach(function(t){t.call()})}get(t){let e=this.series;function i(e){return e.id===t||e.options&&e.options.id===t}let s=z(this.axes,i)||z(this.series,i);for(let t=0;!s&&t<e.length;t++)s=z(e[t].points||[],i);return s}getAxes(){let t=this.userOptions;for(let i of(N(this,"getAxes"),["xAxis","yAxis"]))for(let s of t[i]=q(t[i]||{}))new e(this,s,i);N(this,"afterGetAxes")}getSelectedPoints(){return this.series.reduce((t,e)=>(e.getPointsCollection().forEach(e=>{V(e.selectedStaging,e.selected)&&t.push(e)}),t),[])}getSelectedSeries(){return this.series.filter(function(t){return t.selected})}setTitle(t,e,i){this.applyDescription("title",t),this.applyDescription("subtitle",e),this.applyDescription("caption",void 0),this.layOutTitles(i)}applyDescription(t,e){let i=this,s=this.options[t]=Y(this.options[t],e),r=this[t];r&&e&&(this[t]=r=r.destroy()),s&&!r&&((r=this.renderer.text(s.text,0,0,s.useHTML).attr({align:s.align,class:"highcharts-"+t,zIndex:s.zIndex||4}).add()).update=function(e,s){i.applyDescription(t,e),i.layOutTitles(s)},this.styledMode||r.css(R("title"===t?{fontSize:this.options.isStock?"1em":"1.2em"}:{},s.style)),this[t]=r)}layOutTitles(t=!0){let e=[0,0,0],i=this.renderer,s=this.spacingBox;["title","subtitle","caption"].forEach(function(t){let r=this[t],o=this.options[t],a=o.verticalAlign||"top",n="title"===t?"top"===a?-3:0:"top"===a?e[0]+2:0;if(r){r.css({width:(o.width||s.width+(o.widthAdjust||0))+"px"});let t=i.fontMetrics(r).b,h=Math.round(r.getBBox(o.useHTML).height);r.align(R({y:"bottom"===a?t:n+t,height:h},o),!1,"spacingBox"),o.floating||("top"===a?e[0]=Math.ceil(e[0]+h):"bottom"===a&&(e[2]=Math.ceil(e[2]+h)))}},this),e[0]&&"top"===(this.options.title.verticalAlign||"top")&&(e[0]+=this.options.title.margin),e[2]&&"bottom"===this.options.caption.verticalAlign&&(e[2]+=this.options.caption.margin);let r=!this.titleOffset||this.titleOffset.join(",")!==e.join(",");this.titleOffset=e,N(this,"afterLayOutTitles"),!this.isDirtyBox&&r&&(this.isDirtyBox=this.isDirtyLegend=r,this.hasRendered&&t&&this.isDirtyBox&&this.redraw())}getContainerBox(){return{width:W(this.renderTo,"width",!0)||0,height:W(this.renderTo,"height",!0)||0}}getChartSize(){let t=this.options.chart,e=t.width,i=t.height,s=this.getContainerBox();
23499this.chartWidth=Math.max(0,e||s.width||600),this.chartHeight=Math.max(0,Z(i,this.chartWidth)||(s.height>1?s.height:400)),this.containerBox=s}temporaryDisplay(t){let e=this.renderTo,i;if(t)for(;e&&e.style;)e.hcOrigStyle&&(O(e,e.hcOrigStyle),delete e.hcOrigStyle),e.hcOrigDetached&&(C.body.removeChild(e),e.hcOrigDetached=!1),e=e.parentNode;else for(;e&&e.style&&(C.body.contains(e)||e.parentNode||(e.hcOrigDetached=!0,C.body.appendChild(e)),("none"===W(e,"display",!1)||e.hcOricDetached)&&(e.hcOrigStyle={display:e.style.display,height:e.style.height,overflow:e.style.overflow},i={display:"block",overflow:"hidden"},e!==this.renderTo&&(i.height=0),O(e,i),e.offsetWidth||e.style.setProperty("display","block","important")),(e=e.parentNode)!==C.body););}setClassName(t){this.container.className="highcharts-container "+(t||"")}getContainer(){let t=this.options,e=t.chart,i="data-highcharts-chart",s=J(),r,o=this.renderTo;o||(this.renderTo=o=e.renderTo),F(o)&&(this.renderTo=o=C.getElementById(o)),o||B(13,!0,this);let n=$(P(o,i));H(n)&&S[n]&&S[n].hasRendered&&S[n].destroy(),P(o,i,this.index),o.innerHTML=p.emptyHTML,e.skipClone||o.offsetWidth||this.temporaryDisplay(),this.getChartSize();let h=this.chartHeight,d=this.chartWidth;O(o,{overflow:"hidden"}),this.styledMode||(r=R({position:"relative",overflow:"hidden",width:d+"px",height:h+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)",userSelect:"none","touch-action":"manipulation",outline:"none"},e.style||{}));let c=L("div",{id:s},r,o);this.container=c,this.getChartSize(),d===this.chartWidth||(d=this.chartWidth,this.styledMode||O(c,{width:V(e.style?.width,d+"px")})),this.containerBox=this.getContainerBox(),this._cursor=c.style.cursor;let u=e.renderer||!M?a.getRendererType(e.renderer):l;if(this.renderer=new u(c,d,h,void 0,e.forExport,t.exporting&&t.exporting.allowHTML,this.styledMode),m(void 0,this),this.setClassName(e.className),this.styledMode)for(let e in t.defs)this.renderer.definition(t.defs[e]);else this.renderer.setStyle(e.style);this.renderer.chartIndex=this.index,N(this,"afterGetContainer")}getMargins(t){let{spacing:e,margin:i,titleOffset:s}=this;this.resetMargins(),s[0]&&!D(i[0])&&(this.plotTop=Math.max(this.plotTop,s[0]+e[0])),s[2]&&!D(i[2])&&(this.marginBottom=Math.max(this.marginBottom,s[2]+e[2])),this.legend&&this.legend.display&&this.legend.adjustMargins(i,e),N(this,"getMargins"),t||this.getAxisMargins()}getAxisMargins(){let t=this,e=t.axisOffset=[0,0,0,0],i=t.colorAxis,s=t.margin,r=function(t){t.forEach(function(t){t.visible&&t.getOffset()})};t.hasCartesianSeries?r(t.axes):i&&i.length&&r(i),k.forEach(function(i,r){D(s[r])||(t[i]+=e[r])}),t.setChartSize()}getOptions(){return E(this.userOptions,x)}reflow(t){let e=this,i=e.containerBox,s=e.getContainerBox();delete e.pointer?.chartPosition,!e.isPrinting&&!e.isResizing&&i&&s.width&&((s.width!==i.width||s.height!==i.height)&&(c.clearTimeout(e.reflowTimeout),e.reflowTimeout=K(function(){e.container&&e.setSize(void 0,void 0,!1)},t?100:0)),e.containerBox=s)}setReflow(){let t=this,e=e=>{t.options?.chart.reflow&&t.hasLoaded&&t.reflow(e)};if("function"==typeof ResizeObserver)new ResizeObserver(e).observe(t.renderTo);else{let t=T(w,"resize",e);T(this,"destroy",t)}}setSize(t,e,i){let s=this,r=s.renderer;s.isResizing+=1,m(i,s);let o=r.globalAnimation;s.oldChartHeight=s.chartHeight,s.oldChartWidth=s.chartWidth,void 0!==t&&(s.options.chart.width=t),void 0!==e&&(s.options.chart.height=e),s.getChartSize();let{chartWidth:a,chartHeight:n,scrollablePixelsX:h=0,scrollablePixelsY:l=0}=s;(s.isDirtyBox||a!==s.oldChartWidth||n!==s.oldChartHeight)&&(s.styledMode||(o?g:O)(s.container,{width:`${a+h}px`,height:`${n+l}px`},o),s.setChartSize(!0),r.setSize(a,n,o),s.axes.forEach(function(t){t.isDirty=!0,t.setScale()}),s.isDirtyLegend=!0,s.isDirtyBox=!0,s.layOutTitles(),s.getMargins(),s.redraw(o),s.oldCh
23499artHeight=void 0,N(s,"resize"),setTimeout(()=>{s&&N(s,"endResize")},f(o).duration)),s.isResizing-=1}setChartSize(t){let e,i,s,r;let{chartHeight:o,chartWidth:a,inverted:n,spacing:h,renderer:l}=this,d=this.clipOffset,c=Math[n?"floor":"round"];this.plotLeft=e=Math.round(this.plotLeft),this.plotTop=i=Math.round(this.plotTop),this.plotWidth=s=Math.max(0,Math.round(a-e-this.marginRight)),this.plotHeight=r=Math.max(0,Math.round(o-i-this.marginBottom)),this.plotSizeX=n?r:s,this.plotSizeY=n?s:r,this.spacingBox=l.spacingBox={x:h[3],y:h[0],width:a-h[3]-h[1],height:o-h[0]-h[2]},this.plotBox=l.plotBox={x:e,y:i,width:s,height:r},d&&(this.clipBox={x:c(d[3]),y:c(d[0]),width:c(this.plotSizeX-d[1]-d[3]),height:c(this.plotSizeY-d[0]-d[2])}),t||(this.axes.forEach(function(t){t.setAxisSize(),t.setAxisTranslation()}),l.alignElements()),N(this,"afterSetChartSize",{skipAxes:t})}resetMargins(){N(this,"resetMargins");let t=this,e=t.options.chart,i=e.plotBorderWidth||0,s=i/2;["margin","spacing"].forEach(function(i){let s=e[i],r=X(s)?s:[s,s,s,s];["Top","Right","Bottom","Left"].forEach(function(s,o){t[i][o]=V(e[i+s],r[o])})}),k.forEach(function(e,i){t[e]=V(t.margin[i],t.spacing[i])}),t.axisOffset=[0,0,0,0],t.clipOffset=[s,s,s,s],t.plotBorderWidth=i}drawChartBox(){let t=this.options.chart,e=this.renderer,i=this.chartWidth,s=this.chartHeight,r=this.styledMode,o=this.plotBGImage,a=t.backgroundColor,n=t.plotBackgroun
23499dColor,h=t.plotBackgroundImage,l=this.plotLeft,d=this.plotTop,c=this.plotWidth,p=this.plotHeight,u=this.plotBox,g=this.clipRect,f=this.clipBox,m=this.chartBackground,x=this.plotBackground,y=this.plotBorder,b,v,S,C="animate";m||(this.chartBackground=m=e.rect().addClass("highcharts-background").add(),C="attr"),r?b=v=m.strokeWidth():(v=(b=t.borderWidth||0)+(t.shadow?8:0),S={fill:a||"none"},(b||m["stroke-width"])&&(S.stroke=t.borderColor,S["stroke-width"]=b),m.attr(S).shadow(t.shadow)),m[C]({x:v/2,y:v/2,width:i-v-b%2,height:s-v-b%2,r:t.borderRadius}),C="animate",x||(C="attr",this.plotBackground=x=e.rect().addClass("highcharts-plot-background").add()),x[C](u),!r&&(x.attr({fill:n||"none"}).shadow(t.plotShadow),h&&(o?(h!==o.attr("href")&&o.attr("href",h),o.animate(u)):this.plotBGImage=e.image(h,l,d,c,p).add())),g?g.animate({width:f.width,height:f.height}):this.clipRect=e.clipRect(f),C="animate",y||(C="attr",this.plotBorder=y=e.rect().addClass("highcharts-plot-border").attr({zIndex:1}).add()),r||y.attr({stroke:t.plotBorderColor,"stroke-width":t.plotBorderWidth||0,fill:"none"}),y[C](y.crisp({x:l,y:d,width:c,height:p},-y.strokeWidth())),this.isDirtyBox=!1,N(this,"afterDrawChartBox")}propFromSeries(){let t,e,i;let s=this,r=s.options.chart,o=s.options.series;["inverted","angular","polar"].forEach(function(a){for(e=A[r.type],i=r[a]||e&&e.prototype[a],t=o&&o.length;!i&&t--;)(e=A[o[t].type])&&e.prototype[a]&&(i=!0);s[a]=i})}linkSeries(t){let e=this,i=e.series;i.forEach(function(t){t.linkedSeries.length=0}),i.forEach(function(t){let{linkedTo:i}=t.options;if(F(i)){let s;(s=":previous"===i?e.series[t.index-1]:e.get(i))&&s.linkedParent!==t&&(s.linkedSeries.push(t),t.linkedParent=s,s.enabledDataSorting&&t.setDataSortingOptions(),t.visible=V(t.options.visible,s.options.visible,t.visible))}}),N(this,"afterLinkSeries",{isUpdating:t})}renderSeries(){this.series.forEach(function(t){t.translate(),t.render()})}render(){let t=this.axes,e=this.colorAxis,i=this.renderer,s=this.options.chart.axisLayoutRuns||2,r=t=>{t.forEach(t=>{t.visible&&t.render()})},o=0,a=!0,n,h=0;for(let e of(this.setTitle(),N(this,"beforeMargins"),this.getStacks?.(),this.getMargins(!0),this.setChartSize(),t)){let{options:t}=e,{labels:i}=t;if(this.hasCartesianSeries&&e.horiz&&e.visible&&i.enabled&&e.series.length&&"colorAxis"!==e.coll&&!this.polar){o=t.tickLength,e.createGroups();let s=new u(e,0,"",!0),r=s.createLabel("x",i);if(s.destroy(),r&&V(i.reserveSpace,!H(t.crossing))&&(o=r.getBBox().height+i.distance+Math.max(t.offset||0,0)),o){r?.destroy();break}}}for(this.plotHeight=Math.max(this.plotHeight-o,0);(a||n||s>1)&&h<s;){let e=this.plotWidth,i=this.plotHeight;for(let e of t)0===h?e.setScale():(e.horiz&&a||!e.horiz&&n)&&e.setTickInterval(!0);0===h?this.getAxisMargins():this.getMargins(),a=e/this.plotWidth>(h?1:1.1),n=i/this.plotHeight>(h?1:1.05),h++}this.drawChartBox(),this.hasCartesianSeries?r(t):e&&e.length&&r(e),this.seriesGroup||(this.seriesGroup=i.g("series-group").attr({zIndex:3}).shadow(this.options.chart.seriesGroupShadow).add()),this.renderSeries(),this.addCredits(),this.setResponsive&&this.setResponsive(),this.hasRendered=!0}addCredits(t){let e=this,i=Y(!0,this.options.credits,t);i.enabled&&!this.credits&&(this.credits=this.renderer.text(i.text+(this.mapCredits||""),0,0).addClass("highcharts-credits").on("click",function(){i.href&&(w.location.href=i.href)}).attr({align:i.position.align,zIndex:8}),e.styledMode||this.credits.css(i.style),this.credits.add().align(i.position),this.credits.update=function(t){e.credits=e.credits.destroy(),e.addCredits(t)})}destroy(){let t;let e=this,i=e.axes,s=e.series,r=e.container,a=r&&r.parentNode;for(N(e,"destroy"),e.renderer.forExport?j(S,e):S[e.index]=void 0,o.chartCount--,e.renderTo.removeAttribute("data-highcharts-chart"),_(e),t=i.length;t--;)i[t]=i[t].destroy();for(this.scroller&&this.scroller.destroy&&this.scroller.destroy(),t=s.length;t--;)s[t]=s[t].destroy();
23499["title","subtitle","chartBackground","plotBackground","plotBGImage","plotBorder","seriesGroup","clipRect","credits","pointer","rangeSelector","legend","resetZoomButton","tooltip","renderer"].forEach(function(t){let i=e[t];i&&i.destroy&&(e[t]=i.destroy())}),r&&(r.innerHTML=p.emptyHTML,_(r),a&&I(r)),U(e,function(t,i){delete e[i]})}firstRender(){let t=this,e=t.options;t.getContainer(),t.resetMargins(),t.setChartSize(),t.propFromSeries(),t.getAxes();let i=G(e.series)?e.series:[];e.series=[],i.forEach(function(e){t.initSeries(e)}),t.linkSeries(),t.setSortedData(),N(t,"beforeRender"),t.render(),t.pointer?.getChartPosition(),t.renderer.imgCount||t.hasLoaded||t.onload(),t.temporaryDisplay(!0)}onload(){this.callbacks.concat([this.callback]).forEach(function(t){t&&void 0!==this.index&&t.apply(this,[this])},this),N(this,"load"),N(this,"render"),D(this.index)&&this.setReflow(),this.warnIfA11yModuleNotLoaded(),this.hasLoaded=!0}warnIfA11yModuleNotLoaded(){let{options:t,title:e}=this;!t||this.accessibility||(this.renderer.boxWrapper.attr({role:"img","aria-label":(e&&e.element.textContent||"").replace(/</g,"&lt;")}),t.accessibility&&!1===t.accessibility.enabled||B('Highcharts warning: Consider including the "accessibility.js" module to make your chart more usable for people with disabilities. Set the "accessibility.enabled" option to false to remove this warning. See https://www.highcharts.com/docs/accessibility/accessibility-module.',!1,this))}addSeries(t,e,i){let s;let r=this;return t&&(e=V(e,!0),N(r,"addSeries",{options:t},function(){s=r.initSeries(t),r.isDirtyLegend=!0,r.linkSeries(),s.enabledDataSorting&&s.setData(t.data,!1),N(r,"afterAddSeries",{series:s}),e&&r.redraw(i)})),s}addAxis(t,e,i,s){return this.createAxis(e?"xAxis":"yAxis",{axis:t,redraw:i,animation:s})}addColorAxis(t,e,i){return this.createAxis("colorAxis",{axis:t,redraw:e,animation:i})}createAxis(t,i){let s=new e(this,i.axis,t);return V(i.redraw,!0)&&this.redraw(i.animation),s}showLoading(t){let e=this,i=e.options,s=i.loading,r=function(){o&&O(o,{left:e.plotLeft+"px",top:e.plotTop+"px",width:e.plotWidth+"px",height:e.plotHeight+"px"})},o=e.loadingDiv,a=e.loadingSpan;o||(e.loadingDiv=o=L("div",{className:"highcharts-loading highcharts-loading-hidden"},null,e.container)),a||(e.loadingSpan=a=L("span",{className:"highcharts-loading-inner"},null,o),T(e,"redraw",r)),o.className="highcharts-loading",p.setElementHTML(a,V(t,i.lang.loading,"")),e.styledMode||(O(o,R(s.style,{zIndex:10})),O(a,s.labelStyle),e.loadingShown||(O(o,{opacity:0,display:""}),g(o,{opacity:s.style.opacity||.5},{duration:s.showDuration||0}))),e.loadingShown=!0,r()}hideLoading(){let t=this.options,e=this.loadingDiv;e&&(e.className="highcharts-loading highcharts-loading-hidden",this.styledMode||g(e,{opacity:0},{duration:t.loading.hideDuration||100,complete:function(){O(e,{display:"none"})}})),this.loadingShown=!1}update(t,e,i,s){let r,o,a;let n=this,h={credits:"addCredits",title:"setTitle",subtitle:"setSubtitle",caption:"setCaption"},l=t.isResponsiveOptions,c=[];N(n,"update",{options:t}),l||n.setResponsive(!1,!0),t=E(t,n.options),n.userOptions=Y(n.userOptions,t);let p=t.chart;p&&(Y(!0,n.options.chart,p),this.setZoomOptions(),"className"in p&&n.setClassName(p.className),("inverted"in p||"polar"in p||"type"in p)&&(n.propFromSeries(),r=!0),"alignTicks"in p&&(r=!0),"events"in p&&v(this,p),U(p,function(t,e){-1!==n.propsRequireUpdateSeries.indexOf("chart."+e)&&(o=!0),-1!==n.propsRequireDirtyBox.indexOf(e)&&(n.isDirtyBox=!0),-1===n.propsRequireReflow.indexOf(e)||(n.isDirtyBox=!0,l||(a=!0))}),!n.styledMode&&p.style&&n.renderer.setStyle(n.options.chart.style||{})),!n.styledMode&&t.colors&&(this.options.colors=t.colors),t.time&&(this.time===y&&(this.time=new d(t.time)),Y(!0,n.options.time,t.time)),U(t,function(e,i){n[i]&&"function"==typeof n[i].update?n[i].update(e,!1):"function"==typeof n[h[i]]?n[h[i]](e):"colors"!==i&&-1===n.collectionsWithUpdate.indexOf(i)&&Y(!0,n.options[i],t[i]),"chart"!==i&&-1!==n.propsRequireUpdateSeries.indexOf(i)&&(o=!0)}),this.collectionsWithUpdate.forEach(function(e){t[e]&&(q(t[e]).forEach(function(t,s){let r;let o=D(t.id);o&&(r=n.get(t.id)),!r&&n[e]&&(r=n[e][V(t.index,s)])&&(o&&D(r.options.id)||r.options.isInternal)&&(r=void 0),r&&r.coll===e&&(r.update(t,!1),i&&(r.touched=!0)),!r&&i&&n.collectionsWithInit[e]&&(n.collectionsWithInit[e][0].apply(n,[t].concat(n.collectionsWithInit[e][1]||[]).concat([!1])).touched=!0)}),i&&n[e].forEach(function(t){t.touched||t.options.isInternal?delete t.touched:c.push(t)}))}
23499),c.forEach(function(t){t.chart&&t.remove&&t.remove(!1)}),r&&n.axes.forEach(function(t){t.update({},!1)}),o&&n.getSeriesOrderByLinks().forEach(function(t){t.chart&&t.update({},!1)},this);let u=p&&p.width,g=p&&(F(p.height)?Z(p.height,u||n.chartWidth):p.height);a||H(u)&&u!==n.chartWidth||H(g)&&g!==n.chartHeight?n.setSize(u,g,s):V(e,!0)&&n.redraw(s),N(n,"afterUpdate",{options:t,redraw:e,animation:s})}setSubtitle(t,e){this.applyDescription("subtitle",t),this.layOutTitles(e)}setCaption(t,e){this.applyDescription("caption",t),this.layOutTitles(e)}showResetZoom(){let t=this,e=x.lang,i=t.zooming.resetButton,s=i.theme,r="chart"===i.relativeTo||"spacingBox"===i.relativeTo?null:"plotBox";function o(){t.zoomOut()}N(this,"beforeShowResetZoom",null,function(){t.resetZoomButton=t.renderer.button(e.resetZoom,null,null,o,s).attr({align:i.position.align,title:e.resetZoomTitle}).addClass("highcharts-reset-zoom").add().align(i.position,!1,r)}),N(this,"afterShowResetZoom")}zoomOut(){N(this,"selection",{resetSelection:!0},()=>this.transform({reset:!0,trigger:"zoom"}))}pan(t,e){let i=this,s="object"==typeof e?e:{enabled:e,type:"x"},r=s.type,o=r&&i[({x:"xAxis",xy:"axes",y:"yAxis"})[r]].filter(t=>t.options.panningEnabled&&!t.options.isInternal),a=i.options.chart;a?.panning&&(a.panning=s),N(this,"pan",{originalEvent:t},()=>{i.transform({axes:o,event:t,to:{x:t.chartX-(i.mouseDownX||0),y:t.chartY-(i.mouseDownY||0)},trigger:"pan"}),O(i.container,{cursor:"move"})})}transform(t){let{axes:e=this.axes,event:i,from:s={},reset:r,selection:o,to:a={},trigger:n}=t,{inverted:h}=this,l=!1,d;for(let t of(this.hoverPoints?.forEach(t=>t.setState()),e)){let{horiz:e,len:c,minPointOffset:p=0,options:u,reversed:g}=t,f=e?"width":"height",m=e?"x":"y",x=V(a[f],t.len),y=V(s[f],t.len),b=10>Math.abs(x)?1:x/y,v=(s[m]||0)+y/2-t.pos,S=v-((a[m]??t.pos)+x/2-t.pos)/b,C=g&&!h||!g&&h?-1:1;if(!r&&(v<0||v>t.len))continue;let k=t.toValue(S,!0)+(o?0:p*C),M=t.toValue(S+c/b,!0)-(o?0:p*C||0),w=t.allExtremes;if(k>M&&([k,M]=[M,k]),1===b&&!r&&"yAxis"===t.coll&&!w){for(let e of t.series){let t=e.getExtremes(e.getProcessedData(!0).yData,!0);w??(w={dataMin:Number.MAX_VALUE,dataMax:-Number.MAX_VALUE}),H(t.dataMin)&&H(t.dataMax)&&(w.dataMin=Math.min(t.dataMin,w.dataMin),w.dataMax=Math.max(t.dataMax,w.dataMax))}t.allExtremes=w}let{dataMin:A,dataMax:T,min:P,max:L}=R(t.getExtremes(),w||{}),O=A??u.min,E=T??u.max,I=M-k,j=t.categories?0:Math.min(I,E-O),B=O-j*(D(u.min)?0:u.minPadding),z=E+j*(D(u.max)?0:u.maxPadding),N=t.allowZoomOutside||1===b||"zoom"!==n&&b>1,W=Math.min(u.min??B,B,N?P:B),G=Math.max(u.max??z,z,N?L:z);(!t.isOrdinal||1!==b||r)&&(k<W&&(k=W,b>=1&&(M=k+I)),M>G&&(M=G,b>=1&&(k=M-I)),(r||t.series.length&&(k!==P||M!==L)&&k>=W&&M<=G)&&(o?o[t.coll].push({axis:t,min:k,max:M}):(t.isPanning="zoom"!==n,t.setExtremes(r?void 0:k,r?void 0:M,!1,!1,{move:S,trigger:n,scale:b}),!r&&(k>W||M<G)&&"mousewheel"!==n&&(d=!0)),l=!0),i&&(this[e?"mouseDownX":"mouseDownY"]=i[e?"chartX":"chartY"]))}return l&&(o?N(this,"selection",o,()=>{delete t.selection,t.trigger="zoom",this.transform(t)}):(d&&!this.resetZoomButton?this.showResetZoom():!d&&this.resetZoomButton&&(this.resetZoomButton=this.resetZoomButton.destroy()),this.redraw("zoom"===n&&(this.options.chart.animation??this.pointCount<100)))),l}}return R(Q.prototype,{callbacks:[],collectionsWithInit:{xAxis:[Q.prototype.addAxis,[!0]],yAxis:[Q.prototype.addAxis,[!1]],series:[Q.prototype.addSeries]},collectionsWithUpdate:["xAxis","yAxis","series"],propsRequireDirtyBox:["backgroundColor","borderColor","borderWidth","borderRadius","plotBackgroun
23499dColor","plotBackgroundImage","plotBorderColor","plotBorderWidth","plotShadow","shadow"],propsRequireReflow:["margin","marginTop","marginRight","marginBottom","marginLeft","spacing","spacingTop","spacingRight","spacingBottom","spacingLeft"],propsRequireUpdateSeries:["chart.inverted","chart.polar","chart.ignoreHiddenSeries","chart.type","colors","plotOptions","time","tooltip"]}),Q}),i(e,"Extensions/ScrollablePlotArea.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Globals.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{stop:r}=t,{composed:o}=e,{addEvent:a,createElement:n,css:h,defined:l,merge:d,pushUnique:c}=s;function p(){let t=this.scrollablePlotArea;(this.scrollablePixelsX||this.scrollablePixelsY)&&!t&&(this.scrollablePlotArea=t=new g(this)),t?.applyFixed()}function u(){this.chart.scrollablePlotArea&&(this.chart.scrollablePlotArea.isDirty=!0)}class g{static compose(t,e,i){c(o,this.compose)&&(a(t,"afterInit",u),a(e,"afterSetChartSize",t=>this.afterSetSize(t.target,t)),a(e,"render",p),a(i,"show",u))}static afterSetSize(t,e){let i,s,r;let{minWidth:o,minHeight:a}=t.options.chart.scrollablePlotArea||{},{clipBox:n,plotBox:h,inverted:c,renderer:p}=t;if(!p.forExport&&(o?(t.scrollablePixelsX=i=Math.max(0,o-t.chartWidth),i&&(t.scrollablePlotBox=d(t.plotBox),h.width=t.plotWidth+=i,n[c?"height":"width"]+=i,r=!0)):a&&(t.scrollablePixelsY=s=Math.max(0,a-t.chartHeight),l(s)&&(t.scrollablePlotBox=d(t.plotBox),h.height=t.plotHeight+=s,n[c?"width":"height"]+=s,r=!1)),l(r)&&!e.skipAxes))for(let e of t.axes)e.horiz===r&&(e.setAxisSize(),e.setAxisTranslation())}constructor(t){let e;let s=t.options.chart,r=i.getRendererType(),o=s.scrollablePlotArea||{},l=this.moveFixedElements.bind(this),d={WebkitOverflowScrolling:"touch",overflowX:"hidden",overflowY:"hidden"};t.scrollablePixelsX&&(d.overflowX="auto"),t.scrollablePixelsY&&(d.overflowY="auto"),this.chart=t;let c=this.parentDiv=n("div",{className:"highcharts-scrolling-parent"},{position:"relative"},t.renderTo),p=this.scrollingContainer=n("div",{className:"highcharts-scrolling"},d,c),u=this.innerContainer=n("div",{className:"highcharts-inner-container"},void 0,p),g=this.fixedDiv=n("div",{className:"highcharts-fixed"},{position:"absolute",overflow:"hidden",pointerEvents:"none",zIndex:(s.style?.zIndex||0)+2,top:0},void 0,!0),f=this.fixedRenderer=new r(g,t.chartWidth,t.chartHeight,s.style);this.mask=f.path().attr({fill:s.backgroundColor||"#fff","fill-opacity":o.opacity??.85,zIndex:-1}).addClass("highcharts-scrollable-mask").add(),p.parentNode.insertBefore(g,p),h(t.renderTo,{overflow:"visible"}),a(t,"afterShowResetZoom",l),a(t,"afterApplyDrilldown",l),a(t,"afterLayOutTitles",l),a(p,"scroll",()=>{let{pointer:i,hoverPoint:s}=t;i&&(delete i.chartPosition,s&&(e=s),i.runPointActions(void 0,e,!0))}),u.appendChild(t.container)}applyFixed(){let{chart:t,fixedRenderer:e,isDirty:i,scrollingContainer:s}=this,{axisOffset:o,chartWidth:a,chartHeight:n,container:d,plotHeight:c,plotLeft:p,plotTop:u,plotWidth:g,scrollablePixelsX:f=0,scrollablePixelsY:m=0}=t,{scrollPositionX:x=0,scrollPositionY:y=0}=t.options.chart.scrollablePlotArea||{},b=a+f,v=n+m;e.setSize(a,n),(i??!0)&&(this.isDirty=!1,this.moveFixedElements()),r(t.container),h(d,{width:`${b}px`,height:`${v}px`}),t.renderer.boxWrapper.attr({width:b,height:v,viewBox:[0,0,b,v].join(" ")}),t.chartBackground?.attr({width:b,height:v}),h(s,{width:`${a}px`,height:`${n}px`}),l(i)||(s.scrollLeft=f*x,s.scrollTop=m*y);let S=u-o[0]-1,C=p-o[3]-1,k=u+c+o[2]+1,M=p+g+o[1]+1,w=p+g-f,A=u+c-m,T=[["M",0,0]];f?T=[["M",0,S],["L",p-1,S],["L",p-1,k],["L",0,k],["Z"],["M",w,S],["L",a,S],["L",a,k],["L",w,k],["Z"]]:m&&(T=[["M",C,0],["L",C,u-1],["L",M,u-1],["L",M,0],["Z"],["M",C,A],["L",C,n],["L",M,n],["L",M,A],["Z"]]),"adjustHeight"!==t.redrawTrigger&&this.mask.attr({d:T})}moveFixedElements(){let t;let{container:e,inverted:i,scrollablePixelsX:s,scrollablePixelsY:r}=this.chart,o=this.fixedRenderer,a=g.fixedSelectors;for(let n of(s&&!i?t=".highcharts-yaxis":s&&i?t=".highcharts-xaxis":r&&!i?t=".highcharts-xaxis":r&&i&&(t=".highcharts-yaxis"),t&&a.push(`${t}:not(.highcharts-radial-axis)`,`${t}-labels:not(.highcharts-radial-axis-labels)`),a))[].forEach.call(e.querySelectorAll(n),t=>
23499{(t.namespaceURI===o.SVG_NS?o.box:o.box.parentNode).appendChild(t),t.style.pointerEvents="auto"})}}return g.fixedSelectors=[".highcharts-breadcrumbs-group",".highcharts-contextbutton",".highcharts-caption",".highcharts-credits",".highcharts-drillup-button",".highcharts-legend",".highcharts-legend-checkbox",".highcharts-navigator-series",".highcharts-navigator-xaxis",".highcharts-navigator-yaxis",".highcharts-navigator",".highcharts-range-selector-group",".highcharts-reset-zoom",".highcharts-scrollbar",".highcharts-subtitle",".highcharts-title"],g}),i(e,"Core/Axis/Stacking/StackItem.js",[e["Core/Templating.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{format:s}=t,{series:r}=e,{destroyObjectProperties:o,fireEvent:a,isNumber:n,pick:h}=i;return class{constructor(t,e,i,s,r){let o=t.chart.inverted,a=t.reversed;this.axis=t;let n=this.isNegative=!!i!=!!a;this.options=e=e||{},this.x=s,this.total=null,this.cumulative=null,this.points={},this.hasValidPoints=!1,this.stack=r,this.leftCliff=0,this.rightCliff=0,this.alignOptions={align:e.align||(o?n?"left":"right":"center"),verticalAlign:e.verticalAlign||(o?"middle":n?"bottom":"top"),y:e.y,x:e.x},this.textAlign=e.textAlign||(o?n?"right":"left":"center")}destroy(){o(this,this.axis)}render(t){let e=this.axis.chart,i=this.options,r=i.format,o=r?s(r,this,e):i.formatter.call(this);if(this.label)this.label.attr({text:o,visibility:"hidden"});else{this.label=e.renderer.label(o,null,void 0,i.shape,void 0,void 0,i.useHTML,!1,"stack-labels");let s={r:i.borderRadius||0,text:o,padding:h(i.padding,5),visibility:"hidden"};e.styledMode||(s.fill=i.backgroundColor,s.stroke=i.borderColor,s["stroke-width"]=i.borderWidth,this.label.css(i.style||{})),this.label.attr(s),this.label.added||this.label.add(t)}this.label.labelrank=e.plotSizeY,a(this,"afterRender")}setOffset(t,e,i,s,o,l){let{alignOptions:d,axis:c,label:p,options:u,textAlign:g}=this,f=c.chart,m=this.getStackBox({xOffset:t,width:e,boxBottom:i,boxTop:s,defaultX:o,xAxis:l}),{verticalAlign:x}=d;if(p&&m){let t=p.getBBox(void 0,0),e=p.padding,i="justify"===h(u.overflow,"justify"),s;d.x=u.x||0,d.y=u.y||0;let{x:o,y:a}=this.adjustStackPosition({labelBox:t,verticalAlign:x,textAlign:g});m.x-=o,m.y-=a,p.align(d,!1,m),(s=f.isInsidePlot(p.alignAttr.x+d.x+o,p.alignAttr.y+d.y+a))||(i=!1),i&&r.prototype.justifyDataLabel.call(c,p,d,p.alignAttr,t,m),p.attr({x:p.alignAttr.x,y:p.alignAttr.y,rotation:u.rotation,rotationOriginX:t.width*({left:0,center:.5,right:1})[u.textAlign||"center"],rotationOriginY:t.height/2}),h(!i&&u.crop,!0)&&(s=n(p.x)&&n(p.y)&&f.isInsidePlot(p.x-e+(p.width||0),p.y)&&f.isInsidePlot(p.x+e,p.y)),p[s?"show":"hide"]()}a(this,"afterSetOffset",{xOffset:t,width:e})}adjustStackPosition({labelBox:t,verticalAlign:e,textAlign:i}){let s={bottom:0,middle:1,top:2,right:1,center:0,left:-1},r=s[e],o=s[i];return{x:t.width/2+t.width/2*o,y:t.height/2*r}}getStackBox(t){let e=this.axis,i=e.chart,{boxTop:s,defaultX:r,xOffset:o,width:a,boxBottom:l}=t,d=e.stacking.usePercentage?100:h(s,this.total,0),c=e.toPixels(d),p=t.xAxis||i.xAxis[0],u=h(r,p.translate(this.x))+o,g=Math.abs(c-e.toPixels(l||n(e.min)&&e.logarithmic&&e.logarithmic.lin2log(e.min)||0)),f=i.inverted,m=this.isNegative;return f?{x:(m?c:c-g)-i.plotLeft,y:p.height-u-a,width:g,height:a}:{x:u+p.transB-i.plotLeft,y:(m?c-g:c)-i.plotTop,width:a,height:g}}}}),i(e,"Core/Axis/Stacking/StackingAxis.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Axis/Axis.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Axis/Stacking/StackItem.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){var o;let{getDeferredAnimation:a}=t,{series:{prototype:n}}=i,{addEvent:h,correctFloat:l,defined:d,destroyObjectProperties:c,fireEvent:p,isArray:u,isNumber:g,objectEach:f,pick:m}=r;function x(){let t=this.inverted;this.axes.forEach(t=>{t.stacking&&t.stacking.stacks&&t.hasVisibleSeries&&(t.stacking.oldStacks=t.stacking.stacks)}),this.series.forEach(e=>{let i=e.xAxis&&e.xAxis.options||{};e.options.stacking&&e.reserveSpace()&&(e.stackKey=[e.type,m(e.options.stack,""),t?i.top:i.left,t?i.height:i.width].join(","))})}function y(){let t=this.stacking;if(t){let e=t.stacks;f(e,(t,i)=>{c(t),delete e[i]}),t.stackTotalGroup?.destroy()}}function b(){this.stacking||(this.stacking=new w(this))}function v(t,e,i,s){return!d(t)||t.x!==e||s&&t.stackKey!==s?t={x:e,index:0,key:s,stackKey:s}:t.index++,t.key=[i,e,t.index].join(","),t}function S(){let t;let e=this,i=e.yAxis,s=e.stackKey||"",r=i.stacking.stacks,o=e.processedXData,a=e.options.stacking,n=e[a+"Stacker"];
23499n&&[s,"-"+s].forEach(i=>{let s=o.length,a,h,l;for(;s--;)a=o[s],t=e.getStackIndicator(t,a,e.index,i),h=r[i]?.[a],(l=h?.points[t.key||""])&&n.call(e,l,h,s)})}function C(t,e,i){let s=e.total?100/e.total:0;t[0]=l(t[0]*s),t[1]=l(t[1]*s),this.stackedYData[i]=t[1]}function k(t){(this.is("column")||this.is("columnrange"))&&(this.options.centerInCategory&&!this.options.stacking&&this.chart.series.length>1?n.setStackedPoints.call(this,t,"group"):t.stacking.resetStacks())}function M(t,e){let i,r,o,a,n,h,c,p,g;let f=e||this.options.stacking;if(!f||!this.reserveSpace()||(({group:"xAxis"})[f]||"yAxis")!==t.coll)return;let x=this.processedXData,y=this.processedYData,b=[],v=y.length,S=this.options,C=S.threshold||0,k=S.startFromThreshold?C:0,M=S.stack,w=e?`${this.type},${f}`:this.stackKey||"",A="-"+w,T=this.negStacks,P=t.stacking,L=P.stacks,O=P.oldStacks;for(P.stacksTouched+=1,c=0;c<v;c++){p=x[c],g=y[c],h=(i=this.getStackIndicator(i,p,this.index)).key||"",L[n=(r=T&&g<(k?0:C))?A:w]||(L[n]={}),L[n][p]||(O[n]?.[p]?(L[n][p]=O[n][p],L[n][p].total=null):L[n][p]=new s(t,t.options.stackLabels,!!r,p,M)),o=L[n][p],null!==g?(o.points[h]=o.points[this.index]=[m(o.cumulative,k)],d(o.cumulative)||(o.base=h),o.touched=P.stacksTouched,i.index>0&&!1===this.singleStacks&&(o.points[h][0]=o.points[this.index+","+p+",0"][0])):(delete o.points[h],delete o.points[this.index]);let e=o.total||0;"percent"===f?(a=r?w:A,e=T&&L[a]?.[p]?(a=L[a][p]).total=Math.max(a.total||0,e)+Math.abs(g)||0:l(e+(Math.abs(g)||0))):"group"===f?(u(g)&&(g=g[0]),null!==g&&e++):e=l(e+(g||0)),"group"===f?o.cumulative=(e||1)-1:o.cumulative=l(m(o.cumulative,k)+(g||0)),o.total=e,null!==g&&(o.points[h].push(o.cumulative),b[c]=o.cumulative,o.hasValidPoints=!0)}"percent"===f&&(P.usePercentage=!0),"group"!==f&&(this.stackedYData=b),P.oldStacks={}}class w{constructor(t){this.oldStacks={},this.stacks={},this.stacksTouched=0,this.axis=t}buildStacks(){let t,e;let i=this.axis,s=i.series,r="xAxis"===i.coll,o=i.options.reversedStacks,a=s.length;for(this.resetStacks(),this.usePercentage=!1,e=a;e--;)t=s[o?e:a-e-1],r&&t.setGroupedPoints(i),t.setStackedPoints(i);if(!r)for(e=0;e<a;e++)s[e].modifyStacks();p(i,"afterBuildStacks")}cleanStacks(){this.oldStacks&&(this.stacks=this.oldStacks,f(this.stacks,t=>{f(t,t=>{t.cumulative=t.total})}))}resetStacks(){f(this.stacks,t=>{f(t,(e,i)=>{g(e.touched)&&e.touched<this.stacksTouched?(e.destroy(),delete t[i]):(e.total=null,e.cumulative=null)})})}renderStackTotals(){let t=this.axis,e=t.chart,i=e.renderer,s=this.stacks,r=a(e,t.options.stackLabels?.animation||!1),o=this.stackTotalGroup=this.stackTotalGroup||i.g("stack-labels").attr({zIndex:6,opacity:0}).add();o.translate(e.plotLeft,e.plotTop),f(s,t=>{f(t,t=>{t.render(o)})}),o.animate({opacity:1},r)}}return(o||(o={})).compose=function(t,e,i){let s=e.prototype,r=i.prototype;s.getStacks||(h(t,"init",b),h(t,"destroy",y),s.getStacks=x,r.getStackIndicator=v,r.modifyStacks=S,r.percentStacker=C,r.setGroupedPoints=k,r.setStackedPoints=M)},o}),i(e,"Series/Line/LineSeries.js",[e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{defined:s,merge:r,isObject:o}=i;class a extends t{drawGraph(){let t=this.options,e=(this.gappedPath||this.getGraphPath).call(this),i=this.chart.styledMode;[this,...this.zones].forEach((s,a)=>{let n,h=s.graph,l=h?"animate":"attr",d=s.dashStyle||t.dashStyle;h?(h.endX=this.preventGraphAnimation?null:e.xMap,h.animate({d:e})):e.length&&(s.graph=h=this.chart.renderer.path(e).addClass("highcharts-graph"+(a?` highcharts-zone-graph-${a-1} `:" ")+(a&&s.className||"")).attr({zIndex:1}).add(this.group)),h&&!i&&(n={stroke:!a&&t.lineColor||s.color||this.color||"#cccccc","stroke-width":t.lineWidth||0,fill:this.fillGraph&&this.color||"none"},d?n.dashstyle=d:"square"!==t.linecap&&(n["stroke-linecap"]=n["stroke-linejoin"]="round"),h[l](n).shadow(a<2&&t.shadow&&r({filterUnits:"userSpaceOnUse"},o(t.shadow)?t.shadow:{}))),h&&(h.startX=e.xMap,h.isArea=e.isArea)})}getGraphPath(t,e,i){let r=this,o=r.options,a=[],n=[],h,l=o.step,d=(t=t||r.points).reversed;return d&&t.reverse(),(l=({right:1,center:2})[l]||l&&3)&&d&&(l=4-l),(t=this.getValidPoints(t,!1,!(o.connectNulls&&!e&&!i))).forEac
23499h(function(d,c){let p;let u=d.plotX,g=d.plotY,f=t[c-1],m=d.isNull||"number"!=typeof g;(d.leftCliff||f&&f.rightCliff)&&!i&&(h=!0),m&&!s(e)&&c>0?h=!o.connectNulls:m&&!e?h=!0:(0===c||h?p=[["M",d.plotX,d.plotY]]:r.getPointSpline?p=[r.getPointSpline(t,d,c)]:l?(p=1===l?[["L",f.plotX,g]]:2===l?[["L",(f.plotX+u)/2,f.plotY],["L",(f.plotX+u)/2,g]]:[["L",u,f.plotY]]).push(["L",u,g]):p=[["L",u,g]],n.push(d.x),l&&(n.push(d.x),2===l&&n.push(d.x)),a.push.apply(a,p),h=!1)}),a.xMap=n,r.graphPath=a,a}}return a.defaultOptions=r(t.defaultOptions,{legendSymbol:"lineMarker"}),e.registerSeriesType("line",a),a}),i(e,"Series/Area/AreaSeriesDefaults.js",[],function(){return{threshold:0,legendSymbol:"areaMarker"}}),i(e,"Series/Area/AreaSeries.js",[e["Series/Area/AreaSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{seriesTypes:{line:s}}=e,{extend:r,merge:o,objectEach:a,pick:n}=i;class h extends s{drawGraph(){this.areaPath=[],super.drawGraph.apply(this);let{areaPath:t,options:e}=this;[this,...this.zones].forEach((i,s)=>{let r={},o=i.fillColor||e.fillColor,a=i.area,n=a?"animate":"attr";a?(a.endX=this.preventGraphAnimation?null:t.xMap,a.animate({d:t})):(r.zIndex=0,(a=i.area=this.chart.renderer.path(t).addClass("highcharts-area"+(s?` highcharts-zone-area-${s-1} `:" ")+(s&&i.className||"")).add(this.group)).isArea=!0),this.chart.styledMode||(r.fill=o||i.color||this.color,r["fill-opacity"]=o?1:e.fillOpacity??.75,a.css({pointerEvents:this.stickyTracking?"none":"auto"})),a[n](r),a.startX=t.xMap,a.shiftUnit=e.step?2:1})}getGraphPath(t){let e,i,r;let o=s.prototype.getGraphPath,a=this.options,h=a.stacking,l=this.yAxis,d=[],c=[],p=this.index,u=l.stacking.stacks[this.stackKey],g=a.threshold,f=Math.round(l.getThreshold(a.threshold)),m=n(a.connectNulls,"percent"===h),x=function(i,s,r){let o=t[i],a=h&&u[o.x].points[p],n=o[r+"Null"]||0,m=o[r+"Cliff"]||0,x,y,b=!0;m||n?(x=(n?a[0]:a[1])+m,y=a[0]+m,b=!!n):!h&&t[s]&&t[s].isNull&&(x=y=g),void 0!==x&&(c.push({plotX:e,plotY:null===x?f:l.getThreshold(x),isNull:b,isCliff:!0}
23499),d.push({plotX:e,plotY:null===y?f:l.getThreshold(y),doCurve:!1}))};t=t||this.points,h&&(t=this.getStackPoints(t));for(let s=0,o=t.length;s<o;++s)h||(t[s].leftCliff=t[s].rightCliff=t[s].leftNull=t[s].rightNull=void 0),i=t[s].isNull,e=n(t[s].rectPlotX,t[s].plotX),r=h?n(t[s].yBottom,f):f,i&&!m||(m||x(s,s-1,"left"),i&&!h&&m||(c.push(t[s]),d.push({x:s,plotX:e,plotY:r})),m||x(s,s+1,"right"));let y=o.call(this,c,!0,!0);d.reversed=!0;let b=o.call(this,d,!0,!0),v=b[0];v&&"M"===v[0]&&(b[0]=["L",v[1],v[2]]);let S=y.concat(b);S.length&&S.push(["Z"]);let C=o.call(this,c,!1,m);return S.xMap=y.xMap,this.areaPath=S,C}getStackPoints(t){let e=this,i=[],s=[],r=this.xAxis,o=this.yAxis,h=o.stacking.stacks[this.stackKey],l={},d=o.series,c=d.length,p=o.options.reversedStacks?1:-1,u=d.indexOf(e);if(t=t||this.points,this.options.stacking){for(let e=0;e<t.length;e++)t[e].leftNull=t[e].rightNull=void 0,l[t[e].x]=t[e];a(h,function(t,e){null!==t.total&&s.push(e)}),s.sort(function(t,e){return t-e});let g=d.map(t=>t.visible);s.forEach(function(t,a){let f=0,m,x;if(l[t]&&!l[t].isNull)i.push(l[t]),[-1,1].forEach(function(i){let r=1===i?"rightNull":"leftNull",o=h[s[a+i]],n=0;if(o){let i=u;for(;i>=0&&i<c;){let s=d[i].index;!(m=o.points[s])&&(s===e.index?l[t][r]=!0:g[i]&&(x=h[t].points[s])&&(n-=x[1]-x[0])),i+=p}}l[t][1===i?"rightCliff":"leftCliff"]=n});else{let e=u;for(;e>=0&&e<c;){let i=d[e].index;if(m=h[t].points[i]){f=m[1];break}e+=p}f=n(f,0),f=o.translate(f,0,1,0,1),i.push({isNull:!0,plotX:r.translate(t,0,0,0,1),x:t,plotY:f,yBottom:f})}})}return i}}return h.defaultOptions=o(s.defaultOptions,t),r(h.prototype,{singleStacks:!1}),e.registerSeriesType("area",h),h}),i(e,"Series/Spline/SplineSeries.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{line:i}=t.seriesTypes,{merge:s,pick:r}=e;class o extends i{getPointSpline(t,e,i){let s,o,a,n;let h=e.plotX||0,l=e.plotY||0,d=t[i-1],c=t[i+1];function p(t){return t&&!t.isNull&&!1!==t.doCurve&&!e.isCliff}if(p(d)&&p(c)){let t=d.plotX||0,i=d.plotY||0,r=c.plotX||0,p=c.plotY||0,u=0;s=(1.5*h+t)/2.5,o=(1.5*l+i)/2.5,a=(1.5*h+r)/2.5,n=(1.5*l+p)/2.5,a!==s&&(u=(n-o)*(a-h)/(a-s)+l-n),o+=u,n+=u,o>i&&o>l?(o=Math.max(i,l),n=2*l-o):o<i&&o<l&&(o=Math.min(i,l),n=2*l-o),n>p&&n>l?(n=Math.max(p,l),o=2*l-n):n<p&&n<l&&(n=Math.min(p,l),o=2*l-n),e.rightContX=a,e.rightContY=n,e.controlPoints={low:[s,o],high:[a,n]}}let u=["C",r(d.rightContX,d.plotX,0),r(d.rightContY,d.plotY,0),r(s,h,0),r(o,l,0),h,l];return d.rightContX=d.rightContY=void 0,u}}return o.defaultOptions=s(i.defaultOptions),t.registerSeriesType("spline",o),o}),i(e,"Series/AreaSpline/AreaSplineSeries.js",[e["Series/Spline/SplineSeries.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{area:s,area:{prototype:r}}=e.seriesTypes,{extend:o,merge:a}=i;class n extends t{}return n.defaultOptions=a(t.defaultOptions,s.defaultOptions),o(n.prototype,{getGraphPath:r.getGraphPath,getStackPoints:r.getStackPoints,drawGraph:r.drawGraph}),e.registerSeriesType("areaspline",n),n}),i(e,"Series/Column/ColumnSeriesDefaults.js",[],function(){return{borderRadius:3,centerInCategory:!1,groupPadding:.2,marker:null,pointPadding:.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{halo:!1,brightness:.1},select:{color:"#cccccc",borderColor:"#000000"}},dataLabels:{align:void 0,verticalAlign:void 0,y:void 0},startFromThreshold:!0,stickyTracking:!1,tooltip:{distance:6},threshold:0,borderColor:"#ffffff"}}),i(e,"Series/Column/ColumnSeries.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Color/Color.js"],e["Series/Column/ColumnSeriesDefaults.js"],e["Core/Globals.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a){let{animObject:n}=t,{parse:h}=e,{noop:l}=s,{clamp:d,crisp:c,defined:p,extend:u,fireEvent:g,isArray:f,isNumber:m,merge:x,pick:y,objectEach:b}=a;class v extends r{animate(t){let e,i;let s=this,r=this.yAxis,o=r.pos,a=r.reversed,h=s.options,{clipOffset:l,inverted:c}=this.chart,p={},g=c?"translateX":"translateY";t&&l?(p.scaleY=.001,i=d(r.toPixels(h.threshold),o,o+r.len),c?(i+=a?-Math.floor(l[0]):Math.ceil(l[2]),p.translateX=i-r.len):(i+=a?Math.
23499ceil(l[0]):-Math.floor(l[2]),p.translateY=i),s.clipBox&&s.setClip(),s.group.attr(p)):(e=Number(s.group.attr(g)),s.group.animate({scaleY:1},u(n(s.options.animation),{step:function(t,i){s.group&&(p[g]=e+i.pos*(o-e),s.group.attr(p))}})))}init(t,e){super.init.apply(this,arguments);let i=this;(t=i.chart).hasRendered&&t.series.forEach(function(t){t.type===i.type&&(t.isDirty=!0)})}getColumnMetrics(){let t=this,e=t.options,i=t.xAxis,s=t.yAxis,r=i.options.reversedStacks,o=i.reversed&&!r||!i.reversed&&r,a={},n,h=0;!1===e.grouping?h=1:t.chart.series.forEach(function(e){let i;let r=e.yAxis,o=e.options;e.type===t.type&&e.reserveSpace()&&s.len===r.len&&s.pos===r.pos&&(o.stacking&&"group"!==o.stacking?(void 0===a[n=e.stackKey]&&(a[n]=h++),i=a[n]):!1!==o.grouping&&(i=h++),e.columnIndex=i)});let l=Math.min(Math.abs(i.transA)*(!i.brokenAxis?.hasBreaks&&i.ordinal?.slope||e.pointRange||i.closestPointRange||i.tickInterval||1),i.len),d=l*e.groupPadding,c=(l-2*d)/(h||1),p=Math.min(e.maxPointWidth||i.len,y(e.pointWidth,c*(1-2*e.pointPadding))),u=(t.columnIndex||0)+(o?1:0);return t.columnMetrics={width:p,offset:(c-p)/2+(d+u*c-l/2)*(o?-1:1),paddedWidth:c,columnCount:h},t.columnMetrics}crispCol(t,e,i,s){let r=this.borderWidth,o=this.chart.inverted;return s=c(e+s,r,o)-(e=c(e,r,o)),this.options.crisp&&(i=c(t+i,r)-(t=c(t,r))),{x:t,y:e,width:i,height:s}}adjustForMissingColumns(t,e,i,s){if(!i.isNull&&s.columnCount>1){let r=this.xAxis.series.filter(t=>t.visible).map(t=>t.index),o=0,a=0;b(this.xAxis.stacking?.stacks,t=>{if("number"==typeof i.x){let e=t[i.x.toString()];if(e&&f(e.points[this.index])){let t=Object.keys(e.points).filter(t=>!t.match(",")&&e.points[t]&&e.points[t].length>1).map(parseFloat).filter(t=>-1!==r.indexOf(t)).sort((t,e)=>e-t);o=t.indexOf(this.index),a=t.length}}}),o=this.xAxis.reversed?a-1-o:o;let n=(a-1)*s.paddedWidth+e;t=(i.plotX||0)+n/2-e-o*s.paddedWidth}return t}translate(){let t=this,e=t.chart,i=t.options,s=t.dense=t.closestPointRange*t.xAxis.transA<2,o=t.borderWidth=y(i.borderWidth,s?0:1),a=t.xAxis,n=t.yAxis,h=i.threshold,l=y(i.minPointLength,5),c=t.getColumnMetrics(),u=c.width,f=t.pointXOffset=c.offset,x=t.dataMin,b=t.dataMax,v=t.translatedThreshold=n.getThreshold(h),S=t.barW=Math.max(u,1+2*o);i.pointPadding&&(S=Math.ceil(S)),r.prototype.translate.apply(t),t.points.forEach(function(s){let r=y(s.yBottom,v),o=999+Math.abs(r),g=s.plotX||0,C=d(s.plotY,-o,n.len+o),k,M=Math.min(C,r),w=Math.max(C,r)-M,A=u,T=g+f,P=S;l&&Math.abs(w)<l&&(w=l,k=!n.reversed&&!s.negative||n.reversed&&s.negative,m(h)&&m(b)&&s.y===h&&b<=h&&(n.min||0)<h&&(x!==b||(n.max||0)<=h)&&(k=!k,s.negative=!s.negative),M=Math.abs(M-v)>l?r-l:v-(k?l:0)),p(s.options.pointWidth)&&(T-=Math.round(((A=P=Math.ceil(s.options.pointWidth))-u)/2)),i.centerInCategory&&!i.stacking&&(T=t.adjustForMissingColumns(T,A,s,c)),s.barX=T,s.pointWidth=A,s.tooltipPos=e.inverted?[d(n.len+n.pos-e.plotLeft-C,n.pos-e.plotLeft,n.len+n.pos-e.plotLeft),a.len+a.pos-e.plotTop-T-P/2,w]:[a.left-e.plotLeft+T+P/2,d(C+n.pos-e.plotTop,n.pos-e.plotTop,n.len+n.pos-e.plotTop),w],s.shapeType=t.pointClass.prototype.shapeType||"roundedRect",s.shapeArgs=t.crispCol(T,s.isNull?v:M,P,s.isNull?0:w)}),g(this,"afterColumnTranslate")}drawGraph(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")}pointAttribs(t,e){let i=this.options,s=this.pointAttrToOptions||{},r=s.stroke||"borderColor",o=s["stroke-width"]||"borderWidth",a,n,l,d=t&&t.color||this.color,c=t&&t[r]||i[r]||d,p=t&&t.options.dashStyle||i.dashStyle,u=t&&t[o]||i[o]||this[o]||0,g=y(t&&t.opacity,i.opacity,1);t&&this.zones.length&&(n=t.getZone(),d=t.options.color||n&&(n.color||t.nonZonedColor)||this.color,n&&(c=n.borderColor||c,p=n.dashStyle||p,u=n.borderWidth||u)),e&&t&&(l=(a=x(i.states[e],t.options.states&&t.options.states[e]||{})).brightness,d=a.color||void 0!==l&&h(d).brighten(a.brightness).get()||d,c=a[r]||c,u=a[o]||u,p=a.dashStyle||p,g=y(a.opacity,g));let f={fill:d,stroke:c,"stroke-width":u,opacity:g};return p&&(f.dashstyle=p),f}drawPoints(t=this.points){let e;let i=this,s=this.chart,r=i.options,o=s.renderer,a=r.animationLimit||250;t.forEach(function(t){let n=t.plotY,h=t.graphic,l=!!h,d=h&&s.pointCount<a?"animate":"attr";m(n)&&null!==t.y?(e=t.shapeArgs,h&&t.hasNewShapeType()&&(h=h.destroy()),i.enabledDataSorting&&(t.startXPos=i.xAxis.reversed?-(e&&e.width||0):i.xAxis.width),!h&&(t.graphic=h=o[t.shapeType](e).add(t.group||i.group),h&&i.enabledDataSorting&&s.hasRendered&&s.pointCount<a&&(h.attr({x:t.startXPos}),l=!0,d="animate")),h&&l&&h[d](x(e)),s.styledMode||h[d](i.pointAttribs(t,t.selected&&"select")).shadow(!1!==t.allowShadow&&r.shadow),h&&(h.addClass(t.getClassName(),!0),h.attr({visibility:t.visible?"inherit":"hidden"}))):h&&(t.graphic=h.destroy())})}drawTracker(t=this.points){let e;let i=this,s=i.chart,r=s.pointer,o=function(t){let e=r?.getPointFromEvent(t);r&&e&&i.options.enableMouseTracking&&(r.isDirectTouch=!0,e.onMouseOver(t))};t.forEach(function(t){e=f(t.dataLabels)?t.dataLabels:t.dataLabel?[t.dataLabel]:[],t.graphic&&(t.graphic.element.point=t),e.forEach(function(e){(e.div||e.element).point=t})}),i._hasTracking||(i.trackerGroups.forEach(function(t){i[t]&&(i[t].addClass("highcharts-tracker").on("mouseover",o).on("mouseout",function(t){r?.onTrackerMouseOut(t)}).on("touchstart",o),!s.styledMode&&i.options.cursor&&i[t].css({cursor:i.options.cursor}))}),i._hasTracking=!0),g(this,"afterDrawTracker")}remove(){let t=this,e=t.chart;
23499e.hasRendered&&e.series.forEach(function(e){e.type===t.type&&(e.isDirty=!0)}),r.prototype.remove.apply(t,arguments)}}return v.defaultOptions=x(r.defaultOptions,i),u(v.prototype,{directTouch:!0,getSymbol:l,negStacks:!0,trackerGroups:["group","dataLabelsGroup"]}),o.registerSeriesType("column",v),v}),i(e,"Core/Series/DataLabel.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Templating.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{getDeferredAnimation:r}=t,{format:o}=e,{defined:a,extend:n,fireEvent:h,isArray:l,isString:d,merge:c,objectEach:p,pick:u,pInt:g,splat:f}=i;return function(t){function e(){return v(this).some(t=>t?.enabled)}function i(t,e,i,s,r){let{chart:o,enabledDataSorting:h}=this,l=this.isCartesian&&o.inverted,d=t.plotX,p=t.plotY,g=i.rotation||0,f=a(d)&&a(p)&&o.isInsidePlot(d,Math.round(p),{inverted:l,paneCoordinates:!0,series:this}),m=0===g&&"justify"===u(i.overflow,h?"none":"justify"),x=this.visible&&!1!==t.visible&&a(d)&&(t.series.forceDL||h&&!m||f||u(i.inside,!!this.options.stacking)&&s&&o.isInsidePlot(d,l?s.x+1:s.y+s.height-1,{inverted:l,paneCoordinates:!0,series:this})),y=t.pos();if(x&&y){var b;let a=e.getBBox(),d=e.getBBox(void 0,0),p={right:1,center:.5}[i.align||0]||0,v={bottom:1,middle:.5}[i.verticalAlign||0]||0;if(s=n({x:y[0],y:Math.round(y[1]),width:0,height:0},s||{}),"plotEdges"===i.alignTo&&this.isCartesian&&(s[l?"x":"y"]=0,s[l?"width":"height"]=this.yAxis?.len||0),n(i,{width:a.width,height:a.height}),b=s,h&&this.xAxis&&!m&&this.setDataLabelStartPos(t,e,r,f,b),e.align(c(i,{width:d.width,height:d.height}),!1,s,!1),e.alignAttr.x+=p*(d.width-a.width),e.alignAttr.y+=v*(d.height-a.height),e[e.placed?"animate":"attr"]({x:e.alignAttr.x+(a.width-d.width)/2,y:e.alignAttr.y+(a.height-d.height)/2,rotationOriginX:(e.width||0)/2,rotationOriginY:(e.height||0)/2}),m&&s.height>=0)this.justifyDataLabel(e,i,e.alignAttr,a,s,r);else if(u(i.crop,!0)){let{x:t,y:i}=e.alignAttr;x=o.isInsidePlot(t,i,{paneCoordinates:!0,series:this})&&o.isInsidePlot(t+a.width-1,i+a.height-1,{paneCoordinates:!0,series:this})}i.shape&&!g&&e[r?"attr":"animate"]({anchorX:y[0],anchorY:y[1]})}r&&h&&(e.placed=!1),x||h&&!m?(e.show(),e.placed=!0):(e.hide(),e.placed=!1)}function s(){return this.plotGroup("dataLabelsGroup","data-labels",this.hasRendered?"inherit":"hidden",this.options.dataLabels.zIndex||6)}function m(t){let e=this.hasRendered||0,i=this.initDataLabelsGroup().attr({opacity:+e});return!e&&i&&(this.visible&&i.show(),this.options.animation?i.animate({opacity:1},t):i.attr({opacity:1})),i}function x(t){let e;t=t||this.points;let i=this,s=i.chart,n=i.options,l=s.renderer,{backgroundColor:c,plotBackgroun
23499dColor:m}=s.options.chart,x=l.getContrast(d(m)&&m||d(c)&&c||"#000000"),y=v(i),{animation:S,defer:C}=y[0],k=C?r(s,S,i):{defer:0,duration:0};h(this,"drawDataLabels"),i.hasDataLabels?.()&&(e=this.initDataLabels(k),t.forEach(t=>{let r=t.dataLabels||[];f(b(y,t.dlOptions||t.options?.dataLabels)).forEach((h,c)=>{let f=h.enabled&&(t.visible||t.dataLabelOnHidden)&&(!t.isNull||t.dataLabelOnNull)&&function(t,e){let i=e.filter;if(i){let e=i.operator,s=t[i.property],r=i.value;return">"===e&&s>r||"<"===e&&s<r||">="===e&&s>=r||"<="===e&&s<=r||"=="===e&&s==r||"==="===e&&s===r||"!="===e&&s!=r||"!=="===e&&s!==r}return!0}(t,h),{backgroundColor:m,borderColor:y,distance:b,style:v={}}=h,S,C,k,M,w={},A=r[c],T=!A,P;if(f&&(C=u(h[t.formatPrefix+"Format"],h.format),S=t.getLabelConfig(),k=a(C)?o(C,S,s):(h[t.formatPrefix+"Formatter"]||h.formatter).call(S,h),M=h.rotation,!s.styledMode&&(v.color=u(h.color,v.color,d(i.color)?i.color:void 0,"#000000"),"contrast"===v.color?("none"!==m&&(P=m),t.contrastColor=l.getContrast("auto"!==P&&P||t.color||i.color),v.color=P||!a(b)&&h.inside||0>g(b||0)||n.stacking?t.contrastColor:x):delete t.contrastColor,n.cursor&&(v.cursor=n.cursor)),w={r:h.borderRadius||0,rotation:M,padding:h.padding,zIndex:1},s.styledMode||(w.fill="auto"===m?t.color:m,w.stroke="auto"===y?t.color:y,w["stroke-width"]=h.borderWidth),p(w,(t,e)=>{void 0===t&&delete w[e]})),!A||f&&a(k)&&!!A.div==!!h.useHTML&&(A.rotation&&h.rotation||A.rotation===h.rotation)||(A=void 0,T=!0),f&&a(k)&&(A?w.text=k:(A=l.label(k,0,0,h.shape,void 0,void 0,h.useHTML,void 0,"data-label")).addClass(" highcharts-data-label-color-"+t.colorIndex+" "+(h.className||"")+(h.useHTML?" highcharts-tracker":"")),A)){A.options=h,A.attr(w),s.styledMode||A.css(v).shadow(h.shadow);let o=h[t.formatPrefix+"TextPath"]||h.textPath;o&&!h.useHTML&&(A.setTextPath(t.getDataLabelPath?.(A)||t.graphic,o),t.dataLabelPath&&!o.enabled&&(t.dataLabelPath=t.dataLabelPath.destroy())),A.added||A.add(e),i.alignDataLabel(t,A,h,void 0,T),A.isActive=!0,r[c]&&r[c]!==A&&r[c].destroy(),r[c]=A}});let h=r.length;for(;h--;)r[h]&&r[h].isActive?r[h].isActive=!1:(r[h]?.destroy(),r.splice(h,1));t.dataLabel=r[0],t.dataLabels=r})),h(this,"afterDrawDataLabels")}function y(t,e,i,s,r,o){let a=this.chart,n=e.align,h=e.verticalAlign,l=t.box?0:t.padding||0,d=a.inverted?this.yAxis:this.xAxis,c=d?d.left-a.plotLeft:0,p=a.inverted?this.xAxis:this.yAxis,u=p?p.top-a.plotTop:0,{x:g=0,y:f=0}=e,m,x;return(m=(i.x||0)+l+c)<0&&("right"===n&&g>=0?(e.align="left",e.inside=!0):g-=m,x=!0),(m=(i.x||0)+s.width-l+c)>a.plotWidth&&("left"===n&&g<=0?(e.align="right",e.inside=!0):g+=a.plotWidth-m,x=!0),(m=i.y+l+u)<0&&("bottom"===h&&f>=0?(e.verticalAlign="top",e.inside=!0):f-=m,x=!0),(m=(i.y||0)+s.height-l+u)>a.plotHeight&&("top"===h&&f<=0?(e.verticalAlign="bottom",e.inside=!0):f+=a.plotHeight-m,x=!0),x&&(e.x=g,e.y=f,t.placed=!o,t.align(e,void 0,r)),x}function b(t,e){let i=[],s;if(l(t)&&!l(e))i=t.map(function(t){return c(t,e)});else if(l(e)&&!l(t))i=e.map(function(e){return c(t,e)});else if(l(t)||l(e)){if(l(t)&&l(e))for(s=Math.max(t.length,e.length);s--;)i[s]=c(t[s],e[s])}else i=c(t,e);return i}function v(t){let e=t.chart.options.plotOptions;return f(b(b(e?.series?.dataLabels,e?.[t.type]?.dataLabels),t.options.dataLabels))}function S(t,e,i,s,r){let o=this.chart,a=o.inverted,n=this.xAxis,h=n.reversed,l=((a?e.height:e.width)||0)/2,d=t.pointWidth,c=d?d/2:0;e.startXPos=a?r.x:h?-l-c:n.width-l+c,e.startYPos=a?h?this.yAxis.height-l+c:-l-c:r.y,s?"hidden"===e.visibility&&(e.show(),e.attr({opacity:0}).animate({opacity:1})):e.attr({opacity:1}).animate({opacity:0}
23499,void 0,e.hide),o.hasRendered&&(i&&e.attr({x:e.startXPos,y:e.startYPos}),e.placed=!0)}t.compose=function(t){let r=t.prototype;r.initDataLabels||(r.initDataLabels=m,r.initDataLabelsGroup=s,r.alignDataLabel=i,r.drawDataLabels=x,r.justifyDataLabel=y,r.setDataLabelStartPos=S,r.hasDataLabels=e)}}(s||(s={})),s}),i(e,"Series/Column/ColumnDataLabel.js",[e["Core/Series/DataLabel.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){var r;let{composed:o}=e,{series:a}=i,{merge:n,pick:h,pushUnique:l}=s;return function(e){function i(t,e,i,s,r){let o=this.chart.inverted,l=t.series,d=(l.xAxis?l.xAxis.len:this.chart.plotSizeX)||0,c=(l.yAxis?l.yAxis.len:this.chart.plotSizeY)||0,p=t.dlBox||t.shapeArgs,u=h(t.below,t.plotY>h(this.translatedThreshold,c)),g=h(i.inside,!!this.options.stacking);if(p){if(s=n(p),!("allow"===i.overflow&&!1===i.crop)){s.y<0&&(s.height+=s.y,s.y=0);let t=s.y+s.height-c;t>0&&t<s.height-1&&(s.height-=t)}o&&(s={x:c-s.y-s.height,y:d-s.x-s.width,width:s.height,height:s.width}),g||(o?(s.x+=u?0:s.width,s.width=0):(s.y+=u?s.height:0,s.height=0))}i.align=h(i.align,!o||g?"center":u?"right":"left"),i.verticalAlign=h(i.verticalAlign,o||g?"middle":u?"top":"bottom"),a.prototype.alignDataLabel.call(this,t,e,i,s,r),i.inside&&t.contrastColor&&e.css({color:t.contrastColor})}e.compose=function(e){t.compose(a),l(o,"ColumnDataLabel")&&(e.prototype.alignDataLabel=i)}}(r||(r={})),r}),i(e,"Series/Bar/BarSeries.js",[e["Series/Column/ColumnSeries.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{extend:s,merge:r}=i;class o extends t{}return o.defaultOptions=r(t.defaultOptions,{}),s(o.prototype,{inverted:!0}),e.registerSeriesType("bar",o),o}),i(e,"Series/Scatter/ScatterSeriesDefaults.js",[],function(){return{lineWidth:0,findNearestPointBy:"xy",jitter:{x:0,y:0},marker:{enabled:!0},tooltip:{headerFormat:'<span style="color:{point.color}">●</span> <span style="font-size: 0.8em"> {series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"}}}),i(e,"Series/Scatter/ScatterSeries.js",[e["Series/Scatter/ScatterSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{column:s,line:r}=e.seriesTypes,{addEvent:o,extend:a,merge:n}=i;class h extends r{applyJitter(){let t=this,e=this.options.jitter,i=this.points.length;e&&this.points.forEach(function(s,r){["x","y"].forEach(function(o,a){if(e[o]&&!s.isNull){let n=`plot${o.toUpperCase()}`,h=t[`${o}Axis`],l=e[o]*h.transA;if(h&&!h.logarithmic){let t=Math.max(0,(s[n]||0)-l),e=Math.min(h.len,(s[n]||0)+l);s[n]=t+(e-t)*function(t){let e=1e4*Math.sin(t);return e-Math.floor(e)}(r+a*i),"x"===o&&(s.clientX=s.plotX)}}})})}drawGraph(){this.options.lineWidth?super.drawGraph():this.graph&&(this.graph=this.graph.destroy())}}return h.defaultOptions=n(r.defaultOptions,t),a(h.prototype,{drawTracker:s.prototype.drawTracker,sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","markerGroup","dataLabelsGroup"]}),o(h,"afterTranslate",function(){this.applyJitter()}),e.registerSeriesType("scatter",h),h}),i(e,"Series/CenteredUtilities.js",[e["Core/Globals.js"],e["Core/Series/Series.js"],e["Core/Utilities.js"]],function(t,e,i){var s,r;let{deg2rad:o}=t,{fireEvent:a,isNumber:n,pick:h,relativeLength:l}=i;return(r=s||(s={})).getCenter=function(){let t=this.options,i=this.chart,s=2*(t.slicedOffset||0),r=i.plotWidth-2*s,o=i.plotHeight-2*s,d=t.center,c=Math.min(r,o),p=t.thickness,u,g=t.size,f=t.innerSize||0,m,x;"string"==typeof g&&(g=parseFloat(g)),"string"==typeof f&&(f=parseFloat(f));let y=[h(d[0],"50%"),h(d[1],"50%"),h(g&&g<0?void 0:t.size,"100%"),h(f&&f<0?void 0:t.innerSize||0,"0%")];for(!i.angular||this instanceof e||(y[3]=0),m=0;m<4;++m)x=y[m],u=m<2||2===m&&/%$/.test(x),y[m]=l(x,[r,o,c,y[2]][m])+(u?s:0);return y[3]>y[2]&&(y[3]=y[2]),n(p)&&2*p<y[2]&&p>0&&(y[3]=y[2]-2*p),a(this,"afterGetCenter",{positions:y}),y},r.getStartAndEndRadians=function(t,e){let i=n(t)?t:0,s=n(e)&&e>i&&e-i<360?e:i+360;return{start:o*(i+-90),end:o*(s+-90)}},s}
23499),i(e,"Series/Pie/PiePoint.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Series/Point.js"],e["Core/Utilities.js"]],function(t,e,i){let{setAnimation:s}=t,{addEvent:r,defined:o,extend:a,isNumber:n,pick:h,relativeLength:l}=i;class d extends e{getConnectorPath(t){let e=t.dataLabelPosition,i=t.options||{},s=i.connectorShape,r=this.connectorShapes[s]||s;return e&&r.call(this,{...e.computed,alignment:e.alignment},e.connectorPosition,i)||[]}getTranslate(){return this.sliced&&this.slicedTranslation||{translateX:0,translateY:0}}haloPath(t){let e=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(e.x,e.y,e.r+t,e.r+t,{innerR:e.r-1,start:e.start,end:e.end,borderRadius:e.borderRadius})}constructor(t,e,i){super(t,e,i),this.half=0,this.name??(this.name="Slice");let s=t=>{this.slice("select"===t.type)};r(this,"select",s),r(this,"unselect",s)}isValid(){return n(this.y)&&this.y>=0}setVisible(t,e=!0){t!==this.visible&&this.update({visible:t??!this.visible},e,void 0,!1)}slice(t,e,i){let r=this.series;s(i,r.chart),e=h(e,!0),this.sliced=this.options.sliced=t=o(t)?t:!this.sliced,r.options.data[r.data.indexOf(this)]=this.options,this.graphic&&this.graphic.animate(this.getTranslate())}}return a(d.prototype,{connectorShapes:{fixedOffset:function(t,e,i){let s=e.breakAt,r=e.touchingSliceAt,o=i.softConnector?["C",t.x+("left"===t.alignment?-5:5),t.y,2*s.x-r.x,2*s.y-r.y,s.x,s.y]:["L",s.x,s.y];return[["M",t.x,t.y],o,["L",r.x,r.y]]},straight:function(t,e){let i=e.touchingSliceAt;return[["M",t.x,t.y],["L",i.x,i.y]]},crookedLine:function(t,e,i){let{breakAt:s,touchingSliceAt:r}=e,{series:o}=this,[a,n,h]=o.center,d=h/2,{plotLeft:c,plotWidth:p}=o.chart,u="left"===t.alignment,{x:g,y:f}=t,m=s.x;if(i.crookDistance){let t=l(i.crookDistance,1);m=u?a+d+(p+c-a-d)*(1-t):c+(a-d)*t}else m=a+(n-f)*Math.tan((this.angle||0)-Math.PI/2);let x=[["M",g,f]];return(u?m<=g&&m>=s.x:m>=g&&m<=s.x)&&x.push(["L",m,f]),x.push(["L",s.x,s.y],["L",r.x,r.y]),x}}}),d}),i(e,"Series/Pie/PieSeriesDefaults.js",[],function(){return{borderRadius:3,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{connectorPadding:5,connectorShape:"crookedLine",crookDistance:void 0,distance:30,enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},softConnector:!0,x:0},fillColor:void 0,ignoreHiddenPoint:!0,inactiveOtherPoints:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:"#ffffff",borderWidth:1,lineWidth:void 0,states:{hover:{brightness:.1}}}}),i(e,"Series/Pie/PieSeries.js",[e["Series/CenteredUtilities.js"],e["Series/Column/ColumnSeries.js"],e["Core/Globals.js"],e["Series/Pie/PiePoint.js"],e["Series/Pie/PieSeriesDefaults.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/Symbols.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n,h){let{getStartAndEndRadians:l}=t,{noop:d}=i,{clamp:c,extend:p,fireEvent:u,merge:g,pick:f}=h;class m extends o{animate(t){let e=this,i=e.points,s=e.startAngleRad;t||i.forEach(function(t){let i=t.graphic,r=t.shapeArgs;i&&r&&(i.attr({r:f(t.startR,e.center&&e.center[3]/2),start:s,end:s}),i.animate({r:r.r,start:r.start,end:r.end},e.options.animation))})}drawEmpty(){let t,e;let i=this.startAngleRad,s=this.endAngleRad,r=this.options;0===this.total&&this.center?(t=this.center[0],e=this.center[1],this.graph||(this.graph=this.chart.renderer.arc(t,e,this.center[1]/2,0,i,s).addClass("highcharts-empty-series").add(this.group)),this.graph.attr({d:n.arc(t,e,this.center[2]/2,0,{start:i,end:s,innerR:this.center[3]/2})}),this.chart.styledMode||this.graph.attr({"stroke-width":r.borderWidth,fill:r.fillColor||"none",stroke:r.color||"#cccccc"})):this.graph&&(this.graph=this.graph.destroy())}drawPoints(){let t=this.chart.renderer;this.points.forEach(function(e){e.graphic&&e.hasNewShapeType()&&(e.graphic=e.graphic.destroy()),e.graphic||(e.graphic=t[e.shapeType](e.shapeArgs).add(e.series.group),e.delayedRendering=!0)})}generatePoints(){super.generatePoints(),this.updateTotals()}getX(t,e,i,s){let r=this.center,o=this.radii?this.radii[i.index]||0:r[2]/2,a=s.dataLabelPosition,n=a?.distance||0,h=Math.asin(c((t-r[1])/(o+n),-1,1));return r[0]+Math.cos(h)*(o+n)*(e?-1:1)+(n>0?(e?-1:1)*(s.padding||0):0)}hasData(){return!!this.processedXData.length}redrawPoints(){let t,e,i,s;let r=this,o=r.chart;this.drawEmpty(),r.group&&!o.styledMode&&r.group.shadow(r.options.shadow),r.points.forEac
vendor: 3,064 bytes, line 23499
23499h(function(a){let n={};e=a.graphic,!a.isNull&&e?(s=a.shapeArgs,t=a.getTranslate(),o.styledMode||(i=r.pointAttribs(a,a.selected&&"select")),a.delayedRendering?(e.setRadialReference(r.center).attr(s).attr(t),o.styledMode||e.attr(i).attr({"stroke-linejoin":"round"}),a.delayedRendering=!1):(e.setRadialReference(r.center),o.styledMode||g(!0,n,i),g(!0,n,s,t),e.animate(n)),e.attr({visibility:a.visible?"inherit":"hidden"}),e.addClass(a.getClassName(),!0)):e&&(a.graphic=e.destroy())})}sortByAngle(t,e){t.sort(function(t,i){return void 0!==t.angle&&(i.angle-t.angle)*e})}translate(t){u(this,"translate"),this.generatePoints();let e=this.options,i=e.slicedOffset,s=l(e.startAngle,e.endAngle),r=this.startAngleRad=s.start,o=(this.endAngleRad=s.end)-r,a=this.points,n=e.ignoreHiddenPoint,h=a.length,d,c,p,g,f,m,x,y=0;for(t||(this.center=t=this.getCenter()),m=0;m<h;m++){x=a[m],d=r+y*o,x.isValid()&&(!n||x.visible)&&(y+=x.percentage/100),c=r+y*o;let e={x:t[0],y:t[1],r:t[2]/2,innerR:t[3]/2,start:Math.round(1e3*d)/1e3,end:Math.round(1e3*c)/1e3};x.shapeType="arc",x.shapeArgs=e,(p=(c+d)/2)>1.5*Math.PI?p-=2*Math.PI:p<-Math.PI/2&&(p+=2*Math.PI),x.slicedTranslation={translateX:Math.round(Math.cos(p)*i),translateY:Math.round(Math.sin(p)*i)},g=Math.cos(p)*t[2]/2,f=Math.sin(p)*t[2]/2,x.tooltipPos=[t[0]+.7*g,t[1]+.7*f],x.half=p<-Math.PI/2||p>Math.PI/2?1:0,x.angle=p}u(this,"afterTranslate")}updateTotals(){let t=this.points,e=t.length,i=this.options.ignoreHiddenPoint,s,r,o=0;for(s=0;s<e;s++)(r=t[s]).isValid()&&(!i||r.visible)&&(o+=r.y);for(s=0,this.total=o;s<e;s++)(r=t[s]).percentage=o>0&&(r.visible||!i)?r.y/o*100:0,r.total=o}}return m.defaultOptions=g(o.defaultOptions,r),p(m.prototype,{axisTypes:[],directTouch:!0,drawGraph:void 0,drawTracker:e.prototype.drawTracker,getCenter:t.getCenter,getSymbol:d,invertible:!1,isCartesian:!1,noSharedTooltip:!0,pointAttribs:e.prototype.pointAttribs,pointClass:s,requireSorting:!1,searchPoint:d,trackerGroups:["group","dataLabelsGroup"]}),a.registerSeriesType("pie",m),m}),i(e,"Series/Pie/PieDataLabel.js",[e["Core/Series/DataLabel.js"],e["Core/Globals.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){var o;let{composed:a,noop:n}=e,{distribute:h}=i,{series:l}=s,{arrayMax:d,clamp:c,defined:p,pick:u,pushUnique:g,relativeLength:f}=r;return function(e){let i={radialDistributionY:function(t,e){return(e.dataLabelPosition?.top||0)+t.distributeBox.pos},radialDistributionX:function(t,e,i,s,r){let o=r.dataLabelPosition;return t.getX(i<(o?.top||0)+2||i>(o?.bottom||0)-2?s:i,e.half,e,r)},justify:function(t,e,i,s){return s[0]+(t.half?-1:1)*(i+(e.dataLabelPosition?.distance||0))},alignToPlotEdges:function(t,e,i,s){let r=t.getBBox().width;return e?r+s:i-r-s},alignToConnectors:function(t,e,i,s){let r=0,o;return t.forEach(function(t){(o=t.dataLabel.getBBox().width)>r&&(r=o)}),e?r+s:i-r-s}};function s(t,e){let{center:i,options:s}=this,r=i[2]/2,o=t.angle||0,a=Math.cos(o),n=Math.sin(o),h=i[0]+a*r,l=i[1]+n*r,d=Math.min((s.slicedOffset||0)+(s.borderWidth||0),e/5);
vendor: 4,810 bytes, line 23499
23499return{natural:{x:h+a*e,y:l+n*e},computed:{},alignment:e<0?"center":t.half?"right":"left",connectorPosition:{breakAt:{x:h+a*d,y:l+n*d},touchingSliceAt:{x:h,y:l}},distance:e}}function r(){let t=this,e=t.points,i=t.chart,s=i.plotWidth,r=i.plotHeight,o=i.plotLeft,a=Math.round(i.chartWidth/3),n=t.center,c=n[2]/2,g=n[1],m=[[],[]],x=[0,0,0,0],y=t.dataLabelPositioners,b,v,S,C=0;t.visible&&t.hasDataLabels?.()&&(e.forEach(t=>{(t.dataLabels||[]).forEach(t=>{t.shortened&&(t.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),t.shortened=!1)})}),l.prototype.drawDataLabels.apply(t),e.forEach(t=>{(t.dataLabels||[]).forEach((e,i)=>{let s=n[2]/2,r=e.options,o=f(r?.distance||0,s);0===i&&m[t.half].push(t),!p(r?.style?.width)&&e.getBBox().width>a&&(e.css({width:Math.round(.7*a)+"px"}),e.shortened=!0),e.dataLabelPosition=this.getDataLabelPosition(t,o),C=Math.max(C,o)})}),m.forEach((e,a)=>{let l=e.length,d=[],f,m,b=0,k;l&&(t.sortByAngle(e,a-.5),C>0&&(f=Math.max(0,g-c-C),m=Math.min(g+c+C,i.plotHeight),e.forEach(t=>{(t.dataLabels||[]).forEach(e=>{let s=e.dataLabelPosition;s&&s.distance>0&&(s.top=Math.max(0,g-c-s.distance),s.bottom=Math.min(g+c+s.distance,i.plotHeight),b=e.getBBox().height||21,t.distributeBox={target:(e.dataLabelPosition?.natural.y||0)-s.top+b/2,size:b,rank:t.y},d.push(t.distributeBox))})}),h(d,k=m+b-f,k/5)),e.forEach(i=>{(i.dataLabels||[]).forEach(h=>{let l=h.options||{},g=i.distributeBox,f=h.dataLabelPosition,m=f?.natural.y||0,b=l.connectorPadding||0,C=0,k=m,M="inherit";if(f){if(d&&p(g)&&f.distance>0&&(void 0===g.pos?M="hidden":(S=g.size,k=y.radialDistributionY(i,h))),l.justify)C=y.justify(i,h,c,n);else switch(l.alignTo){case"connectors":C=y.alignToConnectors(e,a,s,o);break;case"plotEdges":C=y.alignToPlotEdges(h,a,s,o);break;default:C=y.radialDistributionX(t,i,k,m,h)}if(f.attribs={visibility:M,align:f.alignment},f.posAttribs={x:C+(l.x||0)+(({left:b,right:-b})[f.alignment]||0),y:k+(l.y||0)-h.getBBox().height/2},f.computed.x=C,f.computed.y=k,u(l.crop,!0)){let t;C-(v=h.getBBox().width)<b&&1===a?(t=Math.round(v-C+b),x[3]=Math.max(t,x[3])):C+v>s-b&&0===a&&(t=Math.round(C+v-s+b),x[1]=Math.max(t,x[1])),k-S/2<0?x[0]=Math.max(Math.round(-k+S/2),x[0]):k+S/2>r&&(x[2]=Math.max(Math.round(k+S/2-r),x[2])),f.sideOverflow=t}}})}))}),(0===d(x)||this.verifyDataLabelOverflow(x))&&(this.placeDataLabels(),this.points.forEach(e=>{(e.dataLabels||[]).forEach(s=>{let{connectorColor:r,connectorWidth:o=1}=s.options||{},a=s.dataLabelPosition;if(o){let n;b=s.connector,a&&a.distance>0?(n=!b,b||(s.connector=b=i.renderer.path().addClass("highcharts-data-label-connector  highcharts-color-"+e.colorIndex+(e.className?" "+e.className:"")).add(t.dataLabelsGroup)),i.styledMode||b.attr({"stroke-width":o,stroke:r||e.color||"#666666"}),b[n?"attr":"animate"]({d:e.getConnectorPath(s)}),b.attr({visibility:a.attribs?.visibility})):b&&(s.connector=b.destroy())}})})))}function o(){this.points.forEach(t=>{(t.dataLabels||[]).forEach(t=>{let e=t.dataLabelPosition;e?(e.sideOverflow&&(t.css({width:Math.max(t.getBBox().width-e.sideOverflow,0)+"px",textOverflow:(t.options?.style||{}).textOverflow||"ellipsis"}),t.shortened=!0),t.attr(e.attribs),t[t.moved?"animate":"attr"](e.posAttribs),t.moved=!0):t&&t.attr({y:-9999})}),delete t.distributeBox},this)}function m(t){let e=this.center,i=this.options,s=i.center,r=i.minSize||80,o=r,a=null!==i.size;return!a&&(null!==s[0]?o=Math.max(e[2]-Math.max(t[1],t[3]),r):(o=Math.max(e[2]-t[1]-t[3],r),e[0]+=(t[3]-t[1])/2),null!==s[1]?o=c(o,r,e[2]-Math.max(t[0],t[2])):(o=c(o,r,e[2]-t[0]-t[2]),e[1]+=(t[0]-t[2])/2),o<e[2]?(e[2]=o,e[3]=Math.min(i.thickness?Math.max(0,o-2*i.thickness):Math.max(0,f(i.innerSize||0,o)),o),this.translate(e),this.drawDataLabels&&this.drawDataLabels()):a=!0),a}e.compose=function(e){if(t.compose(l),g(a,"PieDataLabel")){let t=e.prototype;t.dataLabelPositioners=i,t.alignDataLabel=n,t.drawDataLabels=r,t.getDataLabelPosition=s,t.placeDataLabels=o,t.verifyDataLabelOverflow=m}}}(o||(o={})),o}),i(e,"Extensions/OverlappingDataLabels.js",[e["Core/Utilities.js"]],function(t){let{addEvent:e,fireEvent:i,objectEach:s,pick:r}=t;function o(t){let e=t.length,s=(t,e)=>!(e.x>=t.x+t.width||e.x+e.width<=t.x||e.y>=t.y+t.height||e.y+e.height<=t.y),r,o,n,h,l,d=!1;for(let i=0;i<e;i++)(r=t[i])&&(r.oldOpacity=r.opacity,r.newOpacity=1,r.absoluteBox=function(t){if(t&&(!t.alignAttr||t.placed)){let e=t.box?0:t.padding||0,i=t.alignAttr||{x:t.attr("x"),y:t.attr("y")},s=t.getBBox();return t.width=s.width,t.height=s.height,{x:i.x+(t.parentGroup?.translateX||0)+e,y:i.y+(t.parentGroup?.translateY||0)+e,width:(t.width||0)-2*e,height:(t.height||0)-2*e}}}(r));t.sort((t,e)=>(e.labelrank||0)-(t.labelrank||0));for(let i=0;i<e;++i){h=(o=t[i])&&o.absoluteBox;for(let r=i+1;r<e;++r)l=(n=t[r])&&n.absoluteBox,h&&l&&o!==n&&0!==o.newOpacity&&0!==n.newOpacity&&"hidden"
23499!==o.visibility&&"hidden"!==n.visibility&&s(h,l)&&((o.labelrank<n.labelrank?o:n).newOpacity=0)}for(let e of t)a(e,this)&&(d=!0);d&&i(this,"afterHideAllOverlappingLabels")}function a(t,e){let s,r,o=!1;return t&&(r=t.newOpacity,t.oldOpacity!==r&&(t.hasClass("highcharts-data-label")?(t[r?"removeClass":"addClass"]("highcharts-data-label-hidden"),s=function(){e.styledMode||t.css({pointerEvents:r?"auto":"none"})},o=!0,t[t.isOld?"animate":"attr"]({opacity:r},void 0,s),i(e,"afterHideOverlappingLabel")):t.attr({opacity:r})),t.isOld=!0),o}function n(){let t=this,e=[];for(let i of t.labelCollectors||[])e=e.concat(i());for(let i of t.yAxis||[])i.stacking&&i.options.stackLabels&&!i.options.stackLabels.allowOverlap&&s(i.stacking.stacks,t=>{s(t,t=>{t.label&&e.push(t.label)})});for(let i of t.series||[])if(i.visible&&i.hasDataLabels?.()){let s=i=>{for(let s of i)s.visible&&(s.dataLabels||[]).forEach(i=>{let o=i.options||{};i.labelrank=r(o.labelrank,s.labelrank,s.shapeArgs?.height),o.allowOverlap??Number(o.distance)>0?(i.oldOpacity=i.opacity,i.newOpacity=1,a(i,t)):e.push(i)})};s(i.nodes||[]),s(i.points)}this.hideOverlappingLabels(e)}return{compose:function(t){let i=t.prototype;i.hideOverlappingLabels||(i.hideOverlappingLabels=o,e(t,"render",n))}}}
vendor: 3,847 bytes, line 23499
23499),i(e,"Extensions/BorderRadius.js",[e["Core/Defaults.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{defaultOptions:s}=t,{noop:r}=e,{addEvent:o,extend:a,isObject:n,merge:h,relativeLength:l}=i,d={radius:0,scope:"stack",where:void 0},c=r,p=r;function u(t,e,i,s,r={}){let o=c(t,e,i,s,r),{innerR:a=0,r:n=i,start:h=0,end:d=0}=r;if(r.open||!r.borderRadius)return o;let p=d-h,u=Math.sin(p/2),g=Math.max(Math.min(l(r.borderRadius||0,n-a),(n-a)/2,n*u/(1+u)),0),f=Math.min(g,p/Math.PI*2*a),m=o.length-1;for(;m--;)!function(t,e,i){let s,r,o;let a=t[e],n=t[e+1];if("Z"===n[0]&&(n=t[0]),("M"===a[0]||"L"===a[0])&&"A"===n[0]?(s=a,r=n,o=!0):"A"===a[0]&&("M"===n[0]||"L"===n[0])&&(s=n,r=a),s&&r&&r.params){let a=r[1],n=r[5],h=r.params,{start:l,end:d,cx:c,cy:p}=h,u=n?a-i:a+i,g=u?Math.asin(i/u):0,f=n?g:-g,m=Math.cos(g)*u;o?(h.start=l+f,s[1]=c+m*Math.cos(l),s[2]=p+m*Math.sin(l),t.splice(e+1,0,["A",i,i,0,0,1,c+a*Math.cos(h.start),p+a*Math.sin(h.start)])):(h.end=d-f,r[6]=c+a*Math.cos(h.end),r[7]=p+a*Math.sin(h.end),t.splice(e+1,0,["A",i,i,0,0,1,c+m*Math.cos(d),p+m*Math.sin(d)])),r[4]=Math.abs(h.end-h.start)<Math.PI?0:1}}(o,m,m>1?f:g);return o}function g(){if(this.options.borderRadius&&!(this.chart.is3d&&this.chart.is3d())){let{options:t,yAxis:e}=this,i="percent"===t.stacking,r=s.plotOptions?.[this.type]?.borderRadius,o=f(t.borderRadius,n(r)?r:{}),h=e.options.reversed;for(let s of this.points){let{shapeArgs:r}=s;if("roundedRect"===s.shapeType&&r){let{width:n=0,height:d=0,y:c=0}=r,p=c,u=d;if("stack"===o.scope&&s.stackTotal){let r=e.translate(i?100:s.stackTotal,!1,!0,!1,!0),o=e.translate(t.threshold||0,!1,!0,!1,!0),a=this.crispCol(0,Math.min(r,o),0,Math.abs(r-o));p=a.y,u=a.height}let g=(s.negative?-1:1)*(h?-1:1)==-1,f=o.where;!f&&this.is("waterfall")&&Math.abs((s.yBottom||0)-(this.translatedThreshold||0))>this.borderWidth&&(f="all"),f||(f="end");let m=Math.min(l(o.radius,n),n/2,"all"===f?d/2:1/0)||0;"end"===f&&(g&&(p-=m),u+=m),a(r,{brBoxHeight:u,brBoxY:p,r:m})}}}}function f(t,e){return n(t)||(t={radius:t||0}),h(d,e,t)}function m(){let t=f(this.options.borderRadius);for(let e of this.points){let i=e.shapeArgs;i&&(i.borderRadius=l(t.radius,(i.r||0)-(i.innerR||0)))}}function x(t,e,i,s,r={}){let o=p(t,e,i,s,r),{r:a=0,brBoxHeight:n=s,brBoxY:h=e}=r,l=e-h,d=h+n-(e+s),c=l-a>-.1?0:a,u=d-a>-.1?0:a,g=Math.max(c&&l,0),f=Math.max(u&&d,0),m=[t+c,e],x=[t+i-c,e],y=[t+i,e+c],b=[t+i,e+s-u],v=[t+i-u,e+s],S=[t+u,e+s],C=[t,e+s-u],k=[t,e+c],M=(t,e)=>Math.sqrt(Math.pow(t,2)-Math.pow(e,2));if(g){let t=M(c,c-g);m[0]-=t,x[0]+=t,y[1]=k[1]=e+c-g}if(s<c-g){let r=M(c,c-g-s);y[0]=b[0]=t+i-c+r,v[0]=Math.min(y[0],v[0]),S[0]=Math.max(b[0],S[0]),C[0]=k[0]=t+c-r,y[1]=k[1]=e+s}if(f){let t=M(u,u-f);v[0]+=t,S[0]-=t,b[1]=C[1]=e+s-u+f}if(s<u-f){let r=M(u,u-f-s);y[0]=b[0]=t+i-u+r,x[0]=Math.min(y[0],x[0]),m[0]=Math.max(b[0],m[0]),C[0]=k[0]=t+u-r,b[1]=C[1]=e}return o.length=0,o.push(["M",...m],["L",...x],["A",c,c,0,0,1,...y],["L",...b],["A",u,u,0,0,1,...v],["L",...S],["A",u,u,0,0,1,...C],["L",...k],["A",c,c,0,0,1,...m],["Z"]),o}return{compose:function(t,e,i){let s=t.types.pie;if(!e.symbolCustomAttribs.includes("borderRadius")){let r=i.prototype.symbols;o(t,"afterColumnTranslate",g,{order:9}),o(s,"afterTranslate",m),e.symbolCustomAttribs.push("borderRadius","brBoxHeight","brBoxY"),c=r.arc,p=r.roundedRect,r.arc=u,r.roundedRect=x}},optionsToObject:f}}),i(e,"Core/Responsive.js",[e["Core/Utilities.js"]],function(t){var e;let{diffObjects:i,extend:s,find:r,merge:o,pick:a,uniqueKey:n}=t;return function(t){function e(t,e){let i=t.condition;(i.callback||function(){return this.chartWidth<=a(i.maxWidth,Number.MAX_VALUE)&&this.chartHeight<=a(i.maxHeight,Number.MAX_VALUE)&&this.chartWidth>=a(i.minWidth,0)&&this.chartHeight>=a(i.minHeight,0)}).call(this)&&e.push(t._id)}function h(t,e){let s=this.options.responsive,a=this.currentResponsive,h=[],l;
23499!e&&s&&s.rules&&s.rules.forEach(t=>{void 0===t._id&&(t._id=n()),this.matchResponsiveRule(t,h)},this);let d=o(...h.map(t=>r((s||{}).rules||[],e=>e._id===t)).map(t=>t&&t.chartOptions));d.isResponsiveOptions=!0,h=h.toString()||void 0;let c=a&&a.ruleIds;h!==c&&(a&&this.update(a.undoOptions,t,!0),h?((l=i(d,this.options,!0,this.collectionsWithUpdate)).isResponsiveOptions=!0,this.currentResponsive={ruleIds:h,mergedOptions:d,undoOptions:l},this.update(d,t,!0)):this.currentResponsive=void 0)}t.compose=function(t){let i=t.prototype;return i.matchResponsiveRule||s(i,{matchResponsiveRule:e,setResponsive:h}),t}}(e||(e={})),e}),i(e,"masters/highcharts.src.js",[e["Core/Globals.js"],e["Core/Utilities.js"],e["Core/Defaults.js"],e["Core/Animation/Fx.js"],e["Core/Animation/AnimationUtilities.js"],e["Core/Renderer/HTML/AST.js"],e["Core/Templating.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Renderer/HTML/HTMLElement.js"],e["Core/Axis/Axis.js"],e["Core/Axis/DateTimeAxis.js"],e["Core/Axis/LogarithmicAxis.js"],e["Core/Axis/PlotLineOrBand/PlotLineOrBand.js"],e["Core/Axis/Tick.js"],e["Core/Tooltip.js"],e["Core/Series/Point.js"],e["Core/Pointer.js"],e["Core/Legend/Legend.js"],e["Core/Legend/LegendSymbol.js"],e["Core/Chart/Chart.js"],e["Extensions/ScrollablePlotArea.js"],e["Core/Axis/Stacking/StackingAxis.js"],e["Core/Axis/Stacking/StackItem.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Series/Column/ColumnDataLabel.js"],e["Series/Pie/PieDataLabel.js"],e["Core/Series/DataLabel.js"],e["Extensions/OverlappingDataLabels.js"],e["Extensions/
23499BorderRadius.js"],e["Core/Responsive.js"],e["Core/Color/Color.js"],e["Core/Time.js"]],function(t,e,i,s,r,o,a,n,h,l,d,c,p,u,g,f,m,x,y,b,v,S,C,k,M,w,A,T,P,L,O,D,E,I,j,B){return t.AST=o,t.Axis=p,t.Chart=C,t.Color=j,t.DataLabel=O,t.Fx=s,t.HTMLElement=c,t.Legend=v,t.LegendSymbol=S,t.OverlappingDataLabels=t.OverlappingDataLabels||D,t.PlotLineOrBand=f,t.Point=y,t.Pointer=b,t.RendererRegistry=n,t.Series=A,t.SeriesRegistry=T,t.StackItem=w,t.SVGElement=l,t.SVGRenderer=d,t.Templating=a,t.Tick=m,t.Time=B,t.Tooltip=x,t.animate=r.animate,t.animObject=r.animObject,t.chart=C.chart,t.color=j.parse,t.dateFormat=a.dateFormat,t.defaultOptions=i.defaultOptions,t.distribute=h.distribute,t.format=a.format,t.getDeferredAnimation=r.getDeferredAnimation,t.getOptions=i.getOptions,t.numberFormat=a.numberFormat,t.seriesType=T.seriesType,t.setAnimation=r.setAnimation,t.setOptions=i.setOptions,t.stop=r.stop,t.time=i.defaultTime,t.timers=s.timers,E.compose(t.Series,t.SVGElement,t.SVGRenderer),P.compose(t.Series.types.column),O.compose(t.Series),u.compose(t.Axis),c.compose(t.SVGRenderer),v.compose(t.Chart),g.compose(t.Axis),D.compose(t.Chart),L.compose(t.Series.types.pie),f.compose(t.Axis),b.compose(t.Chart),I.compose(t.Chart),k.compose(t.Axis,t.Chart,t.Series),M.compose(t.Axis,t.Chart,t.Series),x.compose(t.Pointer),e.extend(t,e),t}),e["masters/highcharts.src.js"]._modules=e,e["masters/highcharts.src.js"]});
23500},{}],111:[function(require,module,exports){
23501!/**
23502 * Highcharts JS v11.4.3 (2024-05-22)
23503 *
23504 * Accessibility module
23505 *
23506 * (c) 2010-2024 Highsoft AS
23507 * Author: Oystein Moseng
23508 *
23509 * License: www.highcharts.com/license
23510 */function(e){"object"==typeof module&&module.exports?(e.default=e,module.exports=e):"function"==typeof define&&define.amd?define("highcharts/modules/accessibility",["highcharts"],function(t){return e(t),e.Highcharts=t,e}):e("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(e){"use strict";var t=e?e._modules:{};function i(e,t,i,s){e.hasOwnProperty(t)||(e[t]=s.apply(null,i),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:t,module:e[t]}})))}i(t,"Accessibility/Utils/HTMLUtilities.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let{doc:i,win:s}=e,{css:n}=t,o=s.EventTarget&&new s.EventTarget||"none";function r(e){if("function"==typeof s.MouseEvent)return new s.MouseEvent(e.type,e);if(i.createEvent){let t=i.createEvent("MouseEvent");if(t.initMouseEvent)return t.initMouseEvent(e.type,e.bubbles,e.cancelable,e.view||s,e.detail,e.screenX,e.screenY,e.clientX,e.clientY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget),t}return a(e.type)}function a(e,t,n){let r=t||{x:0,y:0};if("function"==typeof s.MouseEvent)return new s.MouseEvent(e,{bubbles:!0,cancelable:!0,composed:!0,button:0,buttons:1,relatedTarget:n||o,view:s,detail:"click"===e?1:0,screenX:r.x,screenY:r.y,clientX:r.x,clientY:r.y});if(i.createEvent){let t=i.createEvent("MouseEvent");if(t.initMouseEvent)return t.initMouseEvent(e,!0,!0,s,"click"===e?1:0,r.x,r.y,r.x,r.y,!1,!1,!1,!1,0,null),t}return{type:e}}return{addClass:function(e,t){e.classList?e.classList.add(t):0>e.className.indexOf(t)&&(e.className+=" "+t)},cloneMouseEvent:r,cloneTouchEvent:function(e){let t=e=>{let t=[];for(let i=0;i<e.length;++i){let s=e.item(i);s&&t.push(s)}return t};if("function"==typeof s.TouchEvent){let i=new s.TouchEvent(e.type,{touches:t(e.touches),targetTouches:t(e.targetTouches),changedTouches:t(e.changedTouches),ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,altKey:e.altKey,metaKey:e.metaKey,bubbles:e.bubbles,cancelable:e.cancelable,composed:e.composed,detail:e.detail,view:e.view});return e.defaultPrevented&&i.preventDefault(),i}let i=r(e);return i.touches=e.touches,i.changedTouches=e.changedTouches,i.targetTouches=e.targetTouches,i},escapeStringForHTML:function(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")},getElement:function(e){return i.getElementById(e)},getFakeMouseEvent:a,getHeadingTagNameForElement:function(e){let t=e=>"h"+Math.min(6,parseInt(e.slice(1),10)+1),i=e=>/H[1-6]/.test(e),s=e=>{let t=e;for(;t=t.previousSibling;){let e=t.tagName||"";if(i(e))return e}return""},n=e=>{let o=s(e);if(o)return t(o);let r=e.parentElement;if(!r)return"p";let a=r.tagName;return i(a)?t(a):n(r)};return n(e)},removeChildNodes:function(e){for(;e.lastChild;)e.removeChild(e.lastChild)},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(RegExp(t,"g"),"")},removeElement:function(e){e&&e.parentNode&&e.parentNode.removeChild(e)},reverseChildNodes:function(e){let t=e.childNodes.length;for(;t--;)e.appendChild(e.childNodes[t])},simulatedEventTarget:o,stripHTMLTagsFromString:function(e,t=!1){return"string"==typeof e?t?e.replace(/<\/?[^>]+(>|$)/g,""):e.replace(/<\/?(?!\s)[^>]+(>|$)/g,""):e},visuallyHideElement:function(e){n(e,{position:"absolute",width:"1px",height:"1px",overflow:"hidden",
23510whiteSpace:"nowrap",clip:"rect(1px, 1px, 1px, 1px)",marginTop:"-3px","-ms-filter":"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)",filter:"alpha(opacity=1)",opacity:.01})}}}),i(t,"Accessibility/A11yI18n.js",[t["Core/Templating.js"],t["Core/Utilities.js"]],function(e,t){var i;let{format:s}=e,{getNestedProperty:n,pick:o}=t;return function(e){function t(e,t,i){let r=(e,t)=>{let i=e.slice(t||0),s=i.indexOf("{"),n=i.indexOf("}");if(s>-1&&n>s)return{statement:i.substring(s+1,n),begin:t+s+1,end:t+n}},a=[],l,h,c=0;do l=r(e,c),(h=e.substring(c,l&&l.begin-1)).length&&a.push({value:h,type:"constant"}),l&&a.push({value:l.statement,type:"statement"}),c=l?l.end+1:c+1;while(l);return a.forEach(e=>{"statement"===e.type&&(e.value=function(e,t){let i,s;let r=e.indexOf("#each("),a=e.indexOf("#plural("),l=e.indexOf("["),h=e.indexOf("]");if(r>-1){let o=e.slice(r).indexOf(")")+r,a=e.substring(0,r),l=e.substring(o+1),h=e.substring(r+6,o).split(","),c=Number(h[1]),d;if(s="",i=n(h[0],t)){d=(c=isNaN(c)?i.length:c)<0?i.length+c:Math.min(c,i.length);for(let e=0;e<d;++e)s+=a+i[e]+l}return s.length?s:""}if(a>-1){var c;let i=e.slice(a).indexOf(")")+a,r=e.substring(a+8,i).split(",");switch(Number(n(r[0],t))){case 0:s=o(r[4],r[1]);break;case 1:s=o(r[2],r[1]);break;case 2:s=o(r[3],r[1]);break;default:s=r[1]}return s?(c=s).trim&&c.trim()||c.replace(/^\s+|\s+$/g,""):""}if(l>-1){let s;let o=e.substring(0,l),r=Number(e.substring(l+1,h));return i=n(o,t),!isNaN(r)&&i&&(r<0?void 0===(s=i[i.length+r])&&(s=i[0]):void 0===(s=i[r])&&(s=i[i.length-1])),void 0!==s?s:""}return"{"+e+"}"}(e.value,t))}),s(a.reduce((e,t)=>e+t.value,""),t,i)}function i(e,i){let s=e.split("."),n=this.options.lang,o=0;for(;o<s.length;++o)n=n&&n[s[o]];return"string"==typeof n?t(n,i,this):""}e.compose=function(e){let t=e.prototype;t.langFormat||(t.langFormat=i)},e.i18nFormat=t}(i||(i={})),i}),i(t,"Accessibility/Utils/ChartUtilities.js",[t["Core/Globals.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Core/Utilities.js"]],function(e,t,i){let{doc:s}=e,{stripHTMLTagsFromString:n}=t,{defined:o,find:r,fireEvent:a}=i;function l(e){if(e.points&&e.points.length){let t=r(e.points,e=>!!e.graphic);return t&&t.graphic&&t.graphic.element}}function h(e){let t=l(e);return t&&t.parentNode||e.graph&&e.graph.element||e.group&&e.group.element}return{fireEventOnWrappedOrUnwrappedElement:function e(t,i){let n=i.type,o=t.hcEvents;s.createEvent&&(t.dispatchEvent||t.fireEvent)?t.dispatchEvent?t.dispatchEvent(i):t.fireEvent(n,i):o&&o[n]?a(t,n,i):t.element&&e(t.element,i)},getChartTitle:function(e){return n(e.options.title.text||e.langFormat("accessibility.defaultChartTitle",{chart:e}),e.renderer.forExport)},getAxisDescription:function(e){return e&&(e.options.accessibility?.description||e.axisTitle?.textStr||e.options.id||e.categories&&"categories"||e.dateTime&&"Time"||"values")},getAxisRangeDescription:function(e){let t=e.options||{};return t.accessibility&&void 0!==t.accessibility.rangeDescription?t.accessibility.rangeDescription:e.categories?function(e){let t=e.chart;return e.dataMax&&e.dataMin?t.langFormat("accessibility.axis.rangeCategories",{chart:t,axis:e,numCategories:e.dataMax-e.dataMin+1}):""}(e):e.dateTime&&(0===e.min||0===e.dataMin)?function(e){let t=e.chart,i={},s=e.dataMin||e.min||0,n=e.dataMax||e.max||0,o="Seconds";i.Seconds=(n-s)/1e3,i.Minutes=i.Seconds/60,i.Hours=i.Minutes/60,i.Days=i.Hours/24,["Minutes","Hours","Days"].forEach(function(e){i[e]>2&&(o=e)});let r=i[o].toFixed("Seconds"!==o&&"Minutes"!==o?1:0);return t.langFormat("accessibility.axis.timeRange"+o,{chart:t,axis:e,range:r.replace(".0","")})}(e):function(e){let t=e.chart,i=t.options,s=i&&i.accessibility&&i.accessibility.screenReaderSection.axisRangeDateFormat||"",n={min:e.dataMin||e.min||0,max:e.dataMax||e.max||0},o=function(i){return e.dateTime?t.time.dateFormat(s,n[i]):n[i].toString()};return t.langFormat("accessibility.axis.rangeFromTo",{chart:t,axis:e,rangeFrom:o("min"),rangeTo:o("max")})}(e)},getPointFromXY:function(e,t,i){let s=e.length,n;for(;s--;)if(n=r(e[s].points||[],function(e){return e.x===t&&e.y===i}))return n},getSeriesFirstPointElement:l,getSeriesFromName:function(e,t){return t?(e.series||[]).filter(function(e){return e.name===t}):e.series},getSeriesA11yElement:h,unhideChartElementFromAT:function e(t,i){i.setAttribute("aria-hidden",!1),i!==t.renderTo&&i.parentNode&&i.parentNode!==s.body&&(Array.prototype.forEach.call(i.parentNode.childNodes,function(e){e.hasAttribute("aria-hidden")||e.setAttribute("aria-hidden",!0)}),e(t,i.parentNode))},hideSeriesFromAT:function(e){let t=h(e);t&&t.setAttribute("aria-hidden",!0)},scrollAxisToPoint:function(e){let t=e.series.xAxis,i=e.series.yAxis,s=t&&t.scrollbar?t:i,n=s&&s.scrollbar;if(n&&o(n.to)&&o(n.from)){let t=n.to-n.from,i=function(e,t){if(!o(e.dataMin)||
23510!o(e.dataMax))return 0;let i=e.toPixels(e.dataMin),s=e.toPixels(e.dataMax),n="xAxis"===e.coll?"x":"y";return(e.toPixels(t[n]||0)-i)/(s-i)}(s,e);n.updatePosition(i-t/2,i+t/2),a(n,"changed",{from:n.from,to:n.to,trigger:"scrollbar",DOMEvent:null})}}}}),i(t,"Accessibility/Utils/DOMElementProvider.js",[t["Core/Globals.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t){let{doc:i}=e,{removeElement:s}=t;return class{constructor(){this.elements=[]}createElement(){let e=i.createElement.apply(i,arguments);return this.elements.push(e),e}removeElement(e){s(e),this.elements.splice(this.elements.indexOf(e),1)}destroyCreatedElements(){this.elements.forEach(function(e){s(e)}),this.elements=[]}}}),i(t,"Accessibility/Utils/EventProvider.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let{addEvent:i}=t;return class{constructor(){this.eventRemovers=[]}addEvent(){let t=i.apply(e,arguments);return this.eventRemovers.push({element:arguments[0],remover:t}),t}removeEvent(e){let t=this.eventRemovers.map(e=>e.remover).indexOf(e);this.eventRemovers[t].remover(),this.eventRemovers.splice(t,1)}removeAddedEvents(){this.eventRemovers.map(e=>e.remover).forEach(e=>e()),this.eventRemovers=[]}}}),i(t,"Accessibility/AccessibilityComponent.js",[t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/DOMElementProvider.js"],t["Accessibility/Utils/EventProvider.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{fireEventOnWrappedOrUnwrappedElement:o}=e,{getFakeMouseEvent:r}=s,{extend:a}=n;class l{initBase(e,s){this.chart=e,this.eventProvider=new i,this.domElementProvider=new t,this.proxyProvider=s,this.keyCodes={left:37,right:39,up:38,down:40,enter:13,space:32,esc:27,tab:9,pageUp:33,pageDown:34,end:35,home:36}}addEvent(e,t,i,s){return this.eventProvider.addEvent(e,t,i,s)}createElement(e,t){return this.domElementProvider.createElement(e,t)}fakeClickEvent(e){o(e,r("click"))}destroyBase(){this.domElementProvider.destroyCreatedElements(),this.eventProvider.removeAddedEvents()}}return a(l.prototype,{init(){},getKeyboardNavigation:function(){},onChartUpdate(){},onChartRender(){},destroy(){}}),l}),i(t,"Accessibility/KeyboardNavigationHandler.js",[t["Core/Utilities.js"]],function(e){let{find:t}=e;return class{constructor(e,t){this.chart=e,this.keyCodeMap=t.keyCodeMap||[],this.validate=t.validate,this.init=t.init,this.terminate=t.terminate,this.response={success:1,prev:2,next:3,noHandler:4,fail:5}}run(e){let i=e.which||e.keyCode,s=this.response.noHandler,n=t(this.keyCodeMap,function(e){return e[0].indexOf(i)>-1});return n?s=n[1].call(this,i,e):9===i&&(s=this.response[e.shiftKey?"prev":"next"]),s}}}),i(t,"Accessibility/Components/ContainerComponent.js",[t["Accessibility/AccessibilityComponent.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Core/Globals.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t,i,s,n){let{unhideChartElementFromAT:o,getChartTitle:r}=i,{doc:a}=s,{stripHTMLTagsFromString:l}=n;return class extends e{onChartUpdate(){this.handleSVGTitleElement(),this.setSVGContainerLabel(),this.setGraphicContainerAttrs(),this.setRenderToAttrs(),this.makeCreditsAccessible()}handleSVGTitleElement(){let e=this.chart,t="highcharts-title-"+e.index,i=l(e.langFormat("accessibility.svgContainerTitle",{chartTitle:r(e)}));if(i.length){let s=this.svgTitleElement=this.svgTitleElement||a.createElementNS("http://www.w3.org/2000/svg","title");s.textContent=i,s.id=t,e.renderTo.insertBefore(s,e.renderTo.firstChild)}}setSVGContainerLabel(){let e=this.chart,t=e.langFormat("accessibility.svgContainerLabel",{chartTitle:r(e)});e.renderer.box&&t.length&&e.renderer.box.setAttribute("aria-label",t)}setGraphicContainerAttrs(){let e=this.chart,t=e.langFormat("accessibility.graphicContainerLabel",{chartTitle:r(e)});t.length&&e.container.setAttribute("aria-label",t)}setRenderToAttrs(){let e=this.chart,t="disabled"!==e.options.accessibility.landmarkVerbosity,i=e.langFormat("accessibility.chartContainerLabel",{title:r(e),chart:e});i&&(e.renderTo.setAttribute("role",t?"region":"group"),e.renderTo.setAttribute("aria-label",i))}makeCreditsAccessible(){let e=this.chart,t=e.credits;t&&(t.textStr&&t.element.setAttribute("aria-label",e.langFormat("accessibility.credits",{creditsStr:l(t.textStr,e.renderer.forExport)})),o(e,t.element))}getKeyboardNavigation(){let e=this.chart;return new t(e,{keyCodeMap:[],validate:function(){return!0},init:function(){let t=e.accessibility;t&&t.keyboardNavigation.tabindexContainer.focus()}})}destroy(){this.chart.renderTo.setAttribute("aria-hidden",!0)}}}),i(t,"Accessibility/FocusBorder.js",[t["Core/Utilities.js"]],function(e){var t;let{addEvent:i,pick:s}=e;return function(e){let t=["x","y","transform","width","height","r","d","stroke-width"];function n(){let e=this.focusElement,t=this.options.accessibility.keyboardNavigation.focusBorder;e&&(e.removeFocusBorder(),t.enabled&&e.addFocusBorder(t.margin,{stroke:t.style.color,strokeWidth:t.style.lineWidth,r:t.style.borderRadius}))}function o(e,t){let s=this.options.accessibility.keyboardNavigation.focusBorder,n=t||e.element;n&&n.focus&&(n.hcEvents&&n.hcEvents.focusin||i(n,"focusin",function(){}),n.focus(),s.hideBrowserFocusOutline&&(n.style.outline="none")),this.focusElement&&this.focusElement.removeFocusBorder(),this.focusElement=e,this.renderFocusBorder()}function r(e,i){this.focusBorder&&this.removeFocusBorder();let n=this.getBBox(),o=s(e,3),r=this.parentGroup,a=this.scaleX||r&&r.scaleX,l=this.scaleY||r&&r.scaleY,h=(a?!l:l)?Math.abs(a||l||1):(Math.abs(a||1)+Math.abs(l||1))/2;n.x+=this.translateX?this.translateX:0,n.y+=this.translateY?this.translateY:0;let c=n.x-o,d=n.y-o,u=n.width+2*o,p=n.height+2*o,g=!!this.text;if("text"===this.element.nodeName||g){let e,t;let i=!!this.rotation,s=g?{x:i?1:0,y:0}:(e=0,t=0,"middle"===this.attr("text-anchor")?e=t=.5:this.rotation?e=.25:t=.75,{x:e,y:t}),r=+this.attr("x"),a=+this.attr("y");
23510if(isNaN(r)||(c=r-n.width*s.x-o),isNaN(a)||(d=a-n.height*s.y-o),g&&i){let e=u;u=p,p=e,isNaN(r)||(c=r-n.height*s.x-o),isNaN(a)||(d=a-n.width*s.y-o)}}this.focusBorder=this.renderer.rect(c,d,u,p,parseInt((i&&i.r||0).toString(),10)/h).addClass("highcharts-focus-border").attr({zIndex:99}).add(r),this.renderer.styledMode||this.focusBorder.attr({stroke:i&&i.stroke,"stroke-width":(i&&i.strokeWidth||0)/h}),function(e,...i){e.focusBorderUpdateHooks||(e.focusBorderUpdateHooks={},t.forEach(t=>{let s=t+"Setter",n=e[s]||e._defaultSetter;e.focusBorderUpdateHooks[s]=n,e[s]=function(){let t=n.apply(e,arguments);return e.addFocusBorder.apply(e,i),t}}))}(this,e,i),function(e){if(e.focusBorderDestroyHook)return;let t=e.destroy;e.destroy=function(){return e.focusBorder&&e.focusBorder.destroy&&e.focusBorder.destroy(),t.apply(e,arguments)},e.focusBorderDestroyHook=t}(this)}function a(){var e;e=this,e.focusBorderUpdateHooks&&(Object.keys(e.focusBorderUpdateHooks).forEach(t=>{let i=e.focusBorderUpdateHooks[t];i===e._defaultSetter?delete e[t]:e[t]=i}),delete e.focusBorderUpdateHooks),this.focusBorderDestroyHook&&(this.destroy=this.focusBorderDestroyHook,delete this.focusBorderDestroyHook),this.focusBorder&&(this.focusBorder.destroy(),delete this.focusBorder)}e.compose=function(e,t){let i=e.prototype,s=t.prototype;i.renderFocusBorder||(i.renderFocusBorder=n,i.setFocusToElement=o),s.addFocusBorder||(s.addFocusBorder=r,s.removeFocusBorder=a)}}(t||(t={})),t}),i(t,"Accessibility/Utils/Announcer.js",[t["Core/Renderer/HTML/AST.js"],t["Accessibility/Utils/DOMElementProvider.js"],t["Core/Globals.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{doc:o}=i,{addClass:r,visuallyHideElement:a}=s,{attr:l}=n;return class{constructor(e,i){this.chart=e,this.domElementProvider=new t,this.announceRegion=this.addAnnounceRegion(i)}destroy(){this.domElementProvider.destroyCreatedElements()}announce(t){e.setElementHTML(this.announceRegion,t),this.clearAnnouncementRegionTimer&&clearTimeout(this.clearAnnouncementRegionTimer),this.clearAnnouncementRegionTimer=setTimeout(()=>{this.announceRegion.innerHTML=e.emptyHTML,delete this.clearAnnouncementRegionTimer},3e3)}addAnnounceRegion(e){let t=this.chart.announcerContainer||this.createAnnouncerContainer(),i=this.domElementProvider.createElement("div");return l(i,{"aria-hidden":!1,"aria-live":e,"aria-atomic":!0}),this.chart.styledMode?r(i,"highcharts-visually-hidden"):a(i),t.appendChild(i),i}createAnnouncerContainer(){let e=this.chart,t=o.createElement("div");return l(t,{"aria-hidden":!1,class:"highcharts-announcer-container"}),t.style.position="relative",e.renderTo.insertBefore(t,e.renderTo.firstChild),e.announcerContainer=t,t}}}),i(t,"Accessibility/Components/AnnotationsA11y.js",[t["Accessibility/Utils/HTMLUtilities.js"]],function(e){let{escapeStringForHTML:t,stripHTMLTagsFromString:i}=e;function s(e){return(e.annotations||[]).reduce((e,t)=>(t.options&&!1!==t.options.visible&&(e=e.concat(t.labels)),e),[])}function n(e){return e.options&&e.options.accessibility&&e.options.accessibility.description||e.graphic&&e.graphic.text&&e.graphic.text.textStr||""}function o(e){let t=e.options&&e.options.accessibility&&e.options.accessibility.description;if(t)return t;let i=e.chart,s=n(e),o=e.points,r=e=>e.graphic&&e.graphic.element&&e.graphic.element.getAttribute("aria-label")||"",a=o.filter(e=>!!e.graphic).map(e=>{let t=e.accessibility&&e.accessibility.valueDescription||r(e),i=e&&e.series.name||"";return(i?i+", ":"")+"data point "+t}).filter(e=>!!e),l=a.length,h=l>1?"MultiplePoints":l?"SinglePoint":"NoPoints",c={annotationText:s,annotation:e,numPoints:l,annotationPoint:a[0],additionalAnnotationPoints:a.slice(1)};return i.langFormat("accessibility.screenReaderSection.annotations.description"+h,c)}function r(e){return s(e).map(s=>{let n=t(i(o(s),e.renderer.forExport));return n?`<li>${n}</li>`:""})}return{getAnnotationsInfoHTML:function(e){let t=e.annotations;if(!(t&&t.length))return"";let i=r(e);return`<ul style="list-style-type: none">${i.join(" ")}</ul>`},getAnnotationLabelDescription:o,getAnnotationListItems:r,getPointAnnotationTexts:function(e){let t=s(e.series.chart).filter(t=>t.points.indexOf(e)>-1);return t.length?t.map(e=>`${n(e)}`):[]}}}),i(t,"Accessibility/Components/InfoRegionsComponent.js",[t["Accessibility/A11yI18n.js"],t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/Announcer.js"],t["Accessibility/Components/AnnotationsA11y.js"],t["Core/Renderer/HTML/AST.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Core/Templating.js"],t["Core/Globals.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Core/Utilities.js"]],function(e,t,i,s,n,o,r,a,l,h){let{getAnnotationsInfoHTML:c}=s,{getAxisDescription:d,getAxisRangeDescription:u,getChartTitle:p,unhideChartElementFromAT:g}=o,{format:m}=r,{doc:b}=a,{addClass:y,getElement:f,getHeadingTagNameForElement:x,stripHTMLTagsFromString:v,visuallyHideElement:A}=l,{attr:C,pick:w,replaceNested:E}=h;function T(e){return E(e,[/<([\w\-.:!]+)\b[^<>]*>\s*<\/\1>/g,""])}return class extends t{constructor(){super(...arguments),this.screenReaderSections={}}init(){let e=this.chart,t=this;this.initRegionsDefinitions(),this.addEvent(e,"aftergetTableAST",function(e){t.onDataTableCreated(e)}),this.addEvent(e,"afterViewData",function(e){e.wasHidden&&(t.dataTableDiv=e.element,setTimeout(function(){t.focusDataTable()},300))}
23510),this.addEvent(e,"afterHideData",function(){t.viewDataTableButton&&t.viewDataTableButton.setAttribute("aria-expanded","false")}),this.announcer=new i(e,"assertive")}initRegionsDefinitions(){let e=this,t=this.chart.options.accessibility;this.screenReaderSections={before:{element:null,buildContent:function(i){let s=t.screenReaderSection.beforeChartFormatter;return s?s(i):e.defaultBeforeChartFormatter(i)},insertIntoDOM:function(e,t){t.renderTo.insertBefore(e,t.renderTo.firstChild)},afterInserted:function(){void 0!==e.sonifyButtonId&&e.initSonifyButton(e.sonifyButtonId),void 0!==e.dataTableButtonId&&e.initDataTableButton(e.dataTableButtonId)}},after:{element:null,buildContent:function(i){let s=t.screenReaderSection.afterChartFormatter;return s?s(i):e.defaultAfterChartFormatter()},insertIntoDOM:function(e,t){t.renderTo.insertBefore(e,t.container.nextSibling)},afterInserted:function(){e.chart.accessibility&&t.keyboardNavigation.enabled&&e.chart.accessibility.keyboardNavigation.updateExitAnchor()}}}}onChartRender(){let e=this;this.linkedDescriptionElement=this.getLinkedDescriptionElement(),this.setLinkedDescriptionAttrs(),Object.keys(this.screenReaderSections).forEach(function(t){e.updateScreenReaderSection(t)})}getLinkedDescriptionElement(){let e=this.chart.options.accessibility.linkedDescription;if(!e)return;if("string"!=typeof e)return e;let t=m(e,this.chart),i=b.querySelectorAll(t);if(1===i.length)return i[0]}setLinkedDescriptionAttrs(){let e=this.linkedDescriptionElement;e&&(e.setAttribute("aria-hidden","true"),y(e,"highcharts-linked-description"))}updateScreenReaderSection(e){let t=this.chart,i=this.screenReaderSections[e],s=i.buildContent(t),o=i.element=i.element||this.createElement("div"),r=o.firstChild||this.createElement("div");s?(this.setScreenReaderSectionAttribs(o,e),n.setElementHTML(r,s),o.appendChild(r),i.insertIntoDOM(o,t),t.styledMode?y(r,"highcharts-visually-hidden"):A(r),g(t,r),i.afterInserted&&i.afterInserted()):(o.parentNode&&o.parentNode.removeChild(o),i.element=null)}setScreenReaderSectionAttribs(e,t){let i=this.chart,s=i.langFormat("accessibility.screenReaderSection."+t+"RegionLabel",{chart:i,chartTitle:p(i)});C(e,{id:`highcharts-screen-reader-region-${t}-${i.index}`,"aria-label":s||void 0}),e.style.position="relative",s&&e.setAttribute("role","all"===i.options.accessibility.landmarkVerbosity?"region":"group")}defaultBeforeChartFormatter(){let t=this.chart,i=t.options.accessibility.screenReaderSection.beforeChartFormat;if(!i)return"";let s=this.getAxesDescription(),n=t.sonify&&t.options.sonification&&t.options.sonification.enabled,o="highcharts-a11y-sonify-data-btn-"+t.index,r="hc-linkto-highcharts-data-table-"+t.index,a=c(t),l=t.langFormat("accessibility.screenReaderSection.annotations.heading",{chart:t}),h={headingTagName:x(t.renderTo),chartTitle:p(t),typeDescription:this.getTypeDescriptionText(),chartSubtitle:this.getSubtitleText(),chartLongdesc:this.getLongdescText(),xAxisDescription:s.xAxis,yAxisDescription:s.yAxis,playAsSoundButton:n?this.getSonifyButtonText(o):"",viewTableButton:t.getCSV?this.getDataTableButtonText(r):"",annotationsTitle:a?l:"",annotationsList:a},d=e.i18nFormat(i,h,t);return this.dataTableButtonId=r,this.sonifyButtonId=o,T(d)}defaultAfterChartFormatter(){let t=this.chart,i=t.options.accessibility.screenReaderSection.afterChartFormat;if(!i)return"";let s={endOfChartMarker:this.getEndOfChartMarkerText()};return T(e.i18nFormat(i,s,t))}getLinkedDescription(){let e=this.linkedDescriptionElement;return v(e&&e.innerHTML||"",this.chart.renderer.forExport)}getLongdescText(){let e=this.chart.options,t=e.caption,i=t&&t.text,s=this.getLinkedDescription();return e.accessibility.description||s||i||""}getTypeDescriptionText(){let e=this.chart;return e.types?e.options.accessibility.typeDescription||function(e,t){let i=t[0],s=e.series&&e.series[0]||{},n=e.mapView&&e.mapView.geoMap&&e.mapView.geoMap.title,o={numSeries:e.series.length,numPoints:s.points&&s.points.length,chart:e,mapTitle:n};return i?"map"===i||"tiledwebmap"===i?o.mapTitle?e.langFormat("accessibility.chartTypes.mapTypeDescription",o):e.langFormat("accessibility.chartTypes.unknownMap",o):e.types.length>1?e.langFormat("accessibility.chartTypes.combinationChart",o):function(e,t,i){let s=t[0],n=e.langFormat("accessibility.seriesTypeDescriptions."+s,i),o=e.series&&e.series.length<2?"Single":"Multiple";return(e.langFormat("accessibility.chartTypes."+s+o,i)||e.langFormat("accessibility.chartTypes.default"+o,i))+(n?" "+n:"")}(e,t,o):e.langFormat("accessibility.chartTypes.emptyChart",o)}(e,e.types):""}getDataTableButtonText(e){let t=this.chart;return'<button id="'+e+'">'+t.langFormat("accessibility.table.viewAsDataTableButtonText",{chart:t,chartTitle:p(t)})+"</button>"}getSonifyButtonText(e){let t=this.chart;return t.options.sonification&&!1===t.options.sonification.enabled?"":'<button id="'+e+'">'+t.langFormat("accessibility.sonification.playAsSoundButtonText",{chart:t,chartTitle:p(t)})+"</button>"}getSubtitleText(){let e=this.chart.options.subtitle;return v(e&&e.text||"",this.chart.renderer.forExport)}getEndOfChartMarkerText(){let e=f(`highcharts-end-of-chart-marker-${this.chart.index}`);
23510if(e)return e.outerHTML;let t=this.chart,i=t.langFormat("accessibility.screenReaderSection.endOfChartMarker",{chart:t});return'<div id="highcharts-end-of-chart-marker-'+t.index+'">'+i+"</div>"}onDataTableCreated(e){let t=this.chart;if(t.options.accessibility.enabled){this.viewDataTableButton&&this.viewDataTableButton.setAttribute("aria-expanded","true");let i=e.tree.attributes||{};i.tabindex=-1,i.summary=t.langFormat("accessibility.table.tableSummary",{chart:t}),e.tree.attributes=i}}focusDataTable(){let e=this.dataTableDiv,t=e&&e.getElementsByTagName("table")[0];t&&t.focus&&t.focus()}initSonifyButton(e){let t=this.sonifyButton=f(e),i=this.chart,s=e=>{t&&(t.setAttribute("aria-hidden","true"),t.setAttribute("aria-label","")),e.preventDefault(),e.stopPropagation();let s=i.langFormat("accessibility.sonification.playAsSoundClickAnnouncement",{chart:i});this.announcer.announce(s),setTimeout(()=>{t&&(t.removeAttribute("aria-hidden"),t.removeAttribute("aria-label")),i.sonify&&i.sonify()},1e3)};t&&i&&(t.setAttribute("tabindex",-1),t.onclick=function(e){(i.options.accessibility&&i.options.accessibility.screenReaderSection.onPlayAsSoundClick||s).call(this,e,i)})}initDataTableButton(e){let t=this.viewDataTableButton=f(e),i=this.chart,s=e.replace("hc-linkto-","");t&&(C(t,{tabindex:-1,"aria-expanded":!!f(s)}),t.onclick=i.options.accessibility.screenReaderSection.onViewDataTableClick||function(){i.viewData()})}getAxesDescription(){let e=this.chart,t=function(t,i){let s=e[t];return s.length>1||s[0]&&w(s[0].options.accessibility&&s[0].options.accessibility.enabled,i)},i=!!e.types&&0>e.types.indexOf("map")&&0>e.types.indexOf("treemap")&&0>e.types.indexOf("tilemap"),s=!!e.hasCartesianSeries,n=t("xAxis",!e.angular&&s&&i),o=t("yAxis",s&&i),r={};return n&&(r.xAxis=this.getAxisDescriptionText("xAxis")),o&&(r.yAxis=this.getAxisDescriptionText("yAxis")),r}getAxisDescriptionText(e){let t=this.chart,i=t[e];return t.langFormat("accessibility.axis."+e+"Description"+(i.length>1?"Plural":"Singular"),{chart:t,names:i.map(function(e){return d(e)}),ranges:i.map(function(e){return u(e)}),numAxes:i.length})}destroy(){this.announcer&&this.announcer.destroy()}}}),i(t,"Accessibility/Components/MenuComponent.js",[t["Core/Utilities.js"],t["Accessibility/AccessibilityComponent.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t,i,s,n){let{attr:o}=e,{getChartTitle:r,unhideChartElementFromAT:a}=s,{getFakeMouseEvent:l}=n;function h(e){return e.exportSVGElements&&e.exportSVGElements[0]}class c extends t{init(){let e=this.chart,t=this;this.addEvent(e,"exportMenuShown",function(){t.onMenuShown()}),this.addEvent(e,"exportMenuHidden",function(){t.onMenuHidden()}),this.createProxyGroup()}onMenuHidden(){let e=this.chart.exportContextMenu;e&&e.setAttribute("aria-hidden","true"),this.setExportButtonExpandedState("false")}onMenuShown(){let e=this.chart,t=e.exportContextMenu;t&&(this.addAccessibleContextMenuAttribs(),a(e,t)),this.setExportButtonExpandedState("true")}setExportButtonExpandedState(e){this.exportButtonProxy&&this.exportButtonProxy.innerElement.setAttribute("aria-expanded",e)}onChartRender(){let e=this.chart,t=e.focusElement,i=e.accessibility;this.proxyProvider.clearGroup("chartMenu"),this.proxyMenuButton(),this.exportButtonProxy&&t&&t===e.exportingGroup&&(t.focusBorder?e.setFocusToElement(t,this.exportButtonProxy.innerElement):i&&i.keyboardNavigation.tabindexContainer.focus())}proxyMenuButton(){let e=this.chart,t=this.proxyProvider,i=h(e);(function(e){let t=e.options.exporting,i=h(e);return!!(t&&!1!==t.enabled&&t.accessibility&&t.accessibility.enabled&&i&&i.element)})(e)&&i&&(this.exportButtonProxy=t.addProxyElement("chartMenu",{click:i},"button",{"aria-label":e.langFormat("accessibility.exporting.menuButtonLabel",{chart:e,chartTitle:r(e)}),"aria-expanded":!1,title:e.options.lang.contextButtonTitle||null}))}createProxyGroup(){this.chart&&this.proxyProvider&&this.proxyProvider.addGroup("chartMenu")}addAccessibleContextMenuAttribs(){let e=this.chart,t=e.exportDivElements;
23510if(t&&t.length){t.forEach(e=>{e&&("LI"!==e.tagName||e.children&&e.children.length?e.setAttribute("aria-hidden","true"):e.setAttribute("tabindex",-1))});let i=t[0]&&t[0].parentNode;i&&o(i,{"aria-hidden":void 0,"aria-label":e.langFormat("accessibility.exporting.chartMenuLabel",{chart:e}),role:"list"})}}getKeyboardNavigation(){let e=this.keyCodes,t=this.chart,s=this;return new i(t,{keyCodeMap:[[[e.left,e.up],function(){return s.onKbdPrevious(this)}],[[e.right,e.down],function(){return s.onKbdNext(this)}],[[e.enter,e.space],function(){return s.onKbdClick(this)}]],validate:function(){return!!t.exporting&&!1!==t.options.exporting.enabled&&!1!==t.options.exporting.accessibility.enabled},init:function(){let e=s.exportButtonProxy,i=s.chart.exportingGroup;e&&i&&t.setFocusToElement(i,e.innerElement)},terminate:function(){t.hideExportMenu()}})}onKbdPrevious(e){let t=this.chart,i=t.options.accessibility,s=e.response,n=t.highlightedExportItemIx||0;for(;n--;)if(t.highlightExportItem(n))return s.success;return i.keyboardNavigation.wrapAround?(t.highlightLastExportItem(),s.success):s.prev}onKbdNext(e){let t=this.chart,i=t.options.accessibility,s=e.response;for(let e=(t.highlightedExportItemIx||0)+1;e<t.exportDivElements.length;++e)if(t.highlightExportItem(e))return s.success;return i.keyboardNavigation.wrapAround?(t.highlightExportItem(0),s.success):s.next}onKbdClick(e){let t=this.chart,i=t.exportDivElements[t.highlightedExportItemIx],s=h(t).element;return t.openMenu?this.fakeClickEvent(i):(this.fakeClickEvent(s),t.highlightExportItem(0)),e.response.success}}return function(e){function t(){let e=h(this);if(e){let t=e.element;t.onclick&&t.onclick(l("click"))}}function i(){let e=this.exportDivElements;e&&this.exportContextMenu&&this.openMenu&&(e.forEach(e=>{e&&"highcharts-menu-item"===e.className&&e.onmouseout&&e.onmouseout(l("mouseout"))}),this.highlightedExportItemIx=0,this.exportContextMenu.hideMenu(),this.container.focus())}function s(e){let t=this.exportDivElements&&this.exportDivElements[e],i=this.exportDivElements&&this.exportDivElements[this.highlightedExportItemIx];if(t&&"LI"===t.tagName&&!(t.children&&t.children.length)){let s=!!(this.renderTo.getElementsByTagName("g")[0]||{}).focus;return t.focus&&s&&t.focus(),i&&i.onmouseout&&i.onmouseout(l("mouseout")),t.onmouseover&&t.onmouseover(l("mouseover")),this.highlightedExportItemIx=e,!0}return!1}function n(){if(this.exportDivElements){let e=this.exportDivElements.length;for(;e--;)if(this.highlightExportItem(e))return!0}return!1}e.compose=function(e){let o=e.prototype;o.hideExportMenu||(o.hideExportMenu=i,o.highlightExportItem=s,o.highlightLastExportItem=n,o.showExportMenu=t)}}(c||(c={})),c}),i(t,"Accessibility/KeyboardNavigation.js",[t["Core/Globals.js"],t["Accessibility/Components/MenuComponent.js"],t["Core/Utilities.js"],t["Accessibility/Utils/EventProvider.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t,i,s,n){let{doc:o,win:r}=e,{addEvent:a,defined:l,fireEvent:h}=i,{getElement:c,simulatedEventTarget:d}=n;class u{constructor(e,t){this.currentModuleIx=NaN,this.modules=[],this.init(e,t)}init(e,t){let i=this.eventProvider=new s;this.chart=e,this.components=t,this.modules=[],this.currentModuleIx=0,this.update(),i.addEvent(this.tabindexContainer,"keydown",e=>this.onKeydown(e)),i.addEvent(this.tabindexContainer,"focus",e=>this.onFocus(e)),["mouseup","touchend"].forEach(e=>i.addEvent(o,e,e=>this.onMouseUp(e))),["mousedown","touchstart"].forEach(t=>i.addEvent(e.renderTo,t,()=>{this.isClickingChart=!0}))}update(e){let t=this.chart.options.accessibility,i=t&&t.keyboardNavigation,s=this.components;this.updateContainerTabindex(),i&&i.enabled&&e&&e.length?(this.modules=e.reduce(function(e,t){let i=s[t].getKeyboardNavigation();return e.concat(i)},[]),this.updateExitAnchor()):(this.modules=[],this.currentModuleIx=0,this.removeExitAnchor())}updateExitAnchor(){let e=c(`highcharts-end-of-chart-marker-${this.chart.index}`);this.removeExitAnchor(),e?(this.makeElementAnExitAnchor(e),this.exitAnchor=e):this.createExitAnchor()}move(e){let t=this.modules&&this.modules[this.currentModuleIx];t&&t.terminate&&t.terminate(e),this.chart.focusElement&&this.chart.focusElement.removeFocusBorder(),this.currentModuleIx+=e;let i=this.modules&&this.modules[this.currentModuleIx];if(i){if(i.validate&&!i.validate())return this.move(e);
23510if(i.init)return i.init(e),!0}return this.currentModuleIx=0,this.exiting=!0,e>0?this.exitAnchor&&this.exitAnchor.focus():this.tabindexContainer.focus(),!1}onFocus(e){let t=this.chart,i=e.relatedTarget&&t.container.contains(e.relatedTarget),s=t.options.accessibility,n=s&&s.keyboardNavigation;if(n&&n.enabled&&!this.exiting&&!this.tabbingInBackwards&&!this.isClickingChart&&!i){let e=this.getFirstValidModuleIx();null!==e&&(this.currentModuleIx=e,this.modules[e].init(1))}this.keyboardReset=!1,this.exiting=!1}onMouseUp(e){if(delete this.isClickingChart,!this.keyboardReset&&e.relatedTarget!==d){let t=this.chart;if(!e.target||!t.container.contains(e.target)){let e=this.modules&&this.modules[this.currentModuleIx||0];e&&e.terminate&&e.terminate(),this.currentModuleIx=0}t.focusElement&&(t.focusElement.removeFocusBorder(),delete t.focusElement),this.keyboardReset=!0}}onKeydown(e){let t;let i=e||r.event,s=this.modules&&this.modules.length&&this.modules[this.currentModuleIx],n=i.target;if((!n||"INPUT"!==n.nodeName||n.classList.contains("highcharts-a11y-proxy-element"))&&(this.keyboardReset=!1,this.exiting=!1,s)){let e=s.run(i);e===s.response.success?t=!0:e===s.response.prev?t=this.move(-1):e===s.response.next&&(t=this.move(1)),t&&(i.preventDefault(),i.stopPropagation())}}updateContainerTabindex(){let e;let t=this.chart.options.accessibility,i=t&&t.keyboardNavigation,s=!(i&&!1===i.enabled),n=this.chart,o=n.container;n.renderTo.hasAttribute("tabindex")?(o.removeAttribute("tabindex"),e=n.renderTo):e=o,this.tabindexContainer=e;let r=e.getAttribute("tabindex");s&&!r?e.setAttribute("tabindex","0"):s||n.container.removeAttribute("tabindex")}createExitAnchor(){let e=this.chart,t=this.exitAnchor=o.createElement("div");e.renderTo.appendChild(t),this.makeElementAnExitAnchor(t)}makeElementAnExitAnchor(e){let t=this.tabindexContainer.getAttribute("tabindex")||0;e.setAttribute("class","highcharts-exit-anchor"),e.setAttribute("tabindex",t),e.setAttribute("aria-hidden",!1),this.addExitAnchorEventsToEl(e)}removeExitAnchor(){if(this.exitAnchor){let e=this.eventProvider.eventRemovers.find(e=>e.element===this.exitAnchor);e&&l(e.remover)&&this.eventProvider.removeEvent(e.remover),this.exitAnchor.parentNode&&this.exitAnchor.parentNode.removeChild(this.exitAnchor),delete this.exitAnchor}}addExitAnchorEventsToEl(e){let t=this.chart,i=this;this.eventProvider.addEvent(e,"focus",function(e){let s=e||r.event,n=!(s.relatedTarget&&t.container.contains(s.relatedTarget)||i.exiting);if(t.focusElement&&delete t.focusElement,n){if(i.tabbingInBackwards=!0,i.tabindexContainer.focus(),delete i.tabbingInBackwards,s.preventDefault(),i.modules&&i.modules.length){i.currentModuleIx=i.modules.length-1;let e=i.modules[i.currentModuleIx];e&&e.validate&&!e.validate()?i.move(-1):e&&e.init(-1)}}else i.exiting=!1})}getFirstValidModuleIx(){let e=this.modules.length;for(let t=0;t<e;++t){let e=this.modules[t];if(!e.validate||e.validate())return t}return null}destroy(){this.removeExitAnchor(),this.eventProvider.removeAddedEvents(),this.chart.container.removeAttribute("tabindex")}}return function(i){function s(){let e=this;h(this,"dismissPopupContent",{},function(){e.tooltip&&e.tooltip.hide(0),e.hideExportMenu()})}function n(t){27===(t.which||t.keyCode)&&e.charts&&e.charts.forEach(e=>{e&&e.dismissPopupContent&&e.dismissPopupContent()})}i.compose=function(e){t.compose(e);let i=e.prototype;return i.dismissPopupContent||(i.dismissPopupContent=s,a(o,"keydown",n)),e}}(u||(u={})),u}),i(t,"Accessibility/Components/LegendComponent.js",[t["Core/Animation/AnimationUtilities.js"],t["Core/Globals.js"],t["Core/Legend/Legend.js"],t["Core/Utilities.js"],t["Accessibility/AccessibilityComponent.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t,i,s,n,o,r,a){let{animObject:l}=e,{doc:h}=t,{addEvent:c,fireEvent:d,isNumber:u,pick:p,syncTimeout:g}=s,{getChartTitle:m}=r,{stripHTMLTagsFromString:b,addClass:y,removeClass:f}=a;function x(e){let t=e.legend&&e.legend.allItems,i=e.options.legend.accessibility||{},s=e.colorAxis&&e.colorAxis.some(e=>!e.dataClasses||!e.dataClasses.length);return!!(t&&t.length&&!s&&!1!==i.enabled)}function v(e,t){let i=t.legendItem||{};for(let s of(t.setState(e?"hover":"",!0),["group","label","symbol"])){let t=i[s],n=t&&t.element||t;n&&d(n,e?"mouseover":"mouseout")}}class A extends n{constructor(){super(...arguments),this.highlightedLegendItemIx=NaN,this.proxyGroup=null}init(){let e=this;this.recreateProxies(),this.addEvent(i,"afterScroll",function(){this.chart===e.chart&&(e.proxyProvider.updateGroupProxyElementPositions("legend"),e.updateLegendItemProxyVisibility(),e.highlightedLegendItemIx>-1&&this.chart.highlightLegendItem(e.highlightedLegendItemIx))}),this.addEvent(i,"afterPositionItem",function(t){this.chart===e.chart&&this.chart.renderer&&e.updateProxyPositionForItem(t.item)}
23510),this.addEvent(i,"afterRender",function(){this.chart===e.chart&&this.chart.renderer&&e.recreateProxies()&&g(()=>e.proxyProvider.updateGroupProxyElementPositions("legend"),l(p(this.chart.renderer.globalAnimation,!0)).duration)})}updateLegendItemProxyVisibility(){let e;let t=this.chart,i=t.legend,s=i.allItems||[],n=i.currentPage||1,o=i.clipHeight||0;s.forEach(s=>{if(s.a11yProxyElement){let r=i.pages&&i.pages.length,a=s.a11yProxyElement.element,l=!1;if(e=s.legendItem||{},r){let t=e.pageIx||0;l=(e.y||0)+(e.label?Math.round(e.label.getBBox().height):0)-i.pages[t]>o||t!==n-1}l?t.styledMode?y(a,"highcharts-a11y-invisible"):a.style.visibility="hidden":(f(a,"highcharts-a11y-invisible"),a.style.visibility="")}})}onChartRender(){x(this.chart)||this.removeProxies()}highlightAdjacentLegendPage(e){let t=this.chart,i=t.legend,s=(i.currentPage||1)+e,n=i.pages||[];if(s>0&&s<=n.length){let e=0;for(let n of i.allItems)((n.legendItem||{}).pageIx||0)+1===s&&t.highlightLegendItem(e)&&(this.highlightedLegendItemIx=e),++e}}updateProxyPositionForItem(e){e.a11yProxyElement&&e.a11yProxyElement.refreshPosition()}recreateProxies(){let e=h.activeElement,t=this.proxyGroup,i=e&&t&&t.contains(e);return this.removeProxies(),!!x(this.chart)&&(this.addLegendProxyGroup(),this.proxyLegendItems(),this.updateLegendItemProxyVisibility(),this.updateLegendTitle(),i&&this.chart.highlightLegendItem(this.highlightedLegendItemIx),!0)}removeProxies(){this.proxyProvider.removeGroup("legend")}updateLegendTitle(){let e=this.chart,t=b((e.legend&&e.legend.options.title&&e.legend.options.title.text||"").replace(/<br ?\/?>/g," "),e.renderer.forExport),i=e.langFormat("accessibility.legend.legendLabel"+(t?"":"NoTitle"),{chart:e,legendTitle:t,chartTitle:m(e)});this.proxyProvider.updateGroupAttrs("legend",{"aria-label":i})}addLegendProxyGroup(){let e="all"===this.chart.options.accessibility.landmarkVerbosity?"region":null;this.proxyGroup=this.proxyProvider.addGroup("legend","ul",{"aria-label":"_placeholder_",role:e})}proxyLegendItems(){let e;let t=this;((this.chart.legend||{}).allItems||[]).forEach(i=>{(e=i.legendItem||{}).label&&e.label.element&&t.proxyLegendItem(i)})}proxyLegendItem(e){let t=e.legendItem||{};if(!t.label||!t.group)return;let i=this.chart.langFormat("accessibility.legend.legendItem",{chart:this.chart,itemName:b(e.name,this.chart.renderer.forExport),item:e}),s={tabindex:-1,"aria-pressed":e.visible,"aria-label":i},n=t.group.div?t.label:t.group;e.a11yProxyElement=this.proxyProvider.addProxyElement("legend",{click:t.label,visual:n.element},"button",s)}getKeyboardNavigation(){let e=this.keyCodes,t=this,i=this.chart;return new o(i,{keyCodeMap:[[[e.left,e.right,e.up,e.down],function(e){return t.onKbdArrowKey(this,e)}],[[e.enter,e.space],function(){return t.onKbdClick(this)}],[[e.pageDown,e.pageUp],function(i){let s=i===e.pageDown?1:-1;return t.highlightAdjacentLegendPage(s),this.response.success}]],validate:function(){return t.shouldHaveLegendNavigation()},init:function(){i.highlightLegendItem(0),t.highlightedLegendItemIx=0},terminate:function(){t.highlightedLegendItemIx=-1,i.legend.allItems.forEach(e=>v(!1,e))}})}onKbdArrowKey(e,t){let{keyCodes:{left:i,up:s},highlightedLegendItemIx:n,chart:o}=this,r=o.legend.allItems.length,a=o.options.accessibility.keyboardNavigation.wrapAround,l=t===i||t===s?-1:1;return o.highlightLegendItem(n+l)?this.highlightedLegendItemIx+=l:a&&r>1&&(this.highlightedLegendItemIx=l>0?0:r-1,o.highlightLegendItem(this.highlightedLegendItemIx)),e.response.success}onKbdClick(e){let t=this.chart.legend.allItems[this.highlightedLegendItemIx];return t&&t.a11yProxyElement&&t.a11yProxyElement.click(),e.response.success}shouldHaveLegendNavigation(){if(!x(this.chart))return!1;let e=this.chart,t=(e.options.legend||{}).accessibility||{};return!!(e.legend.display&&t.keyboardNavigation&&t.keyboardNavigation.enabled)}destroy(){this.removeProxies()}}return function(e){function t(e){let t=this.legend.allItems,i=this.accessibility&&this.accessibility.components.legend.highlightedLegendItemIx,s=t[e],n=s?.legendItem||{};if(s){u(i)&&t[i]&&v(!1,t[i]),function(e,t){let i=(e.allItems[t].legendItem||{}).pageIx,s=e.currentPage;void 0!==i&&i+1!==s&&e.scroll(1+i-s)}(this.legend,e);let o=n.label,r=s.a11yProxyElement&&s.a11yProxyElement.innerElement;return o&&o.element&&r&&this.setFocusToElement(o,r),v(!0,s),!0}return!1}function i(e){let t=this.chart.options.accessibility,i=e.item;t.enabled&&i&&i.a11yProxyElement&&i.a11yProxyElement.innerElement.setAttribute("aria-pressed",e.visible?"true":"false")}e.compose=function(e,s){let n=e.prototype;n.highlightLegendItem||(n.highlightLegendItem=t,c(s,"afterColorizeItem",i))}}(A||(A={})),A}),i(t,"Stock/Navigator/ChartNavigatorComposition.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let i;let{isTouchDevice:s}=e,{addEvent:n,merge:o,pick:r}=t,a=[];function l(){this.navigator&&this.navigator.setBaseSeries(null,!1)}function h(){let e,t,i;let s=this.legend,n=this.navigator;if(n){e=s&&s.options,t=n.xAxis,i=n.yAxis;let{scrollbarHeight:o,scrollButtonSize:a}=n;this.inverted?(n.left=n.opposite?this.chartWidth-o-n.height:this.spacing[3]+o,n.top=this.plotTop+a):(n.left=r(t.left,this.plotLeft+a),n.top=n.navigatorOptions.top||this.chartHe
23510ight-n.height-o-(this.scrollbar?.options.margin||0)-this.spacing[2]-(this.rangeSelector&&this.extraBottomMargin?this.rangeSelector.getHeight():0)-(e&&"bottom"===e.verticalAlign&&"proximate"!==e.layout&&e.enabled&&!e.floating?s.legendHeight+r(e.margin,10):0)-(this.titleOffset?this.titleOffset[2]:0)),t&&i&&(this.inverted?t.options.left=i.options.left=n.left:t.options.top=i.options.top=n.top,t.setAxisSize(),i.setAxisSize())}}function c(e){!this.navigator&&!this.scroller&&(this.options.navigator.enabled||this.options.scrollbar.enabled)&&(this.scroller=this.navigator=new i(this),r(e.redraw,!0)&&this.redraw(e.animation))}function d(){let e=this.options;(e.navigator.enabled||e.scrollbar.enabled)&&(this.scroller=this.navigator=new i(this))}function u(){let e=this.options,t=e.navigator,i=e.rangeSelector;if((t&&t.enabled||i&&i.enabled)&&(!s&&"x"===this.zooming.type||s&&"x"===this.zooming.pinchType))return!1}function p(e){let t=e.navigator;if(t&&e.xAxis[0]){let i=e.xAxis[0].getExtremes();t.render(i.min,i.max)}}function g(e){let t=e.options.navigator||{},i=e.options.scrollbar||{};!this.navigator&&!this.scroller&&(t.enabled||i.enabled)&&(o(!0,this.options.navigator,t),o(!0,this.options.scrollbar,i),delete e.options.navigator,delete e.options.scrollbar)}return{compose:function(e,s){if(t.pushUnique(a,e)){let t=e.prototype;i=s,t.callbacks.push(p),n(e,"afterAddSeries",l),n(e,"afterSetChartSize",h),n(e,"afterUpdate",c),n(e,"beforeRender",d),n(e,"beforeShowResetZoom",u),n(e,"update",g)}}}}),i(t,"Core/Axis/NavigatorAxisComposition.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let{isTouchDevice:i}=e,{addEvent:s,correctFloat:n,defined:o,isNumber:r,pick:a}=t;function l(){this.navigatorAxis||(this.navigatorAxis=new c(this))}function h(e){let t;let s=this.chart,n=s.options,r=n.navigator,a=this.navigatorAxis,l=s.zooming.pinchType,h=n.rangeSelector,c=s.zooming.type;if(this.isXAxis&&(r?.enabled||h?.enabled)){if("y"===c&&"zoom"===e.trigger)t=!1;else if(("zoom"===e.trigger&&"xy"===c||i&&"xy"===l)&&this.options.range){let t=a.previousZoom;o(e.min)?a.previousZoom=[this.min,this.max]:t&&(e.min=t[0],e.max=t[1],a.previousZoom=void 0)}}void 0!==t&&e.preventDefault()}class c{static compose(e){e.keepProps.includes("navigatorAxis")||(e.keepProps.push("navigatorAxis"),s(e,"init",l),s(e,"setExtremes",h))}constructor(e){this.axis=e}destroy(){this.axis=void 0}toFixedRange(e,t,i,s){let l=this.axis,h=(l.pointRange||0)/2,c=a(i,l.translate(e,!0,!l.horiz)),d=a(s,l.translate(t,!0,!l.horiz));return o(i)||(c=n(c+h)),o(s)||(d=n(d-h)),r(c)&&r(d)||(c=d=void 0),{min:c,max:d}}}return c}),i(t,"Stock/Navigator/NavigatorDefaults.js",[t["Core/Color/Color.js"],t["Core/Series/SeriesRegistry.js"]],function(e,t){let{parse:i}=e,{seriesTypes:s}=t;return{height:40,margin:25,maskInside:!0,handles:{width:7,borderRadius:0,height:15,symbols:["navigator-handle","navigator-handle"],enabled:!0,lineWidth:1,backgroundColor:"#f2f2f2",borderColor:"#999999"},maskFill:i("#667aff").setOpacity(.3).get(),outlineColor:"#999999",outlineWidth:1,series:{type:void 0===s.areaspline?"line":"areaspline",fillOpacity:.05,lineWidth:1,compare:null,sonification:{enabled:!1},dataGrouping:{approximation:"average",enabled:!0,groupPixelWidth:2,firstAnchor:"firstPoint",anchor:"middle",lastAnchor:"lastPoint",units:[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2,3,4]],["week",[1,2,3]],["month",[1,3,6]],["year",null]]},dataLabels:{enabled:!1,zIndex:2},id:"highcharts-navigator-series",className:"highcharts-navigator-series",lineColor:null,marker:{enabled:!1},threshold:null},xAxis:{className:"highcharts-navigator-xaxis",tickLength:0,lineWidth:0,gridLineColor:"#e6e6e6",id:"navigator-x-axis",gridLineWidth:1,tickPixelInterval:200,labels:{align:"left",style:{color:"#000000",fontSize:"0.7em",opacity:.6,textOutline:"2px contrast"},x:3,y:-4},crosshair:!1},yAxis:{className:"highcharts-navigator-yaxis",gridLineWidth:0,startOnTick:!1,endOnTick:!1,minPadding:.1,id:"navigator-y-axis",maxPadding:.1,labels:{enabled:!1},crosshair:!1,title:{text:null},tickLength:0,tickWidth:0}}}),i(t,"Stock/Navigator/NavigatorSymbols.js",[t["Core/Renderer/SVG/Symbols.js"],t["Core/Utilities.js"]],function(e,t){let{relativeLength:i}=t;return{"navigator-handle":function(t,s,n,o,r={}){let a=r.width?r.width/2:n,l=i(r.borderRadius||0,Math.min(2*a,o));return[["M",-1.5,(o=r.height||o)/2-3.5],["L",-1.5,o/2+4.5],["M",.5,o/2-3.5],["L",.5,o/2+4.5],...e.rect(-a-1,.5,2*a+1,o,{r:l})]}}}),i(t,"Stock/Utilities/StockUtilities.js",[t["Core/Utilities.js"]],function(e){let{defined:t}=e;return{setFixedRange:function(e){let i=this.xAxis[0];t(i.dataMax)&&t(i.dataMin)&&e?this.fixedRange=Math.min(e,i.dataMax-i.dataMin):this.fixedRange=e}}}),i(t,"Stock/Navigator/NavigatorComposition.js",[t["Core/Defaults.js"],t["Core/Globals.js"],t["Core/Axis/NavigatorAxisComposition.js"],t["Stock/Navigator/NavigatorDefaults.js"],t["Stock/Navigator/NavigatorSymbols.js"],t["Core/Renderer/RendererRegistry.js"],t["Stock/Utilities/StockUtilities.js"],t["Core/Utilities.js"]],function(e,t,i,s,n,o,r,a){let{setOptions:l}=e,{composed:h}=t,{getRendererType:c}=o,{setFixedRange:d}=r,{addEvent:u,extend:p,pushUnique:g}=a;function m(){this.chart.navigator&&!this.options.isInternal&&this.chart.navigator.setBaseSeries(null,!1)}return{compose:function(e,t,o){i.compose(t),g(h,"Navigator")&&(e.prototype.setFixedRange=d,p(c().prototype.symbols,n),u(o,"afterUpdate",m),l({navigator:s}))}}}),i(t,"Core/Axis/ScrollbarAxis.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){var i;
23510let{composed:s}=e,{addEvent:n,defined:o,pick:r,pushUnique:a}=t;return function(e){let t;function i(e){let t=r(e.options&&e.options.min,e.min),i=r(e.options&&e.options.max,e.max);return{axisMin:t,axisMax:i,scrollMin:o(e.dataMin)?Math.min(t,e.min,e.dataMin,r(e.threshold,1/0)):t,scrollMax:o(e.dataMax)?Math.max(i,e.max,e.dataMax,r(e.threshold,-1/0)):i}}function l(){let e=this.scrollbar,t=e&&!e.options.opposite,i=this.horiz?2:t?3:1;e&&(this.chart.scrollbarsOffsets=[0,0],this.chart.axisOffset[i]+=e.size+(e.options.margin||0))}function h(){let e=this;e.options&&e.options.scrollbar&&e.options.scrollbar.enabled&&(e.options.scrollbar.vertical=!e.horiz,e.options.startOnTick=e.options.endOnTick=!1,e.scrollbar=new t(e.chart.renderer,e.options.scrollbar,e.chart),n(e.scrollbar,"changed",function(t){let s,n;let{axisMin:r,axisMax:a,scrollMin:l,scrollMax:h}=i(e),c=h-l;if(o(r)&&o(a)){if(e.horiz&&!e.reversed||!e.horiz&&e.reversed?(s=l+c*this.to,n=l+c*this.from):(s=l+c*(1-this.from),n=l+c*(1-this.to)),this.shouldUpdateExtremes(t.DOMType)){let i="mousemove"!==t.DOMType&&"touchmove"!==t.DOMType&&void 0;e.setExtremes(n,s,!0,i,t)}else this.setRange(this.from,this.to)}}))}function c(){let e,t,s;let{scrollMin:n,scrollMax:r}=i(this),a=this.scrollbar,l=this.axisTitleMargin+(this.titleOffset||0),h=this.chart.scrollbarsOffsets,c=this.options.margin||0;if(a&&h){if(this.horiz)this.opposite||(h[1]+=l),a.position(this.left,this.top+this.height+2+h[1]-(this.opposite?c:0),this.width,this.height),this.opposite||(h[1]+=c),e=1;else{let t;this.opposite&&(h[0]+=l),t=a.options.opposite?this.left+this.width+2+h[0]-(this.opposite?0:c):this.opposite?0:c,a.position(t,this.top,this.width,this.height),this.opposite&&(h[0]+=c),e=0}h[e]+=a.size+(a.options.margin||0),isNaN(n)||isNaN(r)||!o(this.min)||!o(this.max)||this.min===this.max?a.setRange(0,1):(t=(this.min-n)/(r-n),s=(this.max-n)/(r-n),this.horiz&&!this.reversed||!this.horiz&&this.reversed?a.setRange(t,s):a.setRange(1-s,1-t))}}e.compose=function(e,i){a(s,"Axis.Scrollbar")&&(t=i,n(e,"afterGetOffset",l),n(e,"afterInit",h),n(e,"afterRender",c))}}(i||(i={})),i}),i(t,"Stock/Scrollbar/ScrollbarDefaults.js",[],function(){return{height:10,barBorderRadius:5,buttonBorderRadius:0,buttonsEnabled:!1,liveRedraw:void 0,margin:void 0,minWidth:6,opposite:!0,step:.2,zIndex:3,barBackgroundColor:"#cccccc",barBorderWidth:0,barBorderColor:"#cccccc",buttonArrowColor:"#333333",buttonBackgroundColor:"#e6e6e6",buttonBorderColor:"#cccccc",buttonBorderWidth:1,rifleColor:"none",trackBackgroundColor:"rgba(255, 255, 255, 0.001)",trackBorderColor:"#cccccc",trackBorderRadius:5,trackBorderWidth:1}}),i(t,"Stock/Scrollbar/Scrollbar.js",[t["Core/Defaults.js"],t["Core/Globals.js"],t["Core/Axis/ScrollbarAxis.js"],t["Stock/Scrollbar/ScrollbarDefaults.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{defaultOptions:o}=e,{addEvent:r,correctFloat:a,crisp:l,defined:h,destroyObjectProperties:c,fireEvent:d,merge:u,pick:p,removeEvent:g}=n;class m{static compose(e){i.compose(e,m)}static swapXY(e,t){return t&&e.forEach(e=>{let t;let i=e.length;for(let s=0;s<i;s+=2)"number"==typeof(t=e[s+1])&&(e[s+1]=e[s+2],e[s+2]=t)}),e}constructor(e,t,i){this._events=[],this.chartX=0,this.chartY=0,this.from=0,this.scrollbarButtons=[],this.scrollbarLeft=0,this.scrollbarStrokeWidth=1,this.scrollbarTop=0,this.size=0,this.to=0,this.trackBorderWidth=1,this.x=0,this.y=0,this.init(e,t,i)}addEvents(){let e=this.options.inverted?[1,0]:[0,1],t=this.scrollbarButtons,i=this.scrollbarGroup.element,s=this.track.element,n=this.mouseDownHandler.bind(this),o=this.mouseMoveHandler.bind(this),a=this.mouseUpHandler.bind(this),l=[[t[e[0]].element,"click",this.buttonToMinClick.bind(this)],[t[e[1]].element,"click",this.buttonToMaxClick.bind(this)],[s,"click",this.trackClick.bind(this)],[i,"mousedown",n],[i.ownerDocument,"mousemove",o],[i.ownerDocument,"mouseup",a],[i,"touchstart",n],[i.ownerDocument,"touchmove",o],[i.ownerDocument,"touchend",a]];l.forEach(function(e){r.apply(null,e)}),this._events=l}buttonToMaxClick(e){let t=(this.to-this.from)*p(this.options.step,.2);this.updatePosition(this.from+t,this.to+t),d(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMEvent:e})}buttonToMinClick(e){let t=a(this.to-this.from)*p(this.options.step,.2);this.updatePosition(a(this.from-t),a(this.to-t)),d(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMEvent:e})}cursorToScrollbarPosition(e){let t=this.options,i=t.minWidth>this.calculatedWidth?t.minWidth:0;return{chartX:(e.chartX-this.x-this.xOffset)/(this.barWidth-i),chartY:(e.chartY-this.y-this.yOffset)/(this.barWidth-i)}}destroy(){let e=this,t=e.chart.scroller;e.removeEvents(),["track","scrollbarRifles","scrollbar","scrollbarGroup","group"].forEach(function(t){e[t]&&e[t].destroy&&(e[t]=e[t].destroy())}),t&&e===t.scrollbar&&(t.scrollbar=null,c(t.scrollbarButtons))}drawScrollbarButton(e){let t=this.renderer,i=this.scrollbarButtons,s=this.options,n=this.size,o=t.g().add(this.group);if(i.push(o),s.buttonsEnabled){let r=t.rect().addClass("highcharts-scrollbar-button").add(o);this.chart.styledMode||r.attr({stroke:s.buttonBorderColor,"stroke-width":s.buttonBorderWidth,fill:s.buttonBackgroun
vendor: 5,144 bytes, line 23510
23510dColor}),r.attr(r.crisp({x:-.5,y:-.5,width:n,height:n,r:s.buttonBorderRadius},r.strokeWidth()));let a=t.path(m.swapXY([["M",n/2+(e?-1:1),n/2-3],["L",n/2+(e?-1:1),n/2+3],["L",n/2+(e?2:-2),n/2]],s.vertical)).addClass("highcharts-scrollbar-arrow").add(i[e]);this.chart.styledMode||a.attr({fill:s.buttonArrowColor})}}init(e,t,i){this.scrollbarButtons=[],this.renderer=e,this.userOptions=t,this.options=u(s,o.scrollbar,t),this.options.margin=p(this.options.margin,10),this.chart=i,this.size=p(this.options.size,this.options.height),t.enabled&&(this.render(),this.addEvents())}mouseDownHandler(e){let t=this.chart.pointer?.normalize(e)||e,i=this.cursorToScrollbarPosition(t);this.chartX=i.chartX,this.chartY=i.chartY,this.initPositions=[this.from,this.to],this.grabbedCenter=!0}mouseMoveHandler(e){let t;let i=this.chart.pointer?.normalize(e)||e,s=this.options.vertical?"chartY":"chartX",n=this.initPositions||[];this.grabbedCenter&&(!e.touches||0!==e.touches[0][s])&&(t=this.cursorToScrollbarPosition(i)[s]-this[s],this.hasDragged=!0,this.updatePosition(n[0]+t,n[1]+t),this.hasDragged&&d(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMType:e.type,DOMEvent:e}))}mouseUpHandler(e){this.hasDragged&&d(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMType:e.type,DOMEvent:e}),this.grabbedCenter=this.hasDragged=this.chartX=this.chartY=null}position(e,t,i,s){let{buttonsEnabled:n,margin:o=0,vertical:r}=this.options,a=this.rendered?"animate":"attr",l=s,h=0;this.group.show(),this.x=e,this.y=t+this.trackBorderWidth,this.width=i,this.height=s,this.xOffset=l,this.yOffset=h,r?(this.width=this.yOffset=i=h=this.size,this.xOffset=l=0,this.yOffset=h=n?this.size:0,this.barWidth=s-(n?2*i:0),this.x=e+=o):(this.height=s=this.size,this.xOffset=l=n?this.size:0,this.barWidth=i-(n?2*s:0),this.y=this.y+o),this.group[a]({translateX:e,translateY:this.y}),this.track[a]({width:i,height:s}),this.scrollbarButtons[1][a]({translateX:r?0:i-l,translateY:r?s-h:0})}removeEvents(){this._events.forEach(function(e){g.apply(null,e)}),this._events.length=0}render(){let e=this.renderer,t=this.options,i=this.size,s=this.chart.styledMode,n=e.g("scrollbar").attr({zIndex:t.zIndex}).hide().add();this.group=n,this.track=e.rect().addClass("highcharts-scrollbar-track").attr({r:t.trackBorderRadius||0,height:i,width:i}).add(n),s||this.track.attr({fill:t.trackBackgroundColor,stroke:t.trackBorderColor,"stroke-width":t.trackBorderWidth});let o=this.trackBorderWidth=this.track.strokeWidth();this.track.attr({x:-l(0,o),y:-l(0,o)}),this.scrollbarGroup=e.g().add(n),this.scrollbar=e.rect().addClass("highcharts-scrollbar-thumb").attr({height:i-o,width:i-o,r:t.barBorderRadius||0}).add(this.scrollbarGroup),this.scrollbarRifles=e.path(m.swapXY([["M",-3,i/4],["L",-3,2*i/3],["M",0,i/4],["L",0,2*i/3],["M",3,i/4],["L",3,2*i/3]],t.vertical)).addClass("highcharts-scrollbar-rifles").add(this.scrollbarGroup),s||(this.scrollbar.attr({fill:t.barBackgroundColor,stroke:t.barBorderColor,"stroke-width":t.barBorderWidth}),this.scrollbarRifles.attr({stroke:t.rifleColor,"stroke-width":1})),this.scrollbarStrokeWidth=this.scrollbar.strokeWidth(),this.scrollbarGroup.translate(-l(0,this.scrollbarStrokeWidth),-l(0,this.scrollbarStrokeWidth)),this.drawScrollbarButton(0),this.drawScrollbarButton(1)}setRange(e,t){let i,s;let n=this.options,o=n.vertical,r=n.minWidth,l=this.barWidth,c=!this.rendered||this.hasDragged||this.chart.navigator&&this.chart.navigator.hasDragged?"attr":"animate";if(!h(l))return;let d=l*Math.min(t,1);i=Math.ceil(l*(e=Math.max(e,0))),this.calculatedWidth=s=a(d-i),s<r&&(i=(l-r+s)*e,s=r);let u=Math.floor(i+this.xOffset+this.yOffset),p=s/2-.5;this.from=e,this.to=t,o?(this.scrollbarGroup[c]({translateY:u}),this.scrollbar[c]({height:s}),this.scrollbarRifles[c]({translateY:p}),this.scrollbarTop=u,this.scrollbarLeft=0):(this.scrollbarGroup[c]({translateX:u}),this.scrollbar[c]({width:s}),this.scrollbarRifles[c]({translateX:p}),this.scrollbarLeft=u,this.scrollbarTop=0),s<=12?this.scrollbarRifles.hide():this.scrollbarRifles.show(),!1===n.showFull&&(e<=0&&t>=1?this.group.hide():this.group.show()),this.rendered=!0}shouldUpdateExtremes(e){return p(this.options.liveRedraw,t.svg&&!t.isTouchDevice&&!this.chart.boosted)||"mouseup"===e||"touchend"===e||!h(e)}trackClick(e){let t=this.chart.pointer?.normalize(e)||e,i=this.to-this.from,s=this.y+this.scrollbarTop,n=this.x+this.scrollbarLeft;this.options.vertical&&t.chartY>s||!this.options.vertical&&t.chartX>n?this.updatePosition(this.from+i,this.to+i):this.updatePosition(this.from-i,this.to-i),d(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMEvent:e})}update(e){this.destroy(),this.init(this.chart.renderer,u(!0,this.options,e),this.chart)}updatePosition(e,t){t>1&&(e=a(1-a(t-e)),t=1),e<0&&(t=a(t-e),e=0),this.from=e,this.to=t}}return m.defaultOptions=s,o.scrollbar=u(!0,m.defaultOptions,o.scrollbar),m}),i(t,"Stock/Navigator/Navigator.js",[t["Core/Axis/Axis.js"],t["Stock/Navigator/ChartNavigatorComposition.js"],t["Core/Defaults.js"],t["Core/Globals.js"],t["Core/Axis/NavigatorAxisComposition.js"],t["Stock/Navigator/NavigatorComposition.js"],t["Stock/Scrollbar/Scrollbar.
23510js"],t["Core/Utilities.js"]],function(e,t,i,s,n,o,r,a){let{defaultOptions:l}=i,{isTouchDevice:h}=s,{addEvent:c,clamp:d,correctFloat:u,defined:p,destroyObjectProperties:g,erase:m,extend:b,find:y,fireEvent:f,isArray:x,isNumber:v,merge:A,pick:C,removeEvent:w,splat:E}=a;function T(e,...t){let i=[].filter.call(t,v);if(i.length)return Math[e].apply(0,i)}class M{static compose(e,i,s){t.compose(e,M),o.compose(e,i,s)}constructor(e){this.scrollbarHeight=0,this.init(e)}drawHandle(e,t,i,s){let n=this.navigatorOptions.handles.height;this.handles[t][s](i?{translateX:Math.round(this.left+this.height/2),translateY:Math.round(this.top+parseInt(e,10)+.5-n)}:{translateX:Math.round(this.left+parseInt(e,10)),translateY:Math.round(this.top+this.height/2-n/2-1)})}drawOutline(e,t,i,s){let n=this.navigatorOptions.maskInside,o=this.outline.strokeWidth(),r=o/2,a=o%2/2,l=this.scrollButtonSize,h=this.size,c=this.top,d=this.height,u=c-r,p=c+d,g=this.left,m,b;i?(m=c+t+a,t=c+e+a,b=[["M",g+d,c-l-a],["L",g+d,m],["L",g,m],["M",g,t],["L",g+d,t],["L",g+d,c+h+l]],n&&b.push(["M",g+d,m-r],["L",g+d,t+r])):(g-=l,e+=g+l-a,t+=g+l-a,b=[["M",g,u],["L",e,u],["L",e,p],["M",t,p],["L",t,u],["L",g+h+2*l,c+r]],n&&b.push(["M",e-r,u],["L",t+r,u])),this.outline[s]({d:b})}drawMasks(e,t,i,s){let n,o,r,a;let l=this.left,h=this.top,c=this.height;i?(r=[l,l,l],a=[h,h+e,h+t],o=[c,c,c],n=[e,t-e,this.size-t]):(r=[l,l+e,l+t],a=[h,h,h],o=[e,t-e,this.size-t],n=[c,c,c]),this.shades.forEach((e,t)=>{e[s]({x:r[t],y:a[t],width:o[t],height:n[t]})})}renderElements(){let e=this,t=e.navigatorOptions,i=t.maskInside,s=e.chart,n=s.inverted,o=s.renderer,r={cursor:n?"ns-resize":"ew-resize"},a=e.navigatorGroup=o.g("navigator").attr({zIndex:8,visibility:"hidden"}).add();if([!i,i,!i].forEach((i,n)=>{let l=o.rect().addClass("highcharts-navigator-mask"+(1===n?"-inside":"-outside")).add(a);s.styledMode||(l.attr({fill:i?t.maskFill:"rgba(0,0,0,0)"}),1===n&&l.css(r)),e.shades[n]=l}),e.outline=o.path().addClass("highcharts-navigator-outline").add(a),s.styledMode||e.outline.attr({"stroke-width":t.outlineWidth,stroke:t.outlineColor}),t.handles&&t.handles.enabled){let i=t.handles,{height:n,width:l}=i;[0,1].forEach(t=>{e.handles[t]=o.symbol(i.symbols[t],-l/2-1,0,l,n,i),s.inverted&&e.handles[t].attr({rotation:90,rotationOriginX:Math.floor(-l/2),rotationOriginY:(n+l)/2}),e.handles[t].attr({zIndex:7-t}).addClass("highcharts-navigator-handle highcharts-navigator-handle-"+["left","right"][t]).add(a),s.styledMode||e.handles[t].attr({fill:i.backgroundColor,stroke:i.borderColor,"stroke-width":i.lineWidth}).css(r)})}}update(e){(this.series||[]).forEach(e=>{e.baseSeries&&delete e.baseSeries.navigatorSeries}),this.destroy(),A(!0,this.chart.options.navigator,e),this.init(this.chart)}render(e,t,i,s){let n=this.chart,o=this.xAxis,r=o.pointRange||0,a=o.navigatorAxis.fake?n.xAxis[0]:o,l=this.navigatorEnabled,h=this.rendered,c=n.inverted,g=n.xAxis[0].minRange,m=n.xAxis[0].options.maxRange,b=this.scrollButtonSize,y,x,A,w=this.scrollbarHeight,E,T;if(this.hasDragged&&!p(i))return;if(e=u(e-r/2),t=u(t+r/2),!v(e)||!v(t)){if(!h)return;i=0,s=C(o.width,a.width)}this.left=C(o.left,n.plotLeft+b+(c?n.plotWidth:0));let M=this.size=E=C(o.len,(c?n.plotHeight:n.plotWidth)-2*b);y=c?w:E+2*b,i=C(i,o.toPixels(e,!0)),s=C(s,o.toPixels(t,!0)),v(i)&&Math.abs(i)!==1/0||(i=0,s=y);let S=o.toValue(i,!0),k=o.toValue(s,!0),P=Math.abs(u(k-S));P<g?this.grabbedLeft?i=o.toPixels(k-g-r,!0):this.grabbedRight&&(s=o.toPixels(S+g+r,!0)):p(m)&&u(P-r)>m&&(this.grabbedLeft?i=o.toPixels(k-m-r,!0):this.grabbedRight&&(s=o.toPixels(S+m+r,!0))),this.zoomedMax=d(Math.max(i,s),0,M),this.zoomedMin=d(this.fixedWidth?this.zoomedMax-this.fixedWidth:Math.min(i,s),0,M),this.range=this.zoomedMax-this.zoomedMin,M=Math.round(this.zoomedMax);let D=Math.round(this.zoomedMin);l&&(this.navigatorGroup.attr({visibility:"inherit"}),T=h&&!this.hasDragged?"animate":"attr",this.drawMasks(D,M,c,T),this.drawOutline(D,M,c,T),this.navigatorOptions.handles.enabled&&(this.drawHandle(D,0,c,T),this.drawHandle(M,1,c,T))),this.scrollbar&&(c?(A=this.top-b,x=this.left-w+(l||!a.opposite?0:(a.titleOffset||0)+a.axisTitleMargin),w=E+2*b):(A=this.top+(l?this.height:-w),x=this.left-b),this.scrollbar.position(x,A,y,w),this.scrollbar.setRange(this.zoomedMin/(E||1),this.zoomedMax/(E||1))),this.rendered=!0,f(this,"afterRe
23510nder")}addMouseEvents(){let e=this,t=e.chart,i=t.container,s=[],n,o;e.mouseMoveHandler=n=function(t){e.onMouseMove(t)},e.mouseUpHandler=o=function(t){e.onMouseUp(t)},(s=e.getPartsEvents("mousedown")).push(c(t.renderTo,"mousemove",n),c(i.ownerDocument,"mouseup",o),c(t.renderTo,"touchmove",n),c(i.ownerDocument,"touchend",o)),s.concat(e.getPartsEvents("touchstart")),e.eventsToUnbind=s,e.series&&e.series[0]&&s.push(c(e.series[0].xAxis,"foundExtremes",function(){t.navigator.modifyNavigatorAxisExtremes()}))}getPartsEvents(e){let t=this,i=[];return["shades","handles"].forEach(function(s){t[s].forEach(function(n,o){i.push(c(n.element,e,function(e){t[s+"Mousedown"](e,o)}))})}),i}shadesMousedown(e,t){e=this.chart.pointer?.normalize(e)||e;let i=this.chart,s=this.xAxis,n=this.zoomedMin,o=this.size,r=this.range,a=this.left,l=e.chartX,h,c,d,u;i.inverted&&(l=e.chartY,a=this.top),1===t?(this.grabbedCenter=l,this.fixedWidth=r,this.dragOffset=l-n):(u=l-a-r/2,0===t?u=Math.max(0,u):2===t&&u+r>=o&&(u=o-r,this.reversedExtremes?(u-=r,c=this.getUnionExtremes().dataMin):h=this.getUnionExtremes().dataMax),u!==n&&(this.fixedWidth=r,p((d=s.navigatorAxis.toFixedRange(u,u+r,c,h)).min)&&f(this,"setRange",{min:Math.min(d.min,d.max),max:Math.max(d.min,d.max),redraw:!0,eventArguments:{trigger:"navigator"}})))}handlesMousedown(e,t){e=this.chart.pointer?.normalize(e)||e;let i=this.chart,s=i.xAxis[0],n=this.reversedExtremes;0===t?(this.grabbedLeft=!0,this.otherHandlePos=this.zoomedMax,this.fixedExtreme=n?s.min:s.max):(this.grabbedRight=!0,this.otherHandlePos=this.zoomedMin,this.fixedExtreme=n?s.max:s.min),i.setFixedRange(void 0)}onMouseMove(e){let t=this,i=t.chart,s=t.navigatorSize,n=t.range,o=t.dragOffset,r=i.inverted,a=t.left,l;(!e.touches||0!==e.touches[0].pageX)&&(l=(e=i.pointer?.normalize(e)||e).chartX,r&&(a=t.top,l=e.chartY),t.grabbedLeft?(t.hasDragged=!0,t.render(0,0,l-a,t.otherHandlePos)):t.grabbedRight?(t.hasDragged=!0,t.render(0,0,t.otherHandlePos,l-a)):t.grabbedCenter&&(t.hasDragged=!0,l<o?l=o:l>s+o-n&&(l=s+o-n),t.render(0,0,l-o,l-o+n)),t.hasDragged&&t.scrollbar&&C(t.scrollbar.options.liveRedraw,!h&&!this.chart.boosted)&&(e.DOMType=e.type,setTimeout(function(){t.onMouseUp(e)},0)))}onMouseUp(e){let t,i,s,n,o,r;let a=this.chart,l=this.xAxis,h=this.scrollbar,c=e.DOMEvent||e,d=a.inverted,u=this.rendered&&!this.hasDragged?"animate":"attr";(this.hasDragged&&(!h||!h.hasDragged)||"scrollbar"===e.trigger)&&(s=this.getUnionExtremes(),this.zoomedMin===this.otherHandlePos?n=this.fixedExtreme:this.zoomedMax===this.otherHandlePos&&(o=this.fixedExtreme),this.zoomedMax===this.size&&(o=this.reversedExtremes?s.dataMin:s.dataMax),0===this.zoomedMin&&(n=this.reversedExtremes?s.dataMax:s.dataMin),p((r=l.navigatorAxis.toFixedRange(this.zoomedMin,this.zoomedMax,n,o)).min)&&f(this,"setRange",{min:Math.min(r.min,r.max),max:Math.max(r.min,r.max),redraw:!0,animation:!this.hasDragged&&null,eventArguments:{trigger:"navigator",triggerOp:"navigator-drag",DOMEvent:c}})),"mousemove"!==e.DOMType&&"touchmove"!==e.DOMType&&(this.grabbedLeft=this.grabbedRight=this.grabbedCenter=this.fixedWidth=this.fixedExtreme=this.otherHandlePos=this.hasDragged=this.dragOffset=null),this.navigatorEnabled&&v(this.zoomedMin)&&v(this.zoomedMax)&&(i=Math.round(this.zoomedMin),t=Math.round(this.zoomedMax),this.shades&&this.drawMasks(i,t,d,u),this.outline&&this.drawOutline(i,t,d,u),this.navigatorOptions.handles.enabled&&Object.keys(this.handles).length===this.handles.length&&(this.drawHandle(i,0,d,u),this.drawHandle(t,1,d,u)))}removeEvents(){this.eventsToUnbind&&(this.eventsToUnbind.forEach(function(e){e()}),this.eventsToUnbind=void 0),this.removeBaseSeriesEvents()}removeBaseSeriesEvents(){let e=this.baseSeries||[];this.navigatorEnabled&&e[0]&&(!1!==this.navigatorOptions.adaptToUpdatedData&&e.forEach(function(e){w(e,"updatedData",this.updatedDataHandler)},this),e[0].xAxis&&w(e[0].xAxis,"foundExtremes",this.modifyBaseAxisExtremes))}init(t){let i=t.options,s=i.navigator||{},o=s.enabled,a=i.scrollbar||{},l=a.enabled,h=o&&s.height||0,d=l&&a.height||0,u=a.buttonsEnabled&&d||0;this.handles=[],this.shades=[],this.chart=t,this.setBaseSeries(),this.height=h,this.scrollbarHeight=d,this.scrollButtonSize=u,this.scrollbarEnabled=l,this.navigatorEnabled=o,this.navigatorOptions=s,this.scrollbarOptions=a,this.opposite=C(s.opposite,!!(!o&&t.inverted));let p=this,g=p.baseSeries,m=t.xAxis.length,b=t.yAxis.length,y=g&&g[0]&&g[0].xAxis||t.xAxis[0]||{options:{}};if(t.isDirtyBox=!0,p.navigatorEnabled?(p.xAxis=new e(t,A({breaks:y.options.breaks,ordinal:y.options.ordinal,overscroll:y.options.overscroll},s.xAxis,{type:"datetime",index:m,isInternal:!0,offset:0,keepOrdinalPadding:!0,startOnTick:!1,endOnTick:!1,minPadding:0,maxPadding:0,zoomEnabled:!1},t.inverted?{offsets:[u,0,-u,0],width:h}:{offsets:[0,-u,0,u],height:h}),"xAxis"),p.yAxis=new e(t,A(s.yAxis,{alignTicks:!1,offset:0,index:b,isInternal:!0,reversed:C(s.yAxis&&s.yAxis.reversed,t.yAxis[0]&&t.yAxis[0].reversed,!1),zoomEnabled:!1},t.inverted?{width:h}:{height:h}),"yAxis"),g||s.series.data?p.updateNavigatorSeries(!1):0===t.series.length&&(p.unbindRedraw=c(t,"beforeRedraw",function(){t.series.length>0&&!p.series&&(p.setBaseSeries(),p.unbindRedraw())})),p.reversedExtremes=t.inverted&&!p.xAxis.reversed||!t.inverted&&p.xAxis.reversed,p.renderElements(),p.addMouseEvents()):(p.xAxis={chart:t,navigatorAxis:{fake:!0},translate:function(e,i){let s=t.xAxis[0],n=s.getExtremes(),o=s.len-2*u,r=T("min",s.options.min,n.dataMin),a=T("max",s.options.max,n.dataMax)-r;return i?e*a/o+r:o*(e-r)/a},toPixels:function(e){return this.translate(e)},toValue:function(e){return this.translate(e,!0)}},p.xAxis.navigatorAxis.axis=p.xAxis,p.xAxis.navigatorAxis.toFixedRange=n.prototype.toFixedRange.bind(p.xAxis.navigatorAxis)),t.options.scrollbar.enabled){let e=A(t.options.scrollbar,{vertical:t.inverted});!v(e.margin)&&p.navigatorEnabled&&(e.margin=t.inverted?-3:3),t.scrollbar=p.scrollbar=new r(t.renderer,e,t),c(p.scrollbar,"changed",function(e){let t=p.size,i=t*this.to,s=t*this.from;p.hasDragged=p.scrollbar.hasDragged,p.render(0,0,s,i),this.shouldUpdateExtremes(e.DOMType)&&setTimeout(function(){p.onMouseUp(e)})})}p.addBaseSeriesEvents(),p.addChartEvents()}getUnionExtremes(e){let t;let i=this.chart.xAxis[0],s=this.xAxis,n=s.options,o=i.options;return e&&null===i.dataMin||(t={dataMin:C(n&&n.min,T("min",o.min,i.dataMin,s.dataMin,s.min)),dataMax:C(n&&n.max,T("max",o.max,i.dataMax,s.dataMax,s.max))}),t}setBaseSeries(e,t){let i=this.chart,s=this.baseSeries=[];e=e||i.options&&i.options.navigator.baseSeries||(i.series.length?y(i.series,e=>
23510!e.options.isInternal).index:0),(i.series||[]).forEach((t,i)=>{!t.options.isInternal&&(t.options.showInNavigator||(i===e||t.options.id===e)&&!1!==t.options.showInNavigator)&&s.push(t)}),this.xAxis&&!this.xAxis.navigatorAxis.fake&&this.updateNavigatorSeries(!0,t)}updateNavigatorSeries(e,t){let i=this,s=i.chart,n=i.baseSeries,o={enableMouseTracking:!1,index:null,linkedTo:null,group:"nav",padXAxis:!1,xAxis:this.navigatorOptions.xAxis?.id,yAxis:this.navigatorOptions.yAxis?.id,showInLegend:!1,stacking:void 0,isInternal:!0,states:{inactive:{opacity:1}}},r=i.series=(i.series||[]).filter(e=>{let t=e.baseSeries;return!(0>n.indexOf(t))||(t&&(w(t,"updatedData",i.updatedDataHandler),delete t.navigatorSeries),e.chart&&e.destroy(),!1)}),a,h,c=i.navigatorOptions.series,d;n&&n.length&&n.forEach(e=>{let u=e.navigatorSeries,p=b({color:e.color,visible:e.visible},x(c)?l.navigator.series:c);if(u&&!1===i.navigatorOptions.adaptToUpdatedData)return;o.name="Navigator "+n.length,d=(a=e.options||{}).navigatorOptions||{},p.dataLabels=E(p.dataLabels),(h=A(a,o,p,d)).pointRange=C(p.pointRange,d.pointRange,l.plotOptions[h.type||"line"].pointRange);let g=d.data||p.data;i.hasNavigatorData=i.hasNavigatorData||!!g,h.data=g||a.data&&a.data.slice(0),u&&u.options?u.update(h,t):(e.navigatorSeries=s.initSeries(h),s.setSortedData(),e.navigatorSeries.baseSeries=e,r.push(e.navigatorSeries))}),(c.data&&!(n&&n.length)||x(c))&&(i.hasNavigatorData=!1,(c=E(c)).forEach((e,t)=>{o.name="Navigator "+(r.length+1),(h=A(l.navigator.series,{color:s.series[t]&&!s.series[t].options.isInternal&&s.series[t].color||s.options.colors[t]||s.options.colors[0]},o,e)).data=e.data,h.data&&(i.hasNavigatorData=!0,r.push(s.initSeries(h)))})),e&&this.addBaseSeriesEvents()}addBaseSeriesEvents(){let e=this,t=e.baseSeries||[];t[0]&&t[0].xAxis&&t[0].eventsToUnbind.push(c(t[0].xAxis,"foundExtremes",this.modifyBaseAxisExtremes)),t.forEach(t=>{t.eventsToUnbind.push(c(t,"show",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!0,!1)})),t.eventsToUnbind.push(c(t,"hide",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!1,!1)})),!1!==this.navigatorOptions.adaptToUpdatedData&&t.xAxis&&t.eventsToUnbind.push(c(t,"updatedData",this.updatedDataHandler)),t.eventsToUnbind.push(c(t,"remove",function(){this.navigatorSeries&&(m(e.series,this.navigatorSeries),p(this.navigatorSeries.options)&&this.navigatorSeries.remove(!1),delete this.navigatorSeries)}))})}getBaseSeriesMin(e){return this.baseSeries.reduce(function(e,t){return Math.min(e,t.xData&&t.xData.length?t.xData[0]:e)},e)}modifyNavigatorAxisExtremes(){let e=this.xAxis;if(void 0!==e.getExtremes){let t=this.getUnionExtremes(!0);t&&(t.dataMin!==e.min||t.dataMax!==e.max)&&(e.min=t.dataMin,e.max=t.dataMax)}}modifyBaseAxisExtremes(){let e,t;let i=this.chart.navigator,s=this.getExtremes(),n=s.min,o=s.max,r=s.dataMin,a=s.dataMax,l=o-n,h=i.stickToMin,c=i.stickToMax,d=C(this.ordinal?.convertOverscroll(this.options.overscroll),0),u=i.series&&i.series[0],p=!!this.setExtremes;!(this.eventArgs&&"rangeSelectorButton"===this.eventArgs.trigger)&&(h&&(e=(t=r)+l),c&&(e=a+d,h||(t=Math.max(r,e-l,i.getBaseSeriesMin(u&&u.xData?u.xData[0]:-Number.MAX_VALUE)))),p&&(h||c)&&v(t)&&(this.min=this.userMin=t,this.max=this.userMax=e)),i.stickToMin=i.stickToMax=null}updatedDataHandler(){let e=this.chart.navigator,t=this.navigatorSeries,i=e.reversedExtremes?0===Math.round(e.zoomedMin):Math.round(e.zoomedMax)>=Math.round(e.size);e.stickToMax=C(this.chart.options.navigator&&this.chart.options.navigator.stickToMax,i),e.stickToMin=e.shouldStickToMin(this,e),t&&!e.hasNavigatorData&&(t.options.pointStart=this.xData[0],t.setData(this.options.data,!1,null,!1))}shouldStickToMin(e,t){let i=t.getBaseSeriesMin(e.xData[0]),s=e.xAxis,n=s.max,o=s.min,r=s.options.range;return!!(v(n)&&v(o))&&(r&&n-i>0?n-i<r:o<=i)}addChartEvents(){this.eventsToUnbind||(this.eventsToUnbind=[]),this.eventsToUnbind.push(c(this.chart,"redraw",function(){let e=this.navigator,t=e&&(e.baseSeries&&e.baseSeries[0]&&e.baseSeries[0].xAxis||this.xAxis[0]);t&&e.render(t.min,t.max)}),c(this.chart,"getMargins",function(){let e=this.navigator,t=e.opposite?"plotTop":"marginBottom";this.inverted&&(t=e.opposite?"marginRight":"plotLeft"),this[t]=(this[t]||0)+(e.navigatorEnabled||!this.inverted?e.height+e.scrollbarHeight:0)+e.navigatorOptions.margin}),c(M,"setRange",function(e){this.chart.xAxis[0].setExtremes(e.min,e.max,e.redraw,e.animation,e.eventArguments)}))}destroy(){this.removeEvents(),this.xAxis&&(m(this.chart.xAxis,this.xAxis),m(this.chart.axes,this.xAxis)),this.yAxis&&(m(this.chart.yAxis,this.yAxis),m(this.chart.axes,this.yAxis)),(this.series||[]).forEac
23510h(e=>{e.destroy&&e.destroy()}),["series","xAxis","yAxis","shades","outline","scrollbarTrack","scrollbarRifles","scrollbarGroup","scrollbar","navigatorGroup","rendered"].forEach(e=>{this[e]&&this[e].destroy&&this[e].destroy(),this[e]=null}),[this.handles].forEach(e=>{g(e)})}}return M}),i(t,"Accessibility/Components/NavigatorComponent.js",[t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/Announcer.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Stock/Navigator/Navigator.js"],t["Core/Animation/AnimationUtilities.js"],t["Core/Templating.js"],t["Core/Utilities.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Accessibility/Utils/ChartUtilities.js"]],function(e,t,i,s,n,o,r,a,l){let{animObject:h}=n,{format:c}=o,{clamp:d,pick:u,syncTimeout:p}=r,{getFakeMouseEvent:g}=a,{getAxisRangeDescription:m,fireEventOnWrappedOrUnwrappedElement:b}=l;return class extends e{init(){let e=this.chart,i=this;this.announcer=new t(e,"polite"),this.addEvent(s,"afterRender",function(){this.chart===i.chart&&this.chart.renderer&&p(()=>{i.proxyProvider.updateGroupProxyElementPositions("navigator"),i.updateHandleValues()},h(u(this.chart.renderer.globalAnimation,!0)).duration)})}onChartUpdate(){let e=this.chart,t=e.options;if(t.navigator.accessibility?.enabled){let i=t.accessibility.landmarkVerbosity,s=t.lang.accessibility?.navigator.groupLabel;this.proxyProvider.removeGroup("navigator"),this.proxyProvider.addGroup("navigator","div",{role:"all"===i?"region":"group","aria-label":c(s,{chart:e},e)});let n=t.lang.accessibility?.navigator.handleLabel;[0,1].forEach(t=>{let i=this.getHandleByIx(t);if(i){let s=this.proxyProvider.addProxyElement("navigator",{click:i},"input",{type:"range","aria-label":c(n,{handleIx:t,chart:e},e)});this[t?"maxHandleProxy":"minHandleProxy"]=s.innerElement,s.innerElement.style.pointerEvents="none",s.innerElement.oninput=()=>this.updateNavigator()}}),this.updateHandleValues()}else this.proxyProvider.removeGroup("navigator")}getNavigatorHandleNavigation(e){let t=this,s=this.chart,n=e?this.maxHandleProxy:this.minHandleProxy,o=this.keyCodes;return new i(s,{keyCodeMap:[[[o.left,o.right,o.up,o.down],function(i){if(n){let r=i===o.left||i===o.up?-1:1;n.value=""+d(parseFloat(n.value)+r,0,100),t.updateNavigator(()=>{let i=t.getHandleByIx(e);i&&s.setFocusToElement(i,n)})}return this.response.success}]],init:()=>{s.setFocusToElement(this.getHandleByIx(e),n)},validate:()=>!!(this.getHandleByIx(e)&&n&&s.options.navigator.accessibility?.enabled)})}getKeyboardNavigation(){return[this.getNavigatorHandleNavigation(0),this.getNavigatorHandleNavigation(1)]}destroy(){this.updateNavigatorThrottleTimer&&clearTimeout(this.updateNavigatorThrottleTimer),this.proxyProvider.removeGroup("navigator"),this.announcer&&this.announcer.destroy()}updateHandleValues(){let e=this.chart.navigator;if(e&&this.minHandleProxy&&this.maxHandleProxy){let t=e.size;this.minHandleProxy.value=""+Math.round(e.zoomedMin/t*100),this.maxHandleProxy.value=""+Math.round(e.zoomedMax/t*100)}}getHandleByIx(e){let t=this.chart.navigator;return t&&t.handles&&t.handles[e]}updateNavigator(e){this.updateNavigatorThrottleTimer&&clearTimeout(this.updateNavigatorThrottleTimer),this.updateNavigatorThrottleTimer=setTimeout((e=>{let t=this.chart,{navigator:i,pointer:s}=t;if(i&&s&&this.minHandleProxy&&this.maxHandleProxy){let n=s.getChartPosition(),o=parseFloat(this.minHandleProxy.value)/100*i.size,r=parseFloat(this.maxHandleProxy.value)/100*i.size;[[0,"mousedown",i.zoomedMin],[0,"mousemove",o],[0,"mouseup",o],[1,"mousedown",i.zoomedMax],[1,"mousemove",r],[1,"mouseup",r]].forEach(([e,t,s])=>{let o=this.getHandleByIx(e)?.element;o&&b(o,g(t,{x:n.left+i.left+s,y:n.top+i.top},o))}),e&&e();let a=t.options.lang.accessibility?.navigator.changeAnnouncement,l=m(t.xAxis[0]);this.announcer.announce(c(a,{axisRangeDescription:l,chart:t},t))}}).bind(this,e),20)}}}),i(t,"Accessibility/Components/SeriesComponent/SeriesDescriber.js",[t["Accessibility/Components/AnnotationsA11y.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Core/Templating.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{getPointAnnotationTexts:o}=e,{getAxisDescription:r,getSeriesFirstPointElement:a,getSeriesA11yElement:l,unhideChartElementFromAT:h}=t,{format:c,numberFormat:d}=i,{reverseChildNodes:u,stripHTMLTagsFromString:p}=s,{find:g,isNumber:m,isString:b,pick:y,defined:f}=n;function x(e){let t=e.chart.options.accessibility.series.pointDescriptionEnabledThreshold;return!!(!1!==t&&e.points&&e.points.length>=+t)}function v(e,t){let i=e.series,s=i.chart,n=s.options.accessibility.point||{},o=i.options.accessibility&&i.options.accessibility.point||{},r=i.tooltipOptions||{},a=s.options.lang;return m(t)?d(t,o.valueDecimals||n.valueDecimals||r.valueDecimals||-1,a.decimalPoint,a.accessibility.thousandsSep||a.thousandsSep):t}function A(e,t){let i=e[t];return e.chart.langFormat("accessibility.series."+t+"Description",{name:r(i),series:e})}function C(e){let t=e.series,i=t.chart.series.length>1||t.options.name,s=function(e){let t=e.series,i=t.chart,s=t.options.accessibility,n=s&&s.point&&s.point.valueDescriptionFormat||i.options.accessibility.point.valueDescriptionFormat,o=y(t.xAxis&&t.xAxis.options.accessibility&&t.xAxis.options.accessibility.enabled,!i.angular&&"flowmap"!==t.type),r=o?function(e){let t=function(e){let t=e.series,i=t.chart,s=t.options.accessibility&&t.options.accessibility.point||{},n=i.options.accessibility.point||{},o=t.xAxis&&t.xAxis.dateTime;
23510if(o){let t=o.getXDateFormat(e.x||0,i.options.tooltip.dateTimeLabelFormats),r=s.dateFormatter&&s.dateFormatter(e)||n.dateFormatter&&n.dateFormatter(e)||s.dateFormat||n.dateFormat||t;return i.time.dateFormat(r,e.x||0,void 0)}}(e),i=(e.series.xAxis||{}).categories&&f(e.category)&&(""+e.category).replace("<br/>"," "),s=f(e.id)&&0>(""+e.id).indexOf("highcharts-"),n="x, "+e.x;return e.name||t||i||(s?e.id:n)}(e):"";return c(n,{point:e,index:f(e.index)?e.index+1:"",xDescription:r,value:function(e){let t=e.series,i=t.chart.options.accessibility.point||{},s=t.chart.options.accessibility&&t.chart.options.accessibility.point||{},n=t.tooltipOptions||{},o=s.valuePrefix||i.valuePrefix||n.valuePrefix||"",r=s.valueSuffix||i.valueSuffix||n.valueSuffix||"",a=void 0!==e.value?"value":"y",l=v(e,e[a]);return e.isNull?t.chart.langFormat("accessibility.series.nullPointValue",{point:e}):t.pointArrayMap?function(e,t,i){let s=t||"",n=i||"",o=function(t){let i=v(e,y(e[t],e.options[t]));return void 0!==i?t+": "+s+i+n:i};return e.series.pointArrayMap.reduce(function(e,t){let i=o(t);return i?e+(e.length?", ":"")+i:e},"")}(e,o,r):o+l+r}(e),separator:o?", ":""},i)}(e),n=e.options&&e.options.accessibility&&e.options.accessibility.description,r=i?" "+t.name+".":"",a=function(e){let t=e.series.chart,i=o(e);return i.length?t.langFormat("accessibility.series.pointAnnotationsDescription",{point:e,annotations:i}):""}(e);return e.accessibility=e.accessibility||{},e.accessibility.valueDescription=s,s+(n?" "+n:"")+r+(a?" "+a:"")}function w(e){let t=e.chart,i=t.types||[],s=function(e){let t=(e.options.accessibility||{}).description;return t&&e.chart.langFormat("accessibility.series.description",{description:t,series:e})||""}(e),n=function(i){return t[i]&&t[i].length>1&&e[i]},o=e.index+1,r=A(e,"xAxis"),a=A(e,"yAxis"),l={seriesNumber:o,series:e,chart:t},h=i.length>1?"Combination":"",d=t.langFormat("accessibility.series.summary."+e.type+h,l)||t.langFormat("accessibility.series.summary.default"+h,l),u=(n("yAxis")?" "+a+".":"")+(n("xAxis")?" "+r+".":"");return c(y(e.options.accessibility&&e.options.accessibility.descriptionFormat,t.options.accessibility.series.descriptionFormat,""),{seriesDescription:d,authorDescription:s?" "+s:"",axisDescription:u,series:e,chart:t,seriesNumber:o},void 0)}return{defaultPointDescriptionFormatter:C,defaultSeriesDescriptionFormatter:w,describeSeries:function(e){let t=e.chart,i=a(e),s=l(e),n=t.is3d&&t.is3d();s&&(s.lastChild!==i||n||u(s),function(e){let t=function(e){let t=e.options.accessibility||{};return!x(e)&&!t.exposeAsGroupOnly}(e),i=function(e){let t=e.chart.options.accessibility.keyboardNavigation.seriesNavigation;return!!(e.points&&(e.points.length<+t.pointNavigationEnabledThreshold||!1===t.pointNavigationEnabledThreshold))}(e),s=e.chart.options.accessibility.point.describeNull;(t||i)&&e.points.forEach(i=>{let n=i.graphic&&i.graphic.element||function(e){let t=e.series,i=t&&t.chart,s=t&&t.is("sunburst"),n=e.isNull,o=i&&i.options.accessibility.point.describeNull;return n&&!s&&o}(i)&&function(e){let t=e.series,i=function(e){let t=e.index;return e.series&&e.series.data&&f(t)&&g(e.series.data,function(e){return!!(e&&void 0!==e.index&&e.index>t&&e.graphic&&e.graphic.element)})||null}(e),s=i&&i.graphic,n=s?s.parentGroup:t.graph||t.group,o=i?{x:y(e.plotX,i.plotX,0),y:y(e.plotY,i.plotY,0)}:{x:y(e.plotX,0),y:y(e.plotY,0)},r=function(e,t){let i=e.series.chart.renderer.rect(t.x,t.y,1,1);return i.attr({class:"highcharts-a11y-mock-point",fill:"none",opacity:0,"fill-opacity":0,"stroke-opacity":0}),i}(e,o);if(n&&n.element)return e.graphic=r,e.hasMockGraphic=!0,r.add(n),n.element.insertBefore(r.element,s?s.element:null),r.element}(i),o=i.options&&i.options.accessibility&&!1===i.options.accessibility.enabled;if(n){if(i.isNull&&!s){n.setAttribute("aria-hidden",!0);return}n.setAttribute("tabindex","-1"),e.chart.styledMode||(n.style.outline="none"),t&&!o?function(e,t){let i=e.series,s=i.options.accessibility?.point||{},n=i.chart.options.accessibility.point||{},o=p(b(s.descriptionFormat)&&c(s.descriptionFormat,e,i.chart)||s.descriptionFormatter?.(e)||b(n.descriptionFormat)&&c(n.descriptionFormat,e,i.chart)||n.descriptionFormatter?.(e)||C(e),i.chart.renderer.forExport);t.setAttribute("role","img"),t.setAttribute("aria-label",o)}(i,n):n.setAttribute("aria-hidden",!0)}})}(e),h(t,s),function(e){let t=e.chart,i=t.options.chart,s=i.options3d&&i.options3d.enabled,n=t.series.length>1,o=t.options.accessibility.series.describeSingleSeries,r=(e.options.accessibility||{}).exposeAsGroupOnly;return!(s&&n)&&(n||o||r||x(e))}(e)?function(e,t){let i=e.options.accessibility||{},s=e.chart.options.accessibility,n=s.landmarkVerbosity;i.exposeAsGroupOnly?t.setAttribute("role","img"):"all"===n?t.setAttribute("role","regi
23510on"):t.setAttribute("role","group"),t.setAttribute("tabindex","-1"),e.chart.styledMode||(t.style.outline="none"),t.setAttribute("aria-label",p(s.series.descriptionFormatter&&s.series.descriptionFormatter(e)||w(e),e.chart.renderer.forExport))}(e,s):s.removeAttribute("aria-label"))}}}),i(t,"Accessibility/Components/SeriesComponent/NewDataAnnouncer.js",[t["Core/Globals.js"],t["Core/Utilities.js"],t["Accessibility/Utils/Announcer.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/EventProvider.js"],t["Accessibility/Components/SeriesComponent/SeriesDescriber.js"]],function(e,t,i,s,n,o){let{composed:r}=e,{addEvent:a,defined:l,pushUnique:h}=t,{getChartTitle:c}=s,{defaultPointDescriptionFormatter:d,defaultSeriesDescriptionFormatter:u}=o;function p(e){return!!e.options.accessibility.announceNewData.enabled}class g{constructor(e){this.dirty={allSeries:{}},this.lastAnnouncementTime=0,this.chart=e}init(){let e=this.chart,t=e.options.accessibility.announceNewData.interruptUser?"assertive":"polite";this.lastAnnouncementTime=0,this.dirty={allSeries:{}},this.eventProvider=new n,this.announcer=new i(e,t),this.addEventListeners()}destroy(){this.eventProvider.removeAddedEvents(),this.announcer.destroy()}addEventListeners(){let e=this,t=this.chart,i=this.eventProvider;i.addEvent(t,"afterApplyDrilldown",function(){e.lastAnnouncementTime=0}),i.addEvent(t,"afterAddSeries",function(t){e.onSeriesAdded(t.series)}),i.addEvent(t,"redraw",function(){e.announceDirtyData()})}onSeriesAdded(e){p(this.chart)&&(this.dirty.hasDirty=!0,this.dirty.allSeries[e.name+e.index]=e,this.dirty.newSeries=l(this.dirty.newSeries)?void 0:e)}announceDirtyData(){let e=this.chart,t=this;if(e.options.accessibility.announceNewData&&this.dirty.hasDirty){let e=this.dirty.newPoint;e&&(e=function(e){let t=e.series.data.filter(t=>e.x===t.x&&e.y===t.y);return 1===t.length?t[0]:e}(e)),this.queueAnnouncement(Object.keys(this.dirty.allSeries).map(e=>t.dirty.allSeries[e]),this.dirty.newSeries,e),this.dirty={allSeries:{}}}}queueAnnouncement(e,t,i){let s=this.chart.options.accessibility.announceNewData;if(s.enabled){let n=+new Date,o=n-this.lastAnnouncementTime,r=Math.max(0,s.minAnnounceInterval-o),a=function(e,t){let i=(e||[]).concat(t||[]).reduce((e,t)=>(e[t.name+t.index]=t,e),{});return Object.keys(i).map(e=>i[e])}(this.queuedAnnouncement&&this.queuedAnnouncement.series,e),l=this.buildAnnouncementMessage(a,t,i);l&&(this.queuedAnnouncement&&clearTimeout(this.queuedAnnouncementTimer),this.queuedAnnouncement={time:n,message:l,series:a},this.queuedAnnouncementTimer=setTimeout(()=>{this&&this.announcer&&(this.lastAnnouncementTime=+new Date,this.announcer.announce(this.queuedAnnouncement.message),delete this.queuedAnnouncement,delete this.queuedAnnouncementTimer)},r))}}buildAnnouncementMessage(t,i,s){let n=this.chart,o=n.options.accessibility.announceNewData;if(o.announcementFormatter){let e=o.announcementFormatter(t,i,s);if(!1!==e)return e.length?e:null}let r=e.charts&&e.charts.length>1?"Multiple":"Single",a=i?"newSeriesAnnounce"+r:s?"newPointAnnounce"+r:"newDataAnnounce",l=c(n);return n.langFormat("accessibility.announceNewData."+a,{chartTitle:l,seriesDesc:i?u(i):null,pointDesc:s?d(s):null,point:s,series:i})}}return function(e){function t(e){let t=this.chart,i=t.accessibility?.components.series.newDataAnnouncer;i&&i.chart===t&&p(t)&&(i.dirty.newPoint=l(i.dirty.newPoint)?void 0:e.point)}function i(){let e=this.chart,t=e.accessibility?.components.series.newDataAnnouncer;t&&t.chart===e&&p(e)&&(t.dirty.hasDirty=!0,t.dirty.allSeries[this.name+this.index]=this)}e.compose=function(e){h(r,"A11y.NDA")&&(a(e,"addPoint",t),a(e,"updatedData",i))}}(g||(g={})),g}),i(t,"Accessibility/ProxyElement.js",[t["Core/Globals.js"],t["Core/Utilities.js"],t["Accessibility/Utils/EventProvider.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t,i,s,n){let{doc:o}=e,{attr:r,css:a,merge:l}=t,{fireEventOnWrappedOrUnwrappedElement:h}=s,{cloneMouseEvent:c,cloneTouchEvent:d,getFakeMouseEvent:u,removeElement:p}=n;return class{constructor(e,t,s="button",n,r){this.chart=e,this.target=t,this.eventProvider=new i;let a=this.innerElement=o.createElement(s),l=this.element=n?o.createElement(n):a;e.styledMode||this.hideElementVisually(a),n&&("li"!==n||e.styledMode||(l.style.listStyle="none"),l.appendChild(a),this.element=l),this.updateTarget(t,r)}click(){let e=this.getTargetPosition();e.x+=e.width/2,e.y+=e.height/2;let t=u("click",e);h(this.target.click,t)}updateTarget(e,t){this.target=e,this.updateCSSClassName();let i=t||{};
23510Object.keys(i).forEach(e=>{null===i[e]&&delete i[e]});let s=this.getTargetAttr(e.click,"aria-label");r(this.innerElement,l(s?{"aria-label":s}:{},i)),this.eventProvider.removeAddedEvents(),this.addProxyEventsToElement(this.innerElement,e.click),this.refreshPosition()}refreshPosition(){let e=this.getTargetPosition();a(this.innerElement,{width:(e.width||1)+"px",height:(e.height||1)+"px",left:(Math.round(e.x)||0)+"px",top:(Math.round(e.y)||0)+"px"})}remove(){this.eventProvider.removeAddedEvents(),p(this.element)}updateCSSClassName(){let e=e=>e.indexOf("highcharts-no-tooltip")>-1,t=this.chart.legend,i=t.group&&t.group.div,s=e(i&&i.className||""),n=e(this.getTargetAttr(this.target.click,"class")||"");this.innerElement.className=s||n?"highcharts-a11y-proxy-element highcharts-no-tooltip":"highcharts-a11y-proxy-element"}addProxyEventsToElement(e,t){["click","touchstart","touchend","touchcancel","touchmove","mouseover","mouseenter","mouseleave","mouseout"].forEach(i=>{let s=0===i.indexOf("touch");this.eventProvider.addEvent(e,i,e=>{let i=s?d(e):c(e);t&&h(t,i),e.stopPropagation(),s||e.preventDefault()},{passive:!1})})}hideElementVisually(e){a(e,{borderWidth:0,backgroundColor:"transparent",cursor:"pointer",outline:"none",opacity:.001,filter:"alpha(opacity=1)",zIndex:999,overflow:"hidden",padding:0,margin:0,display:"block",position:"absolute","-ms-filter":"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)"})}getTargetPosition(){let e=this.target.click,t=e.element?e.element:e,i=this.target.visual||t,s=this.chart.renderTo,n=this.chart.pointer;if(s&&i?.getBoundingClientRect&&n){let e=i.getBoundingClientRect(),t=n.getChartPosition();return{x:(e.left-t.left)/t.scaleX,y:(e.top-t.top)/t.scaleY,width:e.right/t.scaleX-e.left/t.scaleX,height:e.bottom/t.scaleY-e.top/t.scaleY}}return{x:0,y:0,width:1,height:1}}getTargetAttr(e,t){return e.element?e.element.getAttribute(t):e.getAttribute(t)}}}),i(t,"Accessibility/ProxyProvider.js",[t["Core/Globals.js"],t["Core/Utilities.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/DOMElementProvider.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Accessibility/ProxyElement.js"]],function(e,t,i,s,n,o){let{doc:r}=e,{attr:a,css:l}=t,{unhideChartElementFromAT:h}=i,{removeChildNodes:c}=n;return class{constructor(e){this.chart=e,this.domElementProvider=new s,this.groups={},this.groupOrder=[],this.beforeChartProxyPosContainer=this.createProxyPosContainer("before"),this.afterChartProxyPosContainer=this.createProxyPosContainer("after"),this.update()}addProxyElement(e,t,i="button",s){let n=this.groups[e];if(!n)throw Error("ProxyProvider.addProxyElement: Invalid group key "+e);let r="ul"===n.type||"ol"===n.type?"li":void 0,a=new o(this.chart,t,i,r,s);return n.proxyContainerElement.appendChild(a.element),n.proxyElements.push(a),a}addGroup(e,t="div",i){let s;let n=this.groups[e];if(n)return n.groupElement;let o=this.domElementProvider.createElement(t);return i&&i.role&&"div"!==t?(s=this.domElementProvider.createElement("div")).appendChild(o):s=o,s.className="highcharts-a11y-proxy-group highcharts-a11y-proxy-group-"+e.replace(/\W/g,"-"),this.groups[e]={proxyContainerElement:o,groupElement:s,type:t,proxyElements:[]},a(s,i||{}),"ul"===t&&o.setAttribute("role","list"),this.afterChartProxyPosContainer.appendChild(s),this.updateGroupOrder(this.groupOrder),s}updateGroupAttrs(e,t){let i=this.groups[e];if(!i)throw Error("ProxyProvider.updateGroupAttrs: Invalid group key "+e);a(i.groupElement,t)}updateGroupOrder(e){if(this.groupOrder=e.slice(),this.isDOMOrderGroupOrder())return;let t=e.indexOf("series"),i=t>-1?e.slice(0,t):e,s=t>-1?e.slice(t+1):[],n=r.activeElement;["before","after"].forEach(e=>{let t=this["before"===e?"beforeChartProxyPosContainer":"afterChartProxyPosContainer"];
23510c(t),("before"===e?i:s).forEach(e=>{let i=this.groups[e];i&&t.appendChild(i.groupElement)})}),(this.beforeChartProxyPosContainer.contains(n)||this.afterChartProxyPosContainer.contains(n))&&n&&n.focus&&n.focus()}clearGroup(e){let t=this.groups[e];if(!t)throw Error("ProxyProvider.clearGroup: Invalid group key "+e);c(t.proxyContainerElement)}removeGroup(e){let t=this.groups[e];t&&(this.domElementProvider.removeElement(t.groupElement),t.groupElement!==t.proxyContainerElement&&this.domElementProvider.removeElement(t.proxyContainerElement),delete this.groups[e])}update(){this.updatePosContainerPositions(),this.updateGroupOrder(this.groupOrder),this.updateProxyElementPositions()}updateProxyElementPositions(){Object.keys(this.groups).forEach(this.updateGroupProxyElementPositions.bind(this))}updateGroupProxyElementPositions(e){let t=this.groups[e];t&&t.proxyElements.forEach(e=>e.refreshPosition())}destroy(){this.domElementProvider.destroyCreatedElements()}createProxyPosContainer(e){let t=this.domElementProvider.createElement("div");return t.setAttribute("aria-hidden","false"),t.className="highcharts-a11y-proxy-container"+(e?"-"+e:""),l(t,{top:"0",left:"0"}),this.chart.styledMode||(t.style.whiteSpace="nowrap",t.style.position="absolute"),t}getCurrentGroupOrderInDOM(){let e=e=>{let t=Object.keys(this.groups),i=t.length;for(;i--;){let s=t[i],n=this.groups[s];if(n&&e===n.groupElement)return s}},t=t=>{let i=[],s=t.children;for(let t=0;t<s.length;++t){let n=e(s[t]);n&&i.push(n)}return i},i=t(this.beforeChartProxyPosContainer),s=t(this.afterChartProxyPosContainer);return i.push("series"),i.concat(s)}isDOMOrderGroupOrder(){let e=this.getCurrentGroupOrderInDOM(),t=this.groupOrder.filter(e=>"series"===e||!!this.groups[e]),i=e.length;if(i!==t.length)return!1;for(;i--;)if(e[i]!==t[i])return!1;return!0}updatePosContainerPositions(){let e=this.chart;if(e.renderer.forExport)return;let t=e.renderer.box;e.container.insertBefore(this.afterChartProxyPosContainer,t.nextSibling),e.container.insertBefore(this.beforeChartProxyPosContainer,t),h(this.chart,this.afterChartProxyPosContainer),h(this.chart,this.beforeChartProxyPosContainer)}}}),i(t,"Accessibility/Components/RangeSelectorComponent.js",[t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/Announcer.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{unhideChartElementFromAT:o,getAxisRangeDescription:r}=i,{addEvent:a,attr:l}=n;class h extends e{init(){let e=this.chart;this.announcer=new t(e,"polite")}onChartUpdate(){let e=this.chart,t=this,i=e.rangeSelector;i&&(this.updateSelectorVisibility(),this.setDropdownAttrs(),i.buttons&&i.buttons.length&&i.buttons.forEach(e=>{t.setRangeButtonAttrs(e)}),i.maxInput&&i.minInput&&["minInput","maxInput"].forEach(function(s,n){let r=i[s];r&&(o(e,r),t.setRangeInputAttrs(r,"accessibility.rangeSelector."+(n?"max":"min")+"InputLabel"))}))}updateSelectorVisibility(){let e=this.chart,t=e.rangeSelector,i=t&&t.dropdown,s=t&&t.buttons||[],n=e=>e.setAttribute("aria-hidden",!0);t&&t.hasVisibleDropdown&&i?(o(e,i),s.forEach(e=>
23510n(e.element))):(i&&n(i),s.forEach(t=>o(e,t.element)))}setDropdownAttrs(){let e=this.chart,t=e.rangeSelector&&e.rangeSelector.dropdown;if(t){let i=e.langFormat("accessibility.rangeSelector.dropdownLabel",{rangeTitle:e.options.lang.rangeSelectorZoom});t.setAttribute("aria-label",i),t.setAttribute("tabindex",-1)}}setRangeButtonAttrs(e){l(e.element,{tabindex:-1,role:"button"})}setRangeInputAttrs(e,t){let i=this.chart;l(e,{tabindex:-1,"aria-label":i.langFormat(t,{chart:i})})}onButtonNavKbdArrowKey(e,t){let i=e.response,s=this.keyCodes,n=this.chart,o=n.options.accessibility.keyboardNavigation.wrapAround,r=t===s.left||t===s.up?-1:1;return n.highlightRangeSelectorButton(n.highlightedRangeSelectorItemIx+r)?i.success:o?(e.init(r),i.success):i[r>0?"next":"prev"]}onButtonNavKbdClick(e){let t=e.response,i=this.chart;return 3!==i.oldRangeSelectorItemState&&this.fakeClickEvent(i.rangeSelector.buttons[i.highlightedRangeSelectorItemIx].element),t.success}onAfterBtnClick(){let e=this.chart,t=r(e.xAxis[0]),i=e.langFormat("accessibility.rangeSelector.clickButtonAnnouncement",{chart:e,axisRangeDescription:t});i&&this.announcer.announce(i)}onInputKbdMove(e){let t=this.chart,i=t.rangeSelector,s=t.highlightedInputRangeIx=(t.highlightedInputRangeIx||0)+e;if(s>1||s<0){if(t.accessibility)return t.accessibility.keyboardNavigation.exiting=!0,t.accessibility.keyboardNavigation.tabindexContainer.focus(),t.accessibility.keyboardNavigation.move(e)}else if(i){let e=i[s?"maxDateBox":"minDateBox"],n=i[s?"maxInput":"minInput"];e&&n&&t.setFocusToElement(e,n)}return!0}onInputNavInit(e){let t=this,i=this.chart,s=e>0?0:1,n=i.rangeSelector,o=n&&n[s?"maxDateBox":"minDateBox"],r=n&&n.minInput,l=n&&n.maxInput;if(i.highlightedInputRangeIx=s,o&&r&&l){i.setFocusToElement(o,s?l:r),this.removeInputKeydownHandler&&this.removeInputKeydownHandler();let e=e=>{(e.which||e.keyCode)===this.keyCodes.tab&&t.onInputKbdMove(e.shiftKey?-1:1)&&(e.preventDefault(),e.stopPropagation())},n=a(r,"keydown",e),h=a(l,"keydown",e);this.removeInputKeydownHandler=()=>{n(),h()}}}onInputNavTerminate(){let e=this.chart.rangeSelector||{};e.maxInput&&e.hideInput("max"),e.minInput&&e.hideInput("min"),this.removeInputKeydownHandler&&(this.removeInputKeydownHandler(),delete this.removeInputKeydownHandler)}initDropdownNav(){let e=this.chart,t=e.rangeSelector,i=t&&t.dropdown;t&&i&&(e.setFocusToElement(t.buttonGroup,i),this.removeDropdownKeydownHandler&&this.removeDropdownKeydownHandler(),this.removeDropdownKeydownHandler=a(i,"keydown",t=>{let i=(t.which||t.keyCode)===this.keyCodes.tab,s=e.accessibility;i&&(t.preventDefault(),t.stopPropagation(),s&&(s.keyboardNavigation.tabindexContainer.focus(),s.keyboardNavigation.move(t.shiftKey?-1:1)))}))}getRangeSelectorButtonNavigation(){let e=this.chart,t=this.keyCodes,i=this;return new s(e,{keyCodeMap:[[[t.left,t.right,t.up,t.down],function(e){return i.onButtonNavKbdArrowKey(this,e)}],[[t.enter,t.space],function(){return i.onButtonNavKbdClick(this)}]],validate:function(){return!!(e.rangeSelector&&e.rangeSelector.buttons&&e.rangeSelector.buttons.length)},init:function(t){let s=e.rangeSelector;if(s&&s.hasVisibleDropdown)i.initDropdownNav();else if(s){let i=s.buttons.length-1;e.highlightRangeSelectorButton(t>0?0:i)}},terminate:function(){i.removeDropdownKeydownHandler&&(i.removeDropdownKeydownHandler(),delete i.removeDropdownKeydownHandler)}})}getRangeSelectorInputNavigation(){let e=this.chart,t=this;return new s(e,{keyCodeMap:[],validate:function(){return!!(e.rangeSelector&&e.rangeSelector.inputGroup&&"hidden"!==e.rangeSelector.inputGroup.element.style.visibility&&!1!==e.options.rangeSelector.inputEnabled&&e.rangeSelector.minInput&&e.rangeSelector.maxInput)},init:function(e){t.onInputNavInit(e)},terminate:function(){t.onInputNavTerminate()}})}getKeyboardNavigation(){return[this.getRangeSelectorButtonNavigation(),this.getRangeSelectorInputNavigation()]}destroy(){this.removeDropdownKeydownHandler&&this.removeDropdownKeydownHandler(),this.removeInputKeydownHandler&&this.removeInputKeydownHandler(),this.announcer&&this.announcer.destroy()}}return function(e){function t(e){let t=this.rangeSelector&&this.rangeSelector.buttons||[],i=this.highlightedRangeSelectorItemIx,s=this.rangeSelector&&this.rangeSelector.selected;return void 0!==i&&t[i]&&i!==s&&t[i].setState(this.oldRangeSelectorItemState||0),this.highlightedRangeSelectorItemIx=e,!!t[e]&&(this.setFocusToElement(t[e].box,t[e].element),e!==s&&(this.oldRangeSelectorItemState=t[e].state,t[e].setState(1)),!0)}function i(){let e=this.chart.accessibility;if(e&&e.components.rangeSelector)return e.components.rangeSelector.onAfterBtnClick()}e.compose=function(e,s){let n=e.prototype;n.highlightRangeSelectorButton||(n.highlightRangeSelectorButton=t,a(s,"afterBtnClick",i))}}(h||(h={})),h}),i(t,"Accessibility/Components/SeriesComponent/ForcedMarkers.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){var i;
23510let{composed:s}=e,{addEvent:n,merge:o,pushUnique:r}=t;return function(e){function t(e){o(!0,e,{marker:{enabled:!0,states:{normal:{opacity:0}}}})}function i(e){return e.marker.states&&e.marker.states.normal&&e.marker.states.normal.opacity}function a(e){return!!(e._hasPointMarkers&&e.points&&e.points.length)}function l(){this.chart.styledMode&&(this.markerGroup&&this.markerGroup[this.a11yMarkersForced?"addClass":"removeClass"]("highcharts-a11y-markers-hidden"),a(this)&&this.points.forEach(e=>{e.graphic&&(e.graphic[e.hasForcedA11yMarker?"addClass":"removeClass"]("highcharts-a11y-marker-hidden"),e.graphic[!1===e.hasForcedA11yMarker?"addClass":"removeClass"]("highcharts-a11y-marker-visible"))}))}function h(e){this.resetA11yMarkerOptions=o(e.options.marker||{},this.userOptions.marker||{})}function c(){let e=this.options;(function(e){let t=e.chart.options.accessibility.enabled,i=!1!==(e.options.accessibility&&e.options.accessibility.enabled);return t&&i&&function(e){let t=e.chart.options.accessibility;return e.points.length<t.series.pointDescriptionEnabledThreshold||!1===t.series.pointDescriptionEnabledThreshold}(e)})(this)?(e.marker&&!1===e.marker.enabled&&(this.a11yMarkersForced=!0,t(this.options)),a(this)&&function(e){let s=e.points.length;for(;s--;){let n=e.points[s],r=n.options,a=n.hasForcedA11yMarker;if(delete n.hasForcedA11yMarker,r.marker){let e=a&&0===i(r);r.marker.enabled&&!e?(o(!0,r.marker,{states:{normal:{opacity:i(r)||1}}}),n.hasForcedA11yMarker=!1):!1===r.marker.enabled&&(t(r),n.hasForcedA11yMarker=!0)}}}(this)):this.a11yMarkersForced&&(delete this.a11yMarkersForced,function(e){let t=e.resetA11yMarkerOptions;if(t){let i=t.states&&t.states.normal&&t.states.normal.opacity;e.userOptions&&e.userOptions.marker&&(e.userOptions.marker.enabled=!0),e.update({marker:{enabled:t.enabled,states:{normal:{opacity:i}}}})}}(this),delete this.resetA11yMarkerOptions)}function d(){this.boosted&&this.a11yMarkersForced&&(o(!0,this.options,{marker:{enabled:!1}}),delete this.a11yMarkersForced)}e.compose=function(e){r(s,"A11y.FM")&&(n(e,"afterSetOptions",h),n(e,"render",c),n(e,"afterRender",l),n(e,"renderCanvas",d))}}(i||(i={})),i}),i(t,"Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js",[t["Core/Series/Point.js"],t["Core/Series/Series.js"],t["Core/Series/SeriesRegistry.js"],t["Core/Globals.js"],t["Core/Utilities.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Accessibility/Utils/EventProvider.js"],t["Accessibility/Utils/ChartUtilities.js"]],function(e,t,i,s,n,o,r,a){let{seriesTypes:l}=i,{doc:h}=s,{defined:c,fireEvent:d}=n,{getPointFromXY:u,getSeriesFromName:p,scrollAxisToPoint:g}=a;function m(e){let t=e.index,i=e.series.points,s=i.length;if(i[t]===e)return t;for(;s--;)if(i[s]===e)return s}function b(e){let t=e.chart.options.accessibility.keyboardNavigation.seriesNavigation,i=e.options.accessibility||{},s=i.keyboardNavigation;return s&&!1===s.enabled||!1===i.enabled||!1===e.options.enableMouseTracking||!e.visible||t.pointNavigationEnabledThreshold&&+t.pointNavigationEnabledThreshold<=e.points.length}function y(e){let t=e.series.chart.options.accessibility,i=e.options.accessibility&&!1===e.options.accessibility.enabled;return e.isNull&&t.keyboardNavigation.seriesNavigation.skipNullPoints||!1===e.visible||!1===e.isInside||i||b(e.series)}function f(e){let t=e.series||[],i=t.length;for(let e=0;e<i;++e)if(!b(t[e])){let i=function(e){let t=e.points||[],i=t.length;for(let e=0;e<i;++e)if(!y(t[e]))return t[e];return null}(t[e]);if(i)return i}return null}function x(e){let t=e.series.length,i=!1;for(;t--&&(e.highlightedPoint=e.series[t].points[e.series[t].points.length-1],!(i=e.series[t].highlightNextValidPoint())););return i}function v(e){delete e.highlightedPoint;let t=f(e);return!!t&&t.highlight()}class A{constructor(e,t){this.keyCodes=t,this.chart=e}init(){let i=this,s=this.chart,n=this.eventProvider=new r;n.addEvent(t,"destroy",function(){return i.onSeriesDestroy(this)}),n.addEvent(s,"afterApplyDrilldown",function(){!function(e){let t=f(e);t&&t.highlight(!1)}(this)}),n.addEvent(s,"drilldown",function(e){let t=e.point,s=t.series;i.lastDrilledDownPoint={x:t.x,y:t.y,seriesName:s?s.name:""}}),n.addEvent(s,"drillupall",function(){setTimeout(function(){i.onDrillupAll()},10)}),n.addEvent(e,"afterSetState",function(){let e=this.graphic&&this.graphic.element,t=h.activeElement,i=t&&t.getAttribute("class"),n=i&&i.indexOf("highcharts-a11y-proxy-element")>-1;s.highlightedPoint===this&&t!==e&&!n&&e&&e.focus&&e.focus()})}onDrillupAll(){let e;let t=this.lastDrilledDownPoint,i=this.chart,s=t&&p(i,t.seriesName);t&&s&&c(t.x)&&c(t.y)&&(e=u(s,t.x,t.y)),e=e||f(i),i.container&&i.container.focus(),e&&e.highlight&&e.highlight(!1)}getKeyboardNavigationHandler(){let e=this,t=this.keyCodes,i=this.chart,s=i.inverted;return new o(i,{keyCodeMap:[[s?[t.up,t.down]:[t.left,t.right],function(t){return e.onKbdSideways(this,t)}],[s?[t.left,t.right]:[t.up,t.down],function(t){return e.onKbdVertical(this,t)}],[[t.enter,t.space],function(e,t){let s=i.highlightedPoint;if(s){let{plotLeft:e,plotTop:i}=this.chart,{plotX:n=0,plotY:o=0}=s;t={...t,chartX:e+n,chartY:i+o,point:s,target:s.graphic?.element||t.target},d(s.series,"click",t),s.firePointEvent("click",t)}return this.response.success}],[[t.home],function(){return v(i),this.response.success}],[[t.end],function(){return x(i),this.response.success}],[[t.pageDown,t.pageUp],function(e){return i.highlightAdjacentSeries(e===t.pageDown),this.response.success}]],init:function(){return e.onHandlerInit(this)},validate:function(){return!!f(i)},terminate:function(){return e.onHandlerTerminate()}})}onKbdSideways(e,t){let i=this.keyCodes,s=t===i.right||t===i.down;return this.attemptHighlightAdjacentPoint(e,s)}onHandlerInit(e){let t=this.chart;return t.options.accessibility.keyboardNavigation.seriesNavigation.rememberPointFocus&&t.highlightedPoint?t.highlightedPoint.highlight():v(t),e.response.success}onKbdVertical(e,t){let i=this.chart,s=this.keyCodes,n=t===s.down||t===s.right,o=i.options.accessibility.keyboardNavigation.seriesNavigation;if(o.mode&&"serialize"===o.mode)return this.attemptHighlightAdjacentPoint(e,n);let r=i.highlightedPoint&&i.highlightedPoint.series.keyboardMoveVertical?"highlightAdjacentPointVertical":"highlightAdjacentSeries";return i[r](n),e.response.success}onHandlerTerminate(){let e=this.chart,t=e.options.accessibility.keyboardNavigation;e.tooltip&&e.tooltip.hide(0);let i=e.highlightedPoint&&e.highlightedPoint.series;i&&i.onMouseOut&&i.onMouseOut(),e.highlightedPoint&&e.highlightedPoint.onMouseOut&&e.highlightedPoint.onMouseOut(),t.seriesNavigation.rememberPointFocus||delete e.highlightedPoint}attemptHighlightAdjacentPoint(e,t){let i=this.chart,s=i.options.accessibility.keyboardNavigation.wrapAround;return i.highlightAdjacentPoint(t)?e.response.success:s&&(t?v(i):x(i))?e.response.success:e.response[t?"next":"prev"]}onSeriesDestroy(e){let t=this.chart;t.highlightedPoint&&t.highlightedPoint.series===e&&(delete t.highlightedPoint,t.focusElement&&t.focusElement.removeFocusBorder())}destroy(){this.eventProvider.removeAddedEvents()}}return function(e){function t(e){let t,i;let s=this.series,n=this.highlightedPoint,o=n&&m(n)||0,r=n&&n.series.points||[],a=this.series&&this.series[this.series.length-1],l=a&&a.points&&a.points[a.points.length-1];if(!s[0]||!s[0].points)return!1;if(n){if(t=s[n.series.index+(e?1:-1)],(i=r[o+(e?1:-1)])||!t||(i=t.points[e?0:t.points.length-1]),!i)return!1}else i=e?s[0].points[0]:l;return y(i)?(b(t=i.series)?this.highlightedPoint=e?t.points[t.points.length-1]:t.points[0]:this.highlightedPoint=i,this.highlightAdjacentPoint(e)):i.highlight()}function i(e){let t=this.highlightedPoint,i=1/0,s;
23510return!!(c(t.plotX)&&c(t.plotY))&&(this.series.forEach(n=>{b(n)||n.points.forEach(o=>{if(!c(o.plotY)||!c(o.plotX)||o===t)return;let r=o.plotY-t.plotY,a=Math.abs(o.plotX-t.plotX),l=Math.abs(r)*Math.abs(r)+a*a*4;n.yAxis&&n.yAxis.reversed&&(r*=-1),!(r<=0&&e||r>=0&&!e||l<5||y(o))&&l<i&&(i=l,s=o)})}),!!s&&s.highlight())}function s(e){let t,i,s;let n=this.highlightedPoint,o=this.series&&this.series[this.series.length-1],r=o&&o.points&&o.points[o.points.length-1];return this.highlightedPoint?!!((t=this.series[n.series.index+(e?-1:1)])&&(i=function(e,t,i,s){let n=1/0,o,r,a,l=t.points.length,h=e=>!(c(e.plotX)&&c(e.plotY));if(!h(e)){for(;l--;)!h(o=t.points[l])&&(a=(e.plotX-o.plotX)*(e.plotX-o.plotX)*4+(e.plotY-o.plotY)*(e.plotY-o.plotY)*1)<n&&(n=a,r=l);return c(r)?t.points[r]:void 0}}(n,t,0)))&&(b(t)?(i.highlight(),s=this.highlightAdjacentSeries(e))?s:(n.highlight(),!1):(i.highlight(),i.series.highlightNextValidPoint())):(t=e?this.series&&this.series[0]:o,!!(i=e?t&&t.points&&t.points[0]:r)&&i.highlight())}function n(e=!0){let t=this.series.chart,i=t.tooltip?.label?.element;!this.isNull&&e?this.onMouseOver():t.tooltip&&t.tooltip.hide(0),g(this),this.graphic&&(t.setFocusToElement(this.graphic),!e&&t.focusElement&&t.focusElement.removeFocusBorder()),t.highlightedPoint=this;let s=i?.getBoundingClientRect().top;if(i&&s&&s<0){let e=window.scrollY;window.scrollTo({behavior:"smooth",top:e+s})}return this}function o(){let e=this.chart.highlightedPoint,t=(e&&e.series)===this?m(e):0,i=this.points,s=i.length;if(i&&s){for(let e=t;e<s;++e)if(!y(i[e]))return i[e].highlight();for(let e=t;e>=0;--e)if(!y(i[e]))return i[e].highlight()}return!1}e.compose=function(e,r,a){let h=e.prototype,c=r.prototype,d=a.prototype;h.highlightAdjacentPoint||(h.highlightAdjacentPoint=t,h.highlightAdjacentPointVertical=i,h.highlightAdjacentSeries=s,c.highlight=n,d.keyboardMoveVertical=!0,["column","gantt","pie"].forEach(e=>{l[e]&&(l[e].prototype.keyboardMoveVertical=!1)}),d.highlightNextValidPoint=o)}}(A||(A={})),A}),i(t,"Accessibility/Components/SeriesComponent/SeriesComponent.js",[t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Components/SeriesComponent/ForcedMarkers.js"],t["Accessibility/Components/SeriesComponent/NewDataAnnouncer.js"],t["Accessibility/Components/SeriesComponent/SeriesDescriber.js"],t["Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js"]],function(e,t,i,s,n,o){let{hideSeriesFromAT:r}=t,{describeSeries:a}=n;return class extends e{static compose(e,t,n){s.compose(n),i.compose(n),o.compose(e,t,n)}init(){this.newDataAnnouncer=new s(this.chart),this.newDataAnnouncer.init(),this.keyboardNavigation=new o(this.chart,this.keyCodes),this.keyboardNavigation.init(),this.hideTooltipFromATWhenShown(),this.hideSeriesLabelsFromATWhenShown()}hideTooltipFromATWhenShown(){let e=this;this.chart.tooltip&&this.addEvent(this.chart.tooltip.constructor,"refresh",function(){this.chart===e.chart&&this.label&&this.label.element&&this.label.element.setAttribute("aria-hidden",!0)})}hideSeriesLabelsFromATWhenShown(){this.addEvent(this.chart,"afterDrawSeriesLabels",function(){this.series.forEach(function(e){e.labelBySeries&&e.labelBySeries.attr("aria-hidden",!0)})})}onChartRender(){this.chart.series.forEach(function(e){!1!==(e.options.accessibility&&e.options.accessibility.enabled)&&e.visible&&0!==e.getPointsCollection().length?a(e):r(e)})}getKeyboardNavigation(){return this.keyboardNavigation.getKeyboardNavigationHandler()}destroy(){this.newDataAnnouncer.destroy(),this.keyboardNavigation.destroy()}}}),i(t,"Accessibility/Components/ZoomComponent.js",[t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{unhideChartElementFromAT:o}=t,{getFakeMouseEvent:r}=i,{attr:a,pick:l}=n;return class extends e{constructor(){super(...arguments),this.focusedMapNavButtonIx=-1}init(){let e=this,t=this.chart;this.proxyProvider.addGroup("zoom","div"),["afterShowResetZoom","afterApplyDrilldown","drillupall"].forEach(i=>
23510{e.addEvent(t,i,function(){e.updateProxyOverlays()})})}onChartUpdate(){let e=this.chart,t=this;e.mapNavigation&&e.mapNavigation.navButtons.forEach((i,s)=>{o(e,i.element),t.setMapNavButtonAttrs(i.element,"accessibility.zoom.mapZoom"+(s?"Out":"In"))})}setMapNavButtonAttrs(e,t){let i=this.chart;a(e,{tabindex:-1,role:"button","aria-label":i.langFormat(t,{chart:i})})}onChartRender(){this.updateProxyOverlays()}updateProxyOverlays(){let e=this.chart;if(this.proxyProvider.clearGroup("zoom"),e.resetZoomButton&&this.createZoomProxyButton(e.resetZoomButton,"resetZoomProxyButton",e.langFormat("accessibility.zoom.resetZoomButton",{chart:e})),e.drillUpButton&&e.breadcrumbs&&e.breadcrumbs.list){let t=e.breadcrumbs.list[e.breadcrumbs.list.length-1];this.createZoomProxyButton(e.drillUpButton,"drillUpProxyButton",e.langFormat("accessibility.drillUpButton",{chart:e,buttonText:e.breadcrumbs.getButtonText(t)}))}}createZoomProxyButton(e,t,i){this[t]=this.proxyProvider.addProxyElement("zoom",{click:e},"button",{"aria-label":i,tabindex:-1})}getMapZoomNavigation(){let e=this.keyCodes,t=this.chart,i=this;return new s(t,{keyCodeMap:[[[e.up,e.down,e.left,e.right],function(e){return i.onMapKbdArrow(this,e)}],[[e.tab],function(e,t){return i.onMapKbdTab(this,t)}],[[e.space,e.enter],function(){return i.onMapKbdClick(this)}]],validate:function(){return!!(t.mapView&&t.mapNavigation&&t.mapNavigation.navButtons.length)},init:function(e){return i.onMapNavInit(e)}})}onMapKbdArrow(e,t){let i=this.chart,s=this.keyCodes,n=i.container,o=t===s.up||t===s.down,a=t===s.left||t===s.up?1:-1,l=(o?i.plotHeight:i.plotWidth)/10*a,h=10*Math.random(),c={x:n.offsetLeft+i.plotLeft+i.plotWidth/2+h,y:n.offsetTop+i.plotTop+i.plotHeight/2+h},d=o?{x:c.x,y:c.y+l}:{x:c.x+l,y:c.y};return[r("mousedown",c),r("mousemove",d),r("mouseup",d)].forEach(e=>n.dispatchEvent(e)),e.response.success}onMapKbdTab(e,t){let i=this.chart,s=e.response,n=t.shiftKey,o=n&&!this.focusedMapNavButtonIx||!n&&this.focusedMapNavButtonIx;if(i.mapNavigation.navButtons[this.focusedMapNavButtonIx].setState(0),o)return i.mapView&&i.mapView.zoomBy(),s[n?"prev":"next"];this.focusedMapNavButtonIx+=n?-1:1;let r=i.mapNavigation.navButtons[this.focusedMapNavButtonIx];return i.setFocusToElement(r.box,r.element),r.setState(2),s.success}onMapKbdClick(e){let t=this.chart.mapNavigation.navButtons[this.focusedMapNavButtonIx].element;return this.fakeClickEvent(t),e.response.success}onMapNavInit(e){let t=this.chart,i=t.mapNavigation.navButtons[0],s=t.mapNavigation.navButtons[1],n=e>0?i:s;t.setFocusToElement(n.box,n.element),n.setState(2),this.focusedMapNavButtonIx=e>0?0:1}simpleButtonNavigation(e,t,i){let n=this.keyCodes,o=this,r=this.chart;return new s(r,{keyCodeMap:[[[n.tab,n.up,n.down,n.left,n.right],function(e,t){let i=e===n.tab&&t.shiftKey||e===n.left||e===n.up;return this.response[i?"prev":"next"]}],[[n.space,n.enter],function(){return l(i(this,r),this.response.success)}]],validate:function(){return r[e]&&r[e].box&&o[t].innerElement},init:function(){r.setFocusToElement(r[e].box,o[t].innerElement)}})}getKeyboardNavigation(){return[this.simpleButtonNavigation("resetZoomButton","resetZoomProxyButton",function(e,t){t.zoomOut()}),this.simpleButtonNavigation("drillUpButton","drillUpProxyButton",function(e,t){return t.drillUp(),e.response.prev}),this.getMapZoomNavigation()]}}}),i(t,"Accessibility/HighContrastMode.js",[t["Core/Globals.js"]],function(e){let{doc:t,isMS:i,win:s}=e;return{isHighContrastModeActive:function(){let e=/(Edg)/.test(s.navigator.userAgent);if(s.matchMedia&&e)return s.matchMedia("(-ms-high-contrast: active)").matches;if(i&&s.getComputedStyle){let e=t.createElement("div");e.style.backgroundImage="url(data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)",t.body.appendChild(e);let i=(e.currentStyle||s.getComputedStyle(e)).backgroundImage;return t.body.removeChild(e),"none"===i}return s.matchMedia&&s.matchMedia("(forced-colors: active)").matches},setHighContrastTheme:function(e){e.highContrastModeActive=!0;let t=e.options.accessibility.highContrastTheme;e.update(t,!1);let i=t.colors?.length>1;
23510e.series.forEach(function(e){let s=t.plotOptions[e.type]||{},n=i&&void 0!==e.colorIndex?t.colors[e.colorIndex]:s.color||"window",o={color:s.color||"windowText",colors:i?t.colors:[s.color||"windowText"],borderColor:s.borderColor||"window",fillColor:n};e.update(o,!1),e.points&&e.points.forEach(function(e){e.options&&e.options.color&&e.update({color:s.color||"windowText",borderColor:s.borderColor||"window"},!1)})}),e.redraw()}}}),i(t,"Accessibility/HighContrastTheme.js",[],function(){return{chart:{backgroundColor:"window"},title:{style:{color:"windowText"}},subtitle:{style:{color:"windowText"}},colorAxis:{minColor:"windowText",maxColor:"windowText",stops:[],dataClasses:[]},colors:["windowText"],xAxis:{gridLineColor:"windowText",labels:{style:{color:"windowText"}},lineColor:"windowText",minorGridLineColor:"windowText",tickColor:"windowText",title:{style:{color:"windowText"}}},yAxis:{gridLineColor:"windowText",labels:{style:{color:"windowText"}},lineColor:"windowText",minorGridLineColor:"windowText",tickColor:"windowText",title:{style:{color:"windowText"}}},tooltip:{backgroundColor:"window",borderColor:"windowText",style:{color:"windowText"}},plotOptions:{series:{lineColor:"windowText",fillColor:"window",borderColor:"windowText",edgeColor:"windowText",borderWidth:1,dataLabels:{connectorColor:"windowText",color:"windowText",style:{color:"windowText",textOutline:"none"}},marker:{lineColor:"windowText",fillColor:"windowText"}},pie:{color:"window",colors:["window"],borderColor:"windowText",borderWidth:1},boxplot:{fillColor:"window"},candlestick:{lineColor:"windowText",fillColor:"window"},errorbar:{fillColor:"window"}},legend:{backgroundColor:"window",itemStyle:{color:"windowText"},itemHoverStyle:{color:"windowText"},itemHiddenStyle:{color:"#555"},title:{style:{color:"windowText"}}},credits:{style:{color:"windowText"}},drilldown:{activeAxisLabelStyle:{color:"windowText"},activeDataLabelStyle:{color:"windowText"}},navigation:{buttonOptions:{symbolStroke:"windowText",theme:{fill:"window"}}},rangeSelector:{buttonTheme:{fill:"window",stroke:"windowText",style:{color:"windowText"},states:{hover:{fill:"window",stroke:"windowText",style:{color:"windowText"}},select:{fill:"#444",stroke:"windowText",style:{color:"windowText"}}}},inputBoxBorderColor:"windowText",inputStyle:{backgroundColor:"window",color:"windowText"},labelStyle:{color:"windowText"}},navigator:{handles:{backgroundColor:"window",borderColor:"windowText"},outlineColor:"windowText",maskFill:"transparent",series:{color:"windowText",lineColor:"windowText"},xAxis:{gridLineColor:"windowText"}},scrollbar:{barBackgroundColor:"#444",barBorderColor:"windowText",buttonArrowColor:"windowText",buttonBackgroundColor:"window",buttonBorderColor:"windowText",rifleColor:"windowText",trackBackgroundColor:"window",trackBorderColor:"windowText"}}}),i(t,"Accessibility/Options/A11yDefaults.js",[],function(){return{accessibility:{enabled:!0,screenReaderSection:{beforeChartFormat:"<{headingTagName}>{chartTitle}</{headingTagName}><div>{typeDescription}</div><div>{chartSubtitle}</div><div>{chartLongdesc}</div><div>{playAsSoundButton}</div><div>{viewTableButton}</div><div>{xAxisDescription}</div><div>{yAxisDescription}</div><div>{annotationsTitle}{annotationsList}</div>",afterChartFormat:"{endOfChartMarker}",axisRangeDateFormat:"%Y-%m-%d %H:%M:%S"},series:{descriptionFormat:"{seriesDescription}{authorDescription}{axisDescription}",describeSingleSeries:!1,pointDescriptionEnabledThreshold:200},point:{valueDescriptionFormat:"{xDescription}{separator}{value}.",describeNull:!0},landmarkVerbosity:"all",linkedDescription:'*[data-highcharts-chart="{index}"] + .highcharts-description',highContrastMode:"auto",keyboardNavigation:{enabled:!0,focusBorder:{enabled:!0,hideBrowserFocusOutline:!0,style:{color:"#334eff",lineWidth:2,borderRadius:3},margin:2},order:["series","zoom","rangeSelector","navigator","legend","chartMenu"],wrapAround:!0,seriesNavigation:{skipNullPoints:!0,pointNavigationEnabledThreshold:!1,rememberPointFocus:!1}},announceNewData:{enabled:!1,minAnnounceInterval:5e3,interruptUser:!1}},legend:{accessibility:{enabled:!0,keyboardNavigation:{enabled:!0}}},exporting:{accessibility:{enabled:!0}},navigator:{accessibility:{enabled:!0}}}}),i(t,"Accessibility/Options/LangDefaults.js",[],function(){return{accessibility:{defaultChartTitle:"Chart",chartContainerLabel:"{title}. Highcharts interactive chart.",svgContainerLabel:"Interactive chart",drillUpButton:"{buttonText}",credits:"Chart credits: {creditsStr}",thousandsSep:",",svgContainerTitle:"",graphicContainerLabel:"",screenReaderSection:{beforeRegionLabel:"",afterRegionLabel:"",annotations:{heading:"Chart annotations summary",descriptionSinglePoint:"{annotationText}. Related to {annotationPoint}",descriptionMultiplePoints:"{annotationText}. Related to {annotationPoint}{#each additionalAnnotationPoints}, also related to {this}{/each}",descriptionNoPoints:"{annotationText}"},endOfChartMarker:"End of interactive chart."},sonification:{playAsSoundButtonText:"Play as sound, {chartTitle}",playAsSoundClickAnnouncement:"Play"},legend:{legendLabelNoTitle:"Toggle series visibility, {chartTitle}",legendLabel:"Chart legend: {legendTitle}",legendItem:"Show {itemName}"}
23510,zoom:{mapZoomIn:"Zoom chart",mapZoomOut:"Zoom out chart",resetZoomButton:"Reset zoom"},rangeSelector:{dropdownLabel:"{rangeTitle}",minInputLabel:"Select start date.",maxInputLabel:"Select end date.",clickButtonAnnouncement:"Viewing {axisRangeDescription}"},navigator:{handleLabel:"{#eq handleIx 0}Start, percent{else}End, percent{/eq}",groupLabel:"Axis zoom",changeAnnouncement:"{axisRangeDescription}"},table:{viewAsDataTableButtonText:"View as data table, {chartTitle}",tableSummary:"Table representation of chart."},announceNewData:{newDataAnnounce:"Updated data for chart {chartTitle}",newSeriesAnnounceSingle:"New data series: {seriesDesc}",newPointAnnounceSingle:"New data point: {pointDesc}",newSeriesAnnounceMultiple:"New data series in chart {chartTitle}: {seriesDesc}",newPointAnnounceMultiple:"New data point in chart {chartTitle}: {pointDesc}"},seriesTypeDescriptions:{boxplot:"Box plot charts are typically used to display groups of statistical data. Each data point in the chart can have up to 5 values: minimum, lower quartile, median, upper quartile, and maximum.",arearange:"Arearange charts are line charts displaying a range between a lower and higher value for each point.",areasplinerange:"These charts are line charts displaying a range between a lower and higher value for each point.",bubble:"Bubble charts are scatter charts where each data point also has a size value.",columnrange:"Columnrange charts are column charts displaying a range between a lower and higher value for each point.",errorbar:"Errorbar series are used to display the variability of the data.",funnel:"Funnel charts are used to display reduction of data in stages.",pyramid:"Pyramid charts consist of a single pyramid with item heights corresponding to each point value.",waterfall:"A waterfall chart is a column chart where each column contributes towards a total end value."},chartTypes:{emptyChart:"Empty chart",mapTypeDescription:"Map of {mapTitle} with {numSeries} data series.",unknownMap:"Map of unspecified region with {numSeries} data series.",combinationChart:"Combination chart with {numSeries} data series.",defaultSingle:"Chart with {numPoints} data {#eq numPoints 1}point{else}points{/eq}.",defaultMultiple:"Chart with {numSeries} data series.",splineSingle:"Line chart with {numPoints} data {#eq numPoints 1}point{else}points{/eq}.",splineMultiple:"Line chart with {numSeries} lines.",lineSingle:"Line chart with {numPoints} data {#eq numPoints 1}point{else}points{/eq}.",lineMultiple:"Line chart with {numSeries} lines.",columnSingle:"Bar chart with {numPoints} {#eq numPoints 1}bar{else}bars{/eq}.",columnMultiple:"Bar chart with {numSeries} data series.",barSingle:"Bar chart with {numPoints} {#eq numPoints 1}bar{else}bars{/eq}.",barMultiple:"Bar chart with {numSeries} data series.",pieSingle:"Pie chart with {numPoints} {#eq numPoints 1}slice{else}slices{/eq}.",pieMultiple:"Pie chart with {numSeries} pies.",scatterSingle:"Scatter chart with {numPoints} {#eq numPoints 1}point{else}points{/eq}.",scatterMultiple:"Scatter chart with {numSeries} data series.",boxplotSingle:"Boxplot with {numPoints} {#eq numPoints 1}box{else}boxes{/eq}.",boxplotMultiple:"Boxplot with {numSeries} data series.",bubbleSingle:"Bubble chart with {numPoints} {#eq numPoints 1}bubbles{else}bubble{/eq}.",bubbleMultiple:"Bubble chart with {numSeries} data series."},axis:{xAxisDescriptionSingular:"The chart has 1 X axis displaying {names[0]}. {ranges[0]}",xAxisDescriptionPlural:"The chart has {numAxes} X axes displaying {#each names}{#unless @first},{/unless}{#if @last} and{/if} {this}{/each}.",yAxisDescriptionSingular:"The chart has 1 Y axis displaying {names[0]}. {ranges[0]}",yAxisDescriptionPlural:"The chart has {numAxes} Y axes displaying {#each names}{#unless @first},{/unless}{#if @last} and{/if} {this}{/each}.",timeRangeDays:"Data range: {range} days.",timeRangeHours:"Data range: {range} hours.",timeRangeMinutes:"Data range: {range} minutes.",timeRangeSeconds:"Data range: {range} seconds.",rangeFromTo:"Data ranges from {rangeFrom} to {rangeTo}.",rangeCategories:"Data range: {numCategories} categories."},exporting:{chartMenuLabel:"Chart menu",menuButtonLabel:"View chart menu, {chartTitle}"},series:{summary:{default:"{series.name}, series {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",defaultCombination:"{series.name}, series {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",line:"{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}
23510.",lineCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",spline:"{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",splineCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",column:"{series.name}, bar series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",columnCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bar series with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",bar:"{series.name}, bar series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",barCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bar series with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",pie:"{series.name}, pie {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}slice{else}slices{/eq}.",pieCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Pie with {series.points.length} {#eq series.points.length 1}slice{else}slices{/eq}.",scatter:"{series.name}, scatter plot {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}point{else}points{/eq}.",scatterCombination:"{series.name}, series {seriesNumber} of {chart.series.length}, scatter plot with {series.points.length} {#eq series.points.length 1}point{else}points{/eq}.",boxplot:"{series.name}, boxplot {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}box{else}boxes{/eq}.",boxplotCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Boxplot with {series.points.length} {#eq series.points.length 1}box{else}boxes{/eq}.",bubble:"{series.name}, bubble series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.",bubbleCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bubble series with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.",map:"{series.name}, map {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}area{else}areas{/eq}.",mapCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Map with {series.points.length} {#eq series.points.length 1}area{else}areas{/eq}.",mapline:"{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",maplineCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",mapbubble:"{series.name}, bubble series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.",mapbubbleCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bubble series with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}."},description:"{description}",xAxisDescription:"X axis, {name}",yAxisDescription:"Y axis, {name}",nullPointValue:"No value",pointAnnotationsDescription:"{#each annotations}Annotation: {this}{/each}"}}}}),i(t,"Accessibility/Options/DeprecatedOptions.js",[t["Core/Utilities.js"]],function(e){let{error:t,pick:i}=e;function s(e,t,s){let n=e,o,r=0;for(;r<t.length-1;++r)n=n[o=t[r]]=i(n[o],{});n[t[t.length-1]]=s}function n(e,i,n,o){function r(e,t){return t.reduce(function(e,t){return e[t]},e)}let a=r(e.options,i),l=r(e.options,n);Object.keys(o).forEach(function(r){let h=a[r];void 0!==h&&(s(l,o[r],h),t(32,!1,e,{[i.join(".")+"."+r]:n.join(".")+"."+o[r].join(".")}))})}return function(e){(function(e){let i=e.options.chart,s=e.options.accessibility||{};["description","typeDescription"].forEach(function(n){i[n]&&(s[n]=i[n],t(32,!1,e,{[`chart.${n}`]:`use accessibility.${n}`}))})}
23510)(e),function(e){e.axes.forEach(function(i){let s=i.options;s&&s.description&&(s.accessibility=s.accessibility||{},s.accessibility.description=s.description,t(32,!1,e,{"axis.description":"use axis.accessibility.description"}))})}(e),e.series&&function(e){let i={description:["accessibility","description"],exposeElementToA11y:["accessibility","exposeAsGroupOnly"],pointDescriptionFormatter:["accessibility","point","descriptionFormatter"],skipKeyboardNavigation:["accessibility","keyboardNavigation","enabled"],"accessibility.pointDescriptionFormatter":["accessibility","point","descriptionFormatter"]};e.series.forEach(function(n){Object.keys(i).forEach(function(o){let r=n.options[o];"accessibility.pointDescriptionFormatter"===o&&(r=n.options.accessibility&&n.options.accessibility.pointDescriptionFormatter),void 0!==r&&(s(n.options,i[o],"skipKeyboardNavigation"===o?!r:r),t(32,!1,e,{[`series.${o}`]:"series."+i[o].join(".")}))})})}(e),n(e,["accessibility"],["accessibility"],{pointDateFormat:["point","dateFormat"],pointDateFormatter:["point","dateFormatter"],pointDescriptionFormatter:["point","descriptionFormatter"],pointDescriptionThreshold:["series","pointDescriptionEnabledThreshold"],pointNavigationThreshold:["keyboardNavigation","seriesNavigation","pointNavigationEnabledThreshold"],pointValueDecimals:["point","valueDecimals"],pointValuePrefix:["point","valuePrefix"],pointValueSuffix:["point","valueSuffix"],screenReaderSectionFormatter:["screenReaderSection","beforeChartFormatter"],describeSingleSeries:["series","describeSingleSeries"],seriesDescriptionFormatter:["series","descriptionFormatter"],onTableAnchorClick:["screenReaderSection","onViewDataTableClick"],axisRangeDateFormat:["screenReaderSection","axisRangeDateFormat"]}),n(e,["accessibility","keyboardNavigation"],["accessibility","keyboardNavigation","seriesNavigation"],{skipNullPoints:["skipNullPoints"],mode:["mode"]}),n(e,["lang","accessibility"],["lang","accessibility"],{legendItem:["legend","legendItem"],legendLabel:["legend","legendLabel"],mapZoomIn:["zoom","mapZoomIn"],mapZoomOut:["zoom","mapZoomOut"],resetZoomButton:["zoom","resetZoomButton"],screenReaderRegionLabel:["screenReaderSection","beforeRegionLabel"],rangeSelectorButton:["rangeSelector","buttonText"],rangeSelectorMaxInput:["rangeSelector","maxInputLabel"],rangeSelectorMinInput:["rangeSelector","minInputLabel"],svgContainerEnd:["screenReaderSection","endOfChartMarker"],viewAsDataTable:["table","viewAsDataTableButtonText"],tableSummary:["table","tableSummary"]})}}),i(t,"Accessibility/Accessibility.js",[t["Core/Defaults.js"],t["Core/Globals.js"],t["Core/Utilities.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Accessibility/A11yI18n.js"],t["Accessibility/Components/ContainerComponent.js"],t["Accessibility/FocusBorder.js"],t["Accessibility/Components/InfoRegionsComponent.js"],t["Accessibility/KeyboardNavigation.js"],t["Accessibility/Components/LegendComponent.js"],t["Accessibility/Components/MenuComponent.js"],t["Accessibility/Components/NavigatorComponent.js"],t["Accessibility/Components/SeriesComponent/NewDataAnnouncer.js"],t["Accessibility/ProxyProvider.js"],t["Accessibility/Components/RangeSelectorComponent.js"],t["Accessibility/Components/SeriesComponent/SeriesComponent.js"],t["Accessibility/Components/ZoomComponent.js"],t["Accessibility/HighContrastMode.js"],t["Accessibility/HighContrastTheme.js"],t["Accessibility/Options/A11yDefaults.js"],t["Accessibility/Options/LangDefaults.js"],t["Accessibility/Options/DeprecatedOptions.js"]],function(e,t,i,s,n,o,r,a,l,h,c,d,u,p,g,m,b,y,f,x,v,A){let{defaultOptions:C}=e,{doc:w}=t,{addEvent:E,extend:T,fireEvent:M,merge:S}=i,{removeElement:k}=s;class P{constructor(e){this.init(e)}init(e){if(this.chart=e,!w.addEventListener){this.zombie=!0,this.components={},e.renderTo.setAttribute("aria-hidden",!0);return}A(e),this.proxyProvider=new p(this.chart),this.initComponents(),this.keyboardNavigation=new l(e,this.components)}initComponents(){let e=this.chart,t=this.proxyProvider,i=e.options.accessibility;this.components={container:new o,infoRegions:new a,legend:new h,chartMenu:new c,rangeSelector:new g,series:new m,zoom:new b,navigator:new d},i.customComponents&&T(this.components,i.customComponents);let s=this.components;
23510this.getComponentOrder().forEach(function(i){s[i].initBase(e,t),s[i].init()})}getComponentOrder(){return this.components?this.components.series?["series"].concat(Object.keys(this.components).filter(e=>"series"!==e)):Object.keys(this.components):[]}update(){let e=this.components,t=this.chart,i=t.options.accessibility;M(t,"beforeA11yUpdate"),t.types=this.getChartTypes();let s=i.keyboardNavigation.order;this.proxyProvider.updateGroupOrder(s),this.getComponentOrder().forEach(function(i){e[i].onChartUpdate(),M(t,"afterA11yComponentUpdate",{name:i,component:e[i]})}),this.keyboardNavigation.update(s),!t.highContrastModeActive&&!1!==i.highContrastMode&&(y.isHighContrastModeActive()||!0===i.highContrastMode)&&y.setHighContrastTheme(t),M(t,"afterA11yUpdate",{accessibility:this})}destroy(){let e=this.chart||{},t=this.components;Object.keys(t).forEach(function(e){t[e].destroy(),t[e].destroyBase()}),this.proxyProvider&&this.proxyProvider.destroy(),e.announcerContainer&&k(e.announcerContainer),this.keyboardNavigation&&this.keyboardNavigation.destroy(),e.renderTo&&e.renderTo.setAttribute("aria-hidden",!0),e.focusElement&&e.focusElement.removeFocusBorder()}getChartTypes(){let e={};return this.chart.series.forEach(function(t){e[t.type]=1}),Object.keys(e)}}return function(e){function t(){this.accessibility&&this.accessibility.destroy()}function i(){this.a11yDirty&&this.renderTo&&(delete this.a11yDirty,this.updateA11yEnabled());let e=this.accessibility;e&&!e.zombie&&(e.proxyProvider.updateProxyElementPositions(),e.getComponentOrder().forEach(function(t){e.components[t].onChartRender()}))}function s(e){let t=e.options.accessibility;t&&(t.customComponents&&(this.options.accessibility.customComponents=t.customComponents,delete t.customComponents),S(!0,this.options.accessibility,t),this.accessibility&&this.accessibility.destroy&&(this.accessibility.destroy(),delete this.accessibility)),this.a11yDirty=!0}function o(){let t=this.accessibility,i=this.options.accessibility;i&&i.enabled?t&&!t.zombie?t.update():(this.accessibility=t=new e(this),t&&!t.zombie&&t.update()):t?(t.destroy&&t.destroy(),delete this.accessibility):this.renderTo.setAttribute("aria-hidden",!0)}function a(){this.series.chart.accessibility&&(this.series.chart.a11yDirty=!0)}e.i18nFormat=n.i18nFormat,e.compose=function(e,d,p,b,y,f){l.compose(e),u.compose(b),h.compose(e,d),c.compose(e),m.compose(e,p,b),n.compose(e),r.compose(e,y),f&&g.compose(e,f);let x=e.prototype;x.updateA11yEnabled||(x.updateA11yEnabled=o,E(e,"destroy",t),E(e,"render",i),E(e,"update",s),["addSeries","init"].forEach(t=>{E(e,t,function(){this.a11yDirty=!0})}),["afterApplyDrilldown","drillupall"].forEach(t=>{E(e,t,function(){let e=this.accessibility;e&&!e.zombie&&e.update()})}),E(p,"update",a),["update","updatedData","remove"].forEach(e=>{E(b,e,function(){this.chart.accessibility&&(this.chart.a11yDirty=!0)})}))}}(P||(P={})),S(!0,C,x,{accessibility:{highContrastTheme:f},lang:v}),P}),i(t,"masters/modules/accessibility.src.js",[t["Core/Globals.js"],t["Accessibility/Accessibility.js"],t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Accessibility/Components/SeriesComponent/SeriesDescriber.js"]],function(e,t,i,s,n,o,r){return e.i18nFormat=t.i18nFormat,e.A11yChartUtilities=s,e.A11yHTMLUtilities=n,e.AccessibilityComponent=i,e.KeyboardNavigationHandler=o,e.SeriesAccessibilityDescriber=r,t.compose(e.Chart,e.Legend,e.Point,e.Series,e.SVGElement,e.RangeSelector),e})});
23511},{}],112:[function(require,module,exports){
23512!/**
23513 * Highcharts JS v11.4.3 (2024-05-22)
23514 *
23515 * Data module
23516 *
23517 * (c) 2012-2024 Torstein Honsi
23518 *
23519 * License: www.highcharts.com/license
23520 */function(e){"object"==typeof module&&module.exports?(e.default=e,module.exports=e):"function"==typeof define&&define.amd?define("highcharts/modules/data",["highcharts"],function(t){return e(t),e.Highcharts=t,e}):e("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(e){"use strict";var t=e?e._modules:{};function s(e,t,s,r){e.hasOwnProperty(t)||(e[t]=r.apply(null,s),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsM
23520oduleLoaded",{detail:{path:t,module:e[t]}})))}s(t,"Core/HttpUtilities.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let{win:s}=e,{discardElement:r,objectEach:i}=t,a={ajax:function(e){let t={json:"application/json",xml:"application/xml",text:"text/plain",octet:"application/octet-stream"},s=new XMLHttpRequest;function r(t,s){e.error&&e.error(t,s)}if(!e.url)return!1;s.open((e.type||"get").toUpperCase(),e.url,!0),e.headers&&e.headers["Content-Type"]||s.setRequestHeader("Content-Type",t[e.dataType||"json"]||t.text),i(e.headers,function(e,t){s.setRequestHeader(t,e)}),e.responseType&&(s.responseType=e.responseType),s.onreadystatechange=function(){let t;if(4===s.readyState){if(200===s.status){if("blob"!==e.responseType&&(t=s.responseText,"json"===e.dataType))try{t=JSON.parse(t)}catch(e){if(e instanceof Error)return r(s,e)}return e.success&&e.success(t,s)}r(s,s.responseText)}},e.data&&"string"!=typeof e.data&&(e.data=JSON.stringify(e.data)),s.send(e.data)},getJSON:function(e,t){a.ajax({url:e,success:t,dataType:"json",headers:{"Content-Type":"text/plain"}})},post:function(e,t,a){let n=new s.FormData;i(t,function(e,t){n.append(t,e)}),n.append("b64","true");let{filename:o,type:l}=t;return s.fetch(e,{method:"POST",body:n,...a}).then(e=>{e.ok&&e.text().then(e=>{let t=document.createElement("a");t.href=`data:${l};base64,${e}`,t.download=o,t.click(),r(t)})})}};return a}),s(t,"Extensions/Data.js",[t["Core/Chart/Chart.js"],t["Core/Defaults.js"],t["Core/Globals.js"],t["Core/HttpUtilities.js"],t["Core/Series/Point.js"],t["Core/Series/SeriesRegistry.js"],t["Core/Utilities.js"]],function(e,t,s,r,i,a,n){let{getOptions:o}=t,{doc:l}=s,{ajax:u}=r,{seriesTypes:h}=a,{addEvent:d,defined:m,extend:c,fireEvent:p,isNumber:f,merge:g,objectEach:C,pick:x,splat:y}=n;function T(e){return!!(e&&(e.rowsURL||e.csvURL||e.columnsURL))}class v{static data(e,t={},s){return new v(e,t,s)}static rowsToColumns(e){let t,s,r,i,a;if(e)for(t=0,a=[],s=e.length;t<s;t++)for(r=0,i=e[t].length;r<i;r++)a[r]||(a[r]=[]),a[r][t]=e[t][r];return a}constructor(e,t={},s){this.rowsToColumns=v.rowsToColumns,this.dateFormats={"YYYY/mm/dd":{regex:/^([0-9]{4})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{1,2})$/,parser:function(e){return e?Date.UTC(+e[1],e[2]-1,+e[3]):NaN}},"dd/mm/YYYY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/,parser:function(e){return e?Date.UTC(+e[3],e[2]-1,+e[1]):NaN},alternative:"mm/dd/YYYY"},"mm/dd/YYYY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/,parser:function(e){return e?Date.UTC(+e[3],e[1]-1,+e[2]):NaN}},"dd/mm/YY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/,parser:function(e){if(!e)return NaN;let t=new Date,s=+e[3];return s>t.getFullYear()-2e3?s+=1900:s+=2e3,Date.UTC(s,e[2]-1,+e[1])},alternative:"mm/dd/YY"},"mm/dd/YY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/,parser:function(e){return e?Date.UTC(+e[3]+2e3,e[1]-1,+e[2]):NaN}}},this.chart=s,this.chartOptions=t,this.options=e,this.rawColumns=[],this.init(e,t,s)}init(e,t,s){let r=e.decimalPoint,i;t&&(this.chartOptions=t),s&&(this.chart=s),"."!==r&&","!==r&&(r=void 0),this.options=e,this.columns=e.columns||this.rowsToColumns(e.rows)||[],this.firstRowAsNames=x(e.firstRowAsNames,this.firstRowAsNames,!0),this.decimalRegex=r&&RegExp("^(-?[0-9]+)"+r+"([0-9]+)$"),void 0!==this.liveDataTimeout&&clearTimeout(this.liveDataTimeout),this.rawColumns=[],this.columns.length&&(this.dataFound(),i=!T(e)),i||(i=this.fetchLiveData()),i||(i=!!this.parseCSV().length),i||(i=!!this.parseTable().length),i||(i=this.parseGoogleSpreadsheet()),!i&&e.afterComplete&&e.afterComplete()}getColumnDistribution(){let e=this.chartOptions,t=this.options,s=[],r=function(e){return(h[e||"line"].prototype.pointArrayMap||[0]).length},i=function(e){return h[e||"line"].prototype.pointArrayMap},a=e&&e.chart&&e.chart.type,n=[],o=[],l=t&&t.seriesMapping||e&&e.series&&e.series.map(function(){return{x:0}})||[],u=0,d;(e&&e.series||[]).forEach(e=>{n.push(r(e.type||a))}),l.forEach(e=>{s.push(e.x||0)}),0===s.length&&s.push(0),l.forEach(t=>{let s=new R,l=n[u]||r(a),h=(e&&e.series||[])[u]||{},c=i(h.type||a),p=c||["y"];for((m(t.x)||h.isCartesian||!c)&&s.addColumnReader(t.x,"x"),C(t,function(e,t){"x"!==t&&s.addColumnReader(e,t)}),d=0;d<l;d++)s.hasReader(p[d])||s.addColumnReader(void 0,p[d]);o.push(s),u++});let c=i(a);void 0===c&&(c=["y"]),this.valueCount={global:r(a),xColumns:s,individual:n,seriesBuilders:o,globalPointArrayMap:c}}dataFound(){this.options.switchRowsAndColumns&&(this.columns=this.rowsToColumns(this.columns)),this.getColumnDistribution(),this.parseTypes(),!1!==this.parsed()&&this.complete()}parseCSV(e){let t=this,s=this.columns=[],r=e||this.options,i=void 0!==r.startColumn&&r.startColumn?r.startColumn:0,a=r.endColumn||Number.MAX_VALUE,n=[],o={",":0,";":0,"	":0},l=r.csv,u=void 0!==r.startRow&&r.startRow?r.startRow:0,h=r.endRow||Number.MAX_VALUE,d,m,c=0;if(l&&r.beforeParse&&(l=r.beforeParse.call(this,l)),l){if(m=l.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(r.lineDelimiter||"\n"),(!u||u<0)&&(u=0),(!h||h>=m.length)&&(h=m.length-1),r.itemDelimiter)d=r.itemDelimiter;else{let e,s,i;d=null,e=0,s=0,i=!1,m.some(function(t,r){let i=!1,a,n,l,u="";if(r>13)return!0;for(let r=0;r<t.length;r++){if(a=t[r],n=t[r+1],l=t[r-1],"#"===a)return;if('"'===a){if(i){if('"'!==l&&'"'!==n){for(;" "===n&&r<t.length;)n=t[++r];void 0!==o[n]&&o[n]++,i=!1}}else i=!0}else void 0!==o[a]?(isNaN(Date.parse(u=u.trim()))?(isNaN(u)||!isFinite(u))&&o[a]++:o[a]++,u=""):u+=a;","===a&&s++,"."===a&&e++}}),o[";"]>o[","]?i=";":(o[","],o[";"],i=","),r.decimalPoint||(e>s?r.decimalPoint=".":r.decimalPoint=",",t.decimalRegex=RegExp("^(-?[0-9]+)"+r.decimalPoint+"([0-9]+)$")),d=i}let e=0;for(c=u;c<=h;c++)"#"===m[c][0]?e++:function(e,t,o,l){let u=0,h="",m="",c="",p="",f=0,g=0;function C(t){h=e[t],m=e[t-1],c=e[t+1]}function x(e){n.length<g+1&&n.push([e]),n[g][n[g].length-1]!==e&&n[g].push(e)}function y(){if(i>f||f>a){++f,p="";return}
23520r.columnTypes||(!isNaN(parseFloat(p))&&isFinite(p)?(p=parseFloat(p),x("number")):isNaN(Date.parse(p))?x("string"):(p=p.replace(/\//g,"-"),x("date"))),s.length<g+1&&s.push([]),s[g][t]=p,p="",++g,++f}if(e.trim().length&&"#"!==e.trim()[0]){for(;u<e.length;u++)if(C(u),'"'===h)for(C(++u);u<e.length&&('"'!==h||'"'===m||'"'===c);)('"'!==h||'"'===h&&'"'!==m)&&(p+=h),C(++u);else h===d?y():p+=h;y()}}(m[c],c-u-e);(!r.columnTypes||0===r.columnTypes.length)&&n.length&&n[0].length&&"date"===n[0][1]&&!r.dateFormat&&(r.dateFormat=function(e,s){let i="YYYY/mm/dd",a=[],n=[],o,l=[],u,h=0,d=!1,m;for((!s||s>e.length)&&(s=e.length);h<s;h++)if(void 0!==e[h]&&e[h]&&e[h].length)for(m=0,o=e[h].trim().replace(/\//g," ").replace(/\-/g," ").replace(/\./g," ").split(" "),l=["","",""];m<o.length;m++)m<l.length&&(o[m]=parseInt(o[m],10),o[m]&&(n[m]=!n[m]||n[m]<o[m]?o[m]:n[m],void 0!==a[m]?a[m]!==o[m]&&(a[m]=!1):a[m]=o[m],o[m]>31?o[m]<100?l[m]="YY":l[m]="YYYY":o[m]>12&&o[m]<=31?(l[m]="dd",d=!0):l[m].length||(l[m]="mm")));if(d){for(m=0;m<a.length;m++)!1!==a[m]?n[m]>12&&"YY"!==l[m]&&"YYYY"!==l[m]&&(l[m]="YY"):n[m]>12&&"mm"===l[m]&&(l[m]="dd");return(3===l.length&&"dd"===l[1]&&"dd"===l[2]&&(l[2]="YY"),u=l.join("/"),(r.dateFormats||t.dateFormats)[u])?u:(p("deduceDateFailed"),i)}return i}(s[0])),this.dataFound()}return s}parseTable(){let e=this.options,t=this.columns||[],s=e.startRow||0,r=e.endRow||Number.MAX_VALUE,i=e.startColumn||0,a=e.endColumn||Number.MAX_VALUE;if(e.table){let n=e.table;"string"==typeof n&&(n=l.getElementById(n)),[].forEach.call(n.getElementsByTagName("tr"),(e,n)=>{n>=s&&n<=r&&[].forEach.call(e.children,(e,r)=>{let o=t[r-i],l=1;if(("TD"===e.tagName||"TH"===e.tagName)&&r>=i&&r<=a)for(t[r-i]||(t[r-i]=[]),t[r-i][n-s]=e.innerHTML;n-s>=l&&void 0===o[n-s-l];)o[n-s-l]=null,l++})}),this.dataFound()}return t}fetchLiveData(){let e=this,t=this.chart,s=this.options,r=s.enablePolling,i=g(s),a=0,n=1e3*(s.dataRefreshRate||2);return!!T(s)&&(n<1e3&&(n=1e3),delete s.csvURL,delete s.rowsURL,delete s.columnsURL,function o(l){function h(i,h,d){if(!i||!/^(http|\/|\.\/|\.\.\/)/.test(i))return i&&s.error&&s.error("Invalid URL"),!1;function m(){r&&t.liveDataURL===i&&(e.liveDataTimeout=setTimeout(o,n))}return l&&(clearTimeout(e.liveDataTimeout),t.liveDataURL=i),u({url:i,dataType:d||"json",success:function(e){t&&t.series&&h(e),m()},error:function(e,t){return++a<3&&m(),s.error&&s.error(t,e)}}),!0}h(i.csvURL,function(e){t.update({data:{csv:e}})},"text")||h(i.rowsURL,function(e){t.update({data:{rows:e}})})||h(i.columnsURL,function(e){t.update({data:{columns:e}})})}(!0),T(s))}parseGoogleSpreadsheet(){let e=this,t=this.options,s=t.googleSpreadsheetKey,r=this.chart,i=Math.max(1e3*(t.dataRefreshRate||2),4e3),a=()=>{if(t.googleSpreadsheetRange)return t.googleSpreadsheetRange;let e="ABCDEFGHIJKLMNOPQRSTUVWXYZ",s=(e.charAt(t.startColumn||0)||"A")+((t.startRow||0)+1),r=e.charAt(x(t.endColumn,-1))||"ZZ";return m(t.endRow)&&(r+=t.endRow+1),`${s}:${r}`};return s&&(delete t.googleSpreadsheetKey,function r(n){u({url:["https://sheets.googleapis.com/v4/spreadsheets",s,"values",a(),"?alt=json&majorDimension=COLUMNS&valueRenderOption=UNFORMATTED_VALUE&dateTimeRenderOption=FORMATTED_STRING&key="+t.googleAPIKey].join("/"),dataType:"json",success:function(s){n(s),t.enablePolling&&(e.liveDataTimeout=setTimeout(function(){r(n)},i))},error:function(e,s){return t.error&&t.error(s,e)}})}(function(t){let s=t.values;if(!s||0===s.length)return!1;let i=s.reduce((e,t)=>Math.max(e,t.length),0);s.forEach(e=>{for(let t=0;t<i;t++)void 0===e[t]&&(e[t]=null)}),r&&r.series?r.update({data:{columns:s}}):(e.columns=s,e.dataFound())})),!1}trim(e,t){return"string"==typeof e&&(e=e.replace(/^\s+|\s+$/g,""),t&&/^-?[0-9\s]+$/.test(e)&&(e=e.replace(/\s/g,"")),this.decimalRegex&&(e=e.replace(this.decimalRegex,"$1.$2"))),e}parseTypes(){let e=this.columns||[],t=e.length;for(;t--;)this.parseColumn(e[t],t)}parseColumn(e,t){let s=this.rawColumns,r=this.columns,i=this.firstRowAsNames,a=-1!==this.valueCount.xColumns.indexOf(t),n=[],o=this.chartOptions,l=(this.options.columnTypes||[])[t],u=a&&o&&o.xAxis&&"category"===y(o.xAxis)[0].type||"string"===l,h=m(e.name),d=e.length,c,p,g,C,x,T,v;for(s[t]||(s[t]=[]);d--;)c=n[d]||e[d],g=this.trim(c),p=parseFloat(C=this.trim(c,!0)),void 0===s[t][d]&&(s[t][d]=g),u||0===d&&i&&
23520!h?e[d]=""+g:+C===p?(e[d]=p,p>31536e6&&"float"!==l?e.isDatetime=!0:e.isNumeric=!0,void 0!==e[d+1]&&(v=p>e[d+1])):(g&&g.length&&(x=this.parseDate(c)),a&&f(x)&&"float"!==l?(n[d]=c,e[d]=x,e.isDatetime=!0,void 0!==e[d+1]&&((T=x>e[d+1])!==v&&void 0!==v&&(this.alternativeFormat?(this.dateFormat=this.alternativeFormat,d=e.length,this.alternativeFormat=this.dateFormats[this.dateFormat].alternative):e.unsorted=!0),v=T)):(e[d]=""===g?null:g,0!==d&&(e.isDatetime||e.isNumeric)&&(e.mixed=!0)));if(a&&e.mixed&&(r[t]=s[t]),a&&v&&this.options.sort)for(t=0;t<r.length;t++)r[t].reverse(),i&&r[t].unshift(r[t].pop())}parseDate(e){let t=this.options.parseDate,s,r,i,a=this.options.dateFormat||this.dateFormat,n;if(t)s=t(e);else if("string"==typeof e){if(a)(i=this.dateFormats[a])||(i=this.dateFormats["YYYY/mm/dd"]),(n=e.match(i.regex))&&(s=i.parser(n));else for(r in this.dateFormats)if(i=this.dateFormats[r],n=e.match(i.regex)){this.dateFormat=a=r,this.alternativeFormat=i.alternative,s=i.parser(n);break}!n&&(e.match(/:.+(GMT|UTC|[Z+-])/)&&(e=e.replace(/\s*(?:GMT|UTC)?([+-])(\d\d)(\d\d)$/,"$1$2:$3").replace(/(?:\s+|GMT|UTC)([+-])/,"$1").replace(/(\d)\s*(?:GMT|UTC|Z)$/,"$1+00:00")),"object"==typeof(n=Date.parse(e))&&null!==n&&n.getTime?s=n.getTime()-6e4*n.getTimezoneOffset():f(n)&&(s=n-6e4*new Date(n).getTimezoneOffset()))}return s}getData(){if(this.columns)return this.rowsToColumns(this.columns).slice(1)}parsed(){if(this.options.parsed)return this.options.parsed.call(this,this.columns)}complete(){let e,t,s,r,i,a,n,o,l,u,h,d;let c=this.columns,p=this.options,f=[];if([].length=c.length,p.complete||p.afterComplete){if(this.firstRowAsNames)for(r=0;r<c.length;r++){let e=c[r];m(e.name)||(e.name=x(e.shift(),"").toString())}for(n=0,t=[],u=function(e,t){let s,r,i;let a=[],n=[];for(r=0;r<e;r+=1)a.push(!0);for(s=0;s<t.length;s+=1)for(r=0,i=t[s].getReferencedColumnIndexes();r<i.length;r+=1)a[i[r]]=!1;for(r=0;r<a.length;r+=1)a[r]&&n.push(r);return n}(c.length,this.valueCount.seriesBuilders);n<this.valueCount.seriesBuilders.length;n++)(l=this.valueCount.seriesBuilders[n]).populateColumns(u)&&f.push(l);for(;u.length>0;){for((l=new R).addColumnReader(0,"x"),-1!==(d=u.indexOf(0))&&u.splice(d,1),r=0;r<this.valueCount.global;r++)l.addColumnReader(void 0,this.valueCount.globalPointArrayMap[r]);l.populateColumns(u)&&f.push(l)}if(f.length>0&&f[0].readers.length>0&&void 0!==(h=c[f[0].readers[0].columnIndex])&&(h.isDatetime?e="datetime":h.isNumeric||(e="category")),"category"===e)for(n=0;n<f.length;n++)for(a=0,l=f[n];a<l.readers.length;a++)"x"===l.readers[a].configName&&(l.readers[a].configName="name");for(n=0;n<f.length;n++){for(i=0,l=f[n],s=[];i<c[0].length;i++)s[i]=l.read(c,i);t[n]={data:s},l.name&&(t[n].name=l.name),"category"===e&&(t[n].turboThreshold=0)}o={series:t},e&&(o.xAxis={type:e},"category"===e&&(o.xAxis.uniqueNames=!1)),p.complete&&p.complete(o),p.afterComplete&&p.afterComplete(o)}}update(e,t){let s=this.chart,r=s.options;e&&(e.afterComplete=function(e){e&&(e.xAxis&&s.xAxis[0]&&e.xAxis.type===s.xAxis[0].options.type&&delete e.xAxis,s.update(e,t,!0))},g(!0,r.data,e),r.data&&r.data.googleSpreadsheetKey&&!e.columns&&delete r.data.columns,this.init(r.data))}}d(e,"init",function(e){let t=this,s=e.args[1],r=o().data,i=e.args[0]||{};if((r||i&&i.data)&&!t.hasDataDef){t.hasDataDef=!0;let a=g(r,i.data);t.data=new v(c(a,{afterComplete:function(e){let r,a;if(Object.hasOwnProperty.call(i,"series")){if("object"==typeof i.series)for(r=Math.max(i.series.length,e&&e.series?e.series.length:0);r--;)a=i.series[r]||{},i.series[r]=g(a,e&&e.series?e.series[r]:{});else delete i.series}i=g(e,i),t.init(i,s)}}),i,t),e.preventDefault()}});class R{constructor(){this.readers=[],this.pointIsArray=!0}populateColumns(e){let t=!0;return this.readers.forEach(t=>{void 0===t.columnIndex&&(t.columnIndex=e.shift())}),this.readers.forEach(e=>{void 0===e.columnIndex&&(t=!1)}),t}read(e,t){let s=this.pointIsArray,r=s?[]:{};if(this.readers.forEach(a=>{let n=e[a.columnIndex][t];s?r.push(n):a.configName.indexOf(".")>0?i.prototype.setNestedProperty(r,n,a.configName):r[a.configName]=n}),void 0===this.name&&this.readers.length>=2){let t=[];
23520this.readers.forEach(function(e){("x"===e.configName||"name"===e.configName||"y"===e.configName)&&void 0!==e.columnIndex&&t.push(e.columnIndex)}),t.length>=2&&(t.shift(),t.sort(function(e,t){return e-t})),this.name=e[x(t.shift(),0)].name}return r}addColumnReader(e,t){this.readers.push({columnIndex:e,configName:t}),"x"===t||"y"===t||void 0===t||(this.pointIsArray=!1)}getReferencedColumnIndexes(){let e,t;let s=[];for(e=0;e<this.readers.length;e+=1)void 0!==(t=this.readers[e]).columnIndex&&s.push(t.columnIndex);return s}hasReader(e){let t;for(t=0;t<this.readers.length;t+=1)if(this.readers[t].configName===e)return!0}}return v}),s(t,"masters/modules/data.src.js",[t["Core/Globals.js"],t["Core/HttpUtilities.js"],t["Extensions/Data.js"]],function(e,t,s){return e.Data=e.Data||s,e.HttpUtilities=e.HttpUtilities||t,e.ajax=e.HttpUtilities.ajax,e.data=e.Data.data,e.getJSON=e.HttpUtilities.getJSON,e.post=e.HttpUtilities.post,e})});
23521},{}],113:[function(require,module,exports){
23522!/**
23523 * Highcharts JS v11.4.3 (2024-05-22)
23524 *
23525 * Exporting module
23526 *
23527 * (c) 2010-2024 Torstein Honsi
23528 *
23529 * License: www.highcharts.com/license
23530 */function(e){"object"==typeof module&&module.exports?(e.default=e,module.exports=e):"function"==typeof define&&define.amd?define("highcharts/modules/exporting",["highcharts"],function(t){return e(t),e.Highcharts=t,e}):e("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(e){"use strict";var t=e?e._modules:{};function n(e,t,n,i){e.hasOwnProperty(t)||(e[t]=i.apply(null,n),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:t,module:e[t]}})))}n(t,"Core/Chart/ChartNavigationComposition.js",[],function(){var e;return function(e){e.compose=function(e){return e.navigation||(e.navigation=new t(e)),e};class t{constructor(e){this.updates=[],this.chart=e}addUpdate(e){this.chart.navigation.updates.push(e)}update(e,t){this.updates.forEach(n=>{n.call(this.chart,e,t)})}}e.Additions=t}(e||(e={})),e}),n(t,"Extensions/Exporting/ExportingDefaults.js",[t["Core/Globals.js"]],function(e){let{isTouchDevice:t}=e;return{exporting:{allowTableSorting:!0,type:"image/png",url:"https://export.highcharts.com/",pdfFont:{normal:void 0,bold:void 0,bolditalic:void 0,italic:void 0},printMaxWidth:780,scale:2,buttons:{contextButton:{className:"highcharts-contextbutton",menuClassName:"highcharts-contextmenu",symbol:"menu",titleKey:"contextButtonTitle",menuItems:["viewFullscreen","printChart","separator","downloadPNG","downloadJPEG","downloadPDF","downloadSVG"]}},menuItemDefinitions:{viewFullscreen:{textKey:"viewFullscreen",onclick:function(){this.fullscreen&&this.fullscreen.toggle()}},printChart:{textKey:"printChart",onclick:function(){this.print()}},separator:{separator:!0},downloadPNG:{textKey:"downloadPNG",onclick:function(){this.exportChart()}},downloadJPEG:{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},downloadPDF:{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},downloadSVG:{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}}},lang:{viewFullscreen:"View in full screen",exitFullscreen:"Exit from full screen",printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"},navigation:{buttonOptions:{symbolSize:14,symbolX:14.5,symbolY:13.5,align:"right",buttonSpacing:3,height:28,verticalAlign:"top",width:28,symbolFill:"#666666",symbolStroke:"#666666",symbolStrokeWidth:3,theme:{fill:"#ffffff",padding:5,stroke:"none","stroke-linecap":"round"}},menuStyle:{border:"none",borderRadius:"3px",background:"#ffffff",padding:"0.5em"},menuItemStyle:{background:"none",borderRadius:"3px",color:"#333333",padding:"0.5em",fontSize:t?"0.9em":"0.8em",transition:"background 250ms, color 250ms"},menuItemHoverStyle:{background:"#f2f2f2"}}}}),n(t,"Extensions/Exporting/ExportingSymbols.js",[],function(){var e;return function(e){let t=[];function n(e,t,n,i){return[["M",e,t+2.5],["L",e+n,t+2.5],["M",e,t+i/2+.5],["L",e+n,t+i/2+.5],["M",e,t+i-1.5],["L",e+n,t+i-1.5]]}function i(e,t,n,i){let o=i/3-2;return[].concat(this.circle(n-o,t,o,o),this.circle(n-o,t+o+4,o,o),this.circle(n-o,t+2*(o+4),o,o))}e.compose=function(e){if(-1===t.indexOf(e)){t.push(e);let o=e.prototype.symbols;o.menu=n,o.menuball=i.bind(o)}}}(e||(e={})),e}),n(t,"Extensions/Exporting/Fullscreen.js",[t["Core/Renderer/HTML/AST.js"],t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t,n){let{composed:i}=t,{addEvent:o,fireEvent:r,pushUnique:s}=n;function l(){this.fullscreen=new a(this)}class a{static compose(e){s(i,"Fullscreen")&&o(e,"beforeRender",l)}constructor(e){this.chart=e,this.isOpen=!1;let t=e.renderTo;!this.browserProps&&("function"==typeof t.requestFullscreen?this.browserProps={fullscreenChange:"fullscreenchange",requestFullscreen:"requestFullscreen",exitFullscreen:"exitFullscreen"}:t.mozRequestFullScreen?this.browserProps={fullscreenChange:"mozfullscreenchange",requestFullscreen:"mozRequestFullScreen",exitFullscreen:"mozCancelFullScreen"}:t.webkitRequestFullScreen?this.browserProps={fullscreenChange:"webkitfullscreenchange",requestFullscreen:"webkitRequestFullScreen",exitFullscreen:"webkitExitFullscreen"}:t.msRequestFullscreen&&(this.browserProps={fullscreenChange:"MSFullscreenChange",requestFullscreen:"msRequestFullscreen",exitFullscreen:"msExitFullscreen"}))}close(){let e=this,t=e.chart,n=t.options.chart;r(t,"fullscreenClose",null,function(){e.isOpen&&e.browserProps&&t.container.ownerDocument instanceof Document&&t.container.ownerDocument[e.browserProps.exitFullscreen](),e.unbindFullscreenEvent&&(e.unbindFullscreenEvent=e.unbindFullscreenEvent()),t.setSize(e.origWidth,e.origHeight,!1),e.origWidth=void 0,e.origHeight=void 0,n.width=e.origWidthOption,n.height=e.origHeightOption,e.origWidthOption=void 0,e.origHeightOption=void 0,e.isOpen=!1,e.setButtonText()})}open(){let e=this,t=e.chart,n=t.options.chart;r(t,"fullscreenOpen",null,function(){if(n&&(e.origWidthOption=n.width,e.origHeightOption=n.height),e.origWidth=t.chartWidth,e.origHeight=t.chartHeight,e.browserProps){let n=o(t.container.ownerDocument,e.browserProps.fullscreenChange,function(){e.isOpen?(e.isOpen=!1,e.close()):(t.setSize(null,null,!1),e.isOpen=!0,e.setButtonText())}),i=o(t,"destroy",n);e.unbindFullscreenEvent=()=>{n(),i()};let r=t.renderTo[e.browserProps.requestFullscreen]();r&&r.catch(function(){alert("Full screen is not supported inside a frame.")})}})}setButtonText(){let t=this.chart,n=t.exportDivElements,i=t.options.exporting,o=i&&i.buttons&&i.buttons.contextButton.menuItems,r=t.options.lang;if(i&&i.menuItemDefinitions&&r&&r.exitFullscreen&&r.viewFullscreen&&o&&n){let t=n[o.indexOf("viewFullscreen")];t&&e.setElementHTML(t,this.isOpen?r.exitFullscreen:i.menuItemDefinitions.viewFullscreen.text||r.viewFullscreen)}}toggle(){this.isOpen?this.close():this.open()}}return a}),n(t,"Core/HttpUtilities.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let{win:n}=e,{discardElement:i,objectEach:o}=t,r={ajax:function(e){let t={json:"application/json",xml:"application/xml",text:"text/plain",octet:"application/octet-stream"},n=new XMLHttpRequest;function i(t,n){e.error&&e.error(t,n)}if(!e.url)return!1;n.open((e.type||"get").toUpperCase(),e.url,!0),e.headers&&e.headers["Content-Type"]||n.setRequestHeader("Content-Type",t[e.dataType||"json"]||t.text),o(e.headers,function(e,t){n.setRequestHeader(t,e)}),e.responseType&&(n.responseType=e.responseType),n.onreadystatechange=function(){let t;if(4===n.readyState){if(200===n.status){if("blob"!==e.responseType&&(t=n.responseText,"json"===e.dataType))try{t=JSON.parse(t)}catch(e){if(e instanceof Error)return i(n,e)}return e.success&&e.success(t,n)}i(n,n.responseText)}},e.data&&"string"!=typeof e.data&&(e.data=JSON.stringify(e.data)),n.send(e.data)},getJSON:function(e,t){r.ajax({url:e,success:t,dataType:"json",headers:{"Content-Type":"text/plain"}})},post:function(e,t,r){let s=new n.FormData;o(t,function(e,t){s.append(t,e)}),s.append("b64","true");let{filename:l,type:a}=t;return n.fetch(e,{method:"POST",body:s,...r}).then(e=>{e.ok&&e.text().then(e=>{let t=document.createElement("a");t.href=`data:${a};base64,${e}`,t.download=l,t.click(),i(t)})})}};return r}),n(t,"Extensions/Exporting/Exporting.js",[t["Core/Renderer/HTML/AST.js"],t["Core/Chart/Chart.js"],t["Core/Chart/ChartNavigationComposition.js"],t["Core/Defaults.js"],t["Extensions/Exporting/ExportingDefaults.js"],t["Extensions/Exporting/ExportingSymbols.js"],t["Extensions/Exporting/Fullscreen.js"],t["Core/Globals.js"],t["Core/HttpUtilities.js"],t["Core/Utilities.js"]],function(e,t,n,i,o,r,s,l,a,c){var p;let{defaultOptions:u}=i,{doc:h,SVG_NS:d,win:g}=l,{addEvent:f,css:m,createElement:x,discardElement:y,extend:b,find:v,fireEvent:w,isObject:E,merge:C,objectEach:S,pick:F,removeEvent:T,uniqueKey:O}=c;return function(t){let i;let p=[/-/,/^(clipPath|cssText|d|height|width)$/,/^font$/,/[lL]ogical(Width|Height)$/,/^parentRule$/,/^(cssRules|ownerRules)$/,/perspective/,/TapHighlightColor/,/^transition/,/^length$/,/^[0-9]+$/],M=["fill","stroke","strokeLinecap","strokeLinejoin","strokeWidth","textAnchor","x","y"];t.inlineAllowlist=[];let P=["clipPath","defs","desc"];function k(e){let t,n;let i=this,o=i.renderer,r=C(i.options.navigation.buttonOptions,e),s=r.onclick,l=r.menuItems,a=r.symbolSize||12;if(i.btnCount||(i.btnCount=0),i.exportDivElements||(i.exportDivElements=[],i.exportSVGElements=[]),!1===r.enabled||!r.theme)return;let c=i.styledMode?{}:r.theme;s?n=function(e){e&&e.stopPropagation(),s.call(i,e)}:l&&(n=function(e){e&&e.stopPropagation(),i.contextMenu(p.menuClassName,l,p.translateX||0,p.translateY||0,p.width||0,p.height||0,p),p.setState(2)}),r.text&&r.symbol?c.paddingLeft=F(c.paddingLeft,30):r.text||b(c,{width:r.width,height:r.height,padding:0});let p=o.button(r.text,0,0,n,c,void 0,void 0,void 0,void 0,r.useHTML).addClass(e.className).attr({title:F(i.options.lang[r._titleKey||r.titleKey],"")});p.menuClassName=e.menuClassName||"highcharts-menu-"+i.btnCount++,r.symbol&&(t=o.symbol(r.symbol,Math.round((r.symbolX||0)-a/2),Math.round((r.symbolY||0)-a/2),a,a,{width:a,height:a}).addClass("highcharts-button-symbol").attr({zIndex:1}).add(p),i.styledMode||t.attr({stroke:r.symbolStroke,fill:r.symbolFill,"stroke-width":r.symbolStrokeWidth||1})),p.add(i.exportingGroup).align(b(r,{width:p.width,x:F(r.x,i.buttonOffset)}),!0,"spacingBox"),i.buttonOffset+=((p.width||0)+r.buttonSpacing)*("right"===r.align?-1:1),i.exportSVGElements.push(p,t)}function H(){if(!this.printReverseInfo)return;let{childNodes:e,origDisplay:t,resetParams:n}=this.printReverseInfo;this.moveContainers(this.renderTo),[].forEach.call(e,function(e,n){1===e.nodeType&&(e.style.display=t[n]||"")}),this.isPrinting=!1,n&&this.setSize.apply(this,n),delete this.printReverseInfo,i=void 0,w(this,"afterPrint")}function N(){let e=h.body,t=this.options.exporting.printMaxWidth,n={childNodes:e.childNodes,origDisplay:[],resetParams:void 0};this.isPrinting=!0,this.pointer?.reset(void 0,0),w(this,"beforePrint"),t&&this.chartWidth>t&&(n.resetParams=[this.options.chart.width,void 0,!1],this.setSize(t,void 0,!1)),[].forEach.call(n.childNodes,function(e,t){1===e.nodeType&&(n.origDisplay[t]=e.style.display,e.style.display="none")}),this.moveContainers(e),this.printReverseInfo=n}function j(e){e.renderExporting(),f(e,"redraw",e.renderExporting),f(e,"destroy",e.destroyExport)}function G(t,n,i,o,r,s,l){let a=this,p=a.options.navigation,u=a.chartWidth,d=a.chartHe
23530ight,y="cache-"+t,v=Math.max(r,s),C,S=a[y];S||(a.exportContextMenu=a[y]=S=x("div",{className:t},{position:"absolute",zIndex:1e3,padding:v+"px",pointerEvents:"auto",...a.renderer.style},a.scrollablePlotArea?.fixedDiv||a.container),C=x("ul",{className:"highcharts-menu"},a.styledMode?{}:{listStyle:"none",margin:0,padding:0},S),a.styledMode||m(C,b({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},p.menuStyle)),S.hideMenu=function(){m(S,{display:"none"}),l&&l.setState(0),a.openMenu=!1,m(a.renderTo,{overflow:"hidden"}),m(a.container,{overflow:"hidden"}),c.clearTimeout(S.hideTimer),w(a,"exportMenuHidden")},a.exportEvents.push(f(S,"mouseleave",function(){S.hideTimer=g.setTimeout(S.hideMenu,500)}),f(S,"mouseenter",function(){c.clearTimeout(S.hideTimer)}),f(h,"mouseup",function(e){a.pointer?.inClass(e.target,t)||S.hideMenu()}),f(S,"click",function(){a.openMenu&&S.hideMenu()})),n.forEach(function(t){if("string"==typeof t&&(t=a.options.exporting.menuItemDefinitions[t]),E(t,!0)){let n;t.separator?n=x("hr",void 0,void 0,C):("viewData"===t.textKey&&a.isDataTableVisible&&(t.textKey="hideData"),n=x("li",{className:"highcharts-menu-item",onclick:function(e){e&&e.stopPropagation(),S.hideMenu(),"string"!=typeof t&&t.onclick&&t.onclick.apply(a,arguments)}},void 0,C),e.setElementHTML(n,t.text||a.options.lang[t.textKey]),a.styledMode||(n.onmouseover=function(){m(this,p.menuItemHoverStyle)},n.onmouseout=function(){m(this,p.menuItemStyle)},m(n,b({cursor:"pointer"},p.menuItemStyle||{})))),a.exportDivElements.push(n)}}),a.exportDivElements.push(C,S),a.exportMenuWidth=S.offsetWidth,a.exportMenuHeight=S.offsetHeight);let F={display:"block"};i+(a.exportMenuWidth||0)>u?F.right=u-i-r-v+"px":F.left=i-v+"px",o+s+(a.exportMenuHeight||0)>d&&l.alignOptions?.verticalAlign!=="top"?F.bottom=d-o-v+"px":F.top=o+s-v+"px",m(S,F),m(a.renderTo,{overflow:""}),m(a.container,{overflow:""}),a.openMenu=!0,w(a,"exportMenuShown")}function D(e){let t;let n=e?e.target:this,i=n.exportSVGElements,o=n.exportDivElements,r=n.exportEvents;i&&(i.forEach((e,o)=>{e&&(e.onclick=e.ontouchstart=null,n[t="cache-"+e.menuClassName]&&delete n[t],i[o]=e.destroy())}),i.length=0),n.exportingGroup&&(n.exportingGroup.destroy(),delete n.exportingGroup),o&&(o.forEach(function(e,t){e&&(c.clearTimeout(e.hideTimer),T(e,"mouseleave"),o[t]=e.onmouseout=e.onmouseover=e.ontouchstart=e.onclick=null,y(e))}),o.length=0),r&&(r.forEach(function(e){e()}),r.length=0)}function I(e,t){let n=this.getSVGForExport(e,t);e=C(this.options.exporting,e),a.post(e.url,{filename:e.filename?e.filename.replace(/\//g,"-"):this.getFilename(),type:e.type,width:e.width,scale:e.scale,svg:n},e.fetchOptions)}function W(){return this.styledMode&&this.inlineStyles(),this.container.innerHTML}function R(){let e=this.userOptions.title&&this.userOptions.title.text,t=this.options.exporting.filename;return t?t.replace(/\//g,"-"):("string"==typeof e&&(t=e.toLowerCase().replace(/<\/?[^>]+(>|$)/g,"").replace(/[\s_]+/g,"-").replace(/[^a-z0-9\-]/g,"").replace(/^[\-]+/g,"").replace(/[\-]+/g,"-").substr(0,24).replace(/[\-]+$/g,"")),(!t||t.length<5)&&(t="chart"),t)}function L(e){let t,n,i=C(this.options,e);i.plotOptions=C(this.userOptions.plotOptions,e&&e.plotOptions),i.time=C(this.userOptions.time,e&&e.time);let o=x("div",null,{position:"absolute",top:"-9999em",width:this.chartWidth+"px",height:this.chartHeight+"px"},h.body),r=this.renderTo.style.width,s=this.renderTo.style.height,l=i.exporting.sourceWidth||i.chart.width||/px$/.test(r)&&parseInt(r,10)||(i.isGantt?800:600),a=i.exporting.sourceHeight||i.chart.height||/px$/.test(s)&&parseInt(s,10)||400;b(i.chart,{animation:!1,renderTo:o,forExport:!0,renderer:"SVGRenderer",width:l,height:a}),i.exporting.enabled=!1,delete i.data,i.series=[],this.series.forEach(function(e){(n=C(e.userOptions,{animation:!1,enableMouseTracking:!1,showCheckbox:!1,visible:e.visible})).isInternal||i.series.push(n)});let c={};this.axes.forEach(function(e){e.userOptions.internalKey||(e.userOptions.internalKey=O()),e.options.isInternal||(c[e.coll]||(c[e.coll]=!0,i[e.coll]=[]),i[e.coll].push(C(e.userOptions,{visible:e.visible})))}),i.colorAxis=this.userOptions.colorAxis;let p=new this.constructor(i,this.callback);return e&&["xAxis","yAxis","series"].forEach(function(t){let n={};e[t]&&(n[t]=e[t],p.update(n))}
23530),this.axes.forEach(function(e){let t=v(p.axes,function(t){return t.options.internalKey===e.userOptions.internalKey}),n=e.getExtremes(),i=n.userMin,o=n.userMax;t&&(void 0!==i&&i!==t.min||void 0!==o&&o!==t.max)&&t.setExtremes(i,o,!0,!1)}),t=p.getChartHTML(),w(this,"getSVG",{chartCopy:p}),t=this.sanitizeSVG(t,i),i=null,p.destroy(),y(o),t}function $(e,t){let n=this.options.exporting;return this.getSVG(C({chart:{borderRadius:0}},n.chartOptions,t,{exporting:{sourceWidth:e&&e.sourceWidth||n.sourceWidth,sourceHeight:e&&e.sourceHeight||n.sourceHeight}}))}function q(){let e;let n=t.inlineAllowlist,i={},o=h.createElement("iframe");m(o,{width:"1px",height:"1px",visibility:"hidden"}),h.body.appendChild(o);let r=o.contentWindow&&o.contentWindow.document;r&&r.body.appendChild(r.createElementNS(d,"svg")),function t(o){let s,a,c,u,h,d;let f={};if(r&&1===o.nodeType&&-1===P.indexOf(o.nodeName)){if(s=g.getComputedStyle(o,null),a="svg"===o.nodeName?{}:g.getComputedStyle(o.parentNode,null),!i[o.nodeName]){e=r.getElementsByTagName("svg")[0],c=r.createElementNS(o.namespaceURI,o.nodeName),e.a
23530ppendChild(c);let t=g.getComputedStyle(c,null),n={};for(let e in t)e.length<1e3&&"string"==typeof t[e]&&!/^[0-9]+$/.test(e)&&(n[e]=t[e]);i[o.nodeName]=n,"text"===o.nodeName&&delete i.text.fill,e.removeChild(c)}for(let e in s)(l.isFirefox||l.isMS||l.isSafari||Object.hasOwnProperty.call(s,e))&&function(e,t){if(u=h=!1,n.length){for(d=n.length;d--&&!h;)h=n[d].test(t);u=!h}for("transform"===t&&"none"===e&&(u=!0),d=p.length;d--&&!u;){if(t.length>1e3)throw Error("Input too long");u=p[d].test(t)||"function"==typeof e}!u&&(a[t]!==e||"svg"===o.nodeName)&&i[o.nodeName][t]!==e&&(M&&-1===M.indexOf(t)?f[t]=e:e&&o.setAttribute(t.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}),e))}(s[e],e);if(m(o,f),"svg"===o.nodeName&&o.setAttribute("stroke-width","1px"),"text"===o.nodeName)return;[].forEach.call(o.children||o.childNodes,t)}}(this.container.querySelector("svg")),e.parentNode.removeChild(e),o.parentNode.removeChild(o)}function z(e){let{scrollablePlotArea:t}=this;(t?[t.fixedDiv,t.scrollingContainer]:[this.container]).forEach(function(t){e.appendChild(t)})}function V(){let e=this,t=(t,n,i)=>{e.isDirtyExporting=!0,C(!0,e.options[t],n),F(i,!0)&&e.redraw()};e.exporting={update:function(e,n){t("exporting",e,n)}},n.compose(e).navigation.addUpdate((e,n)=>{t("navigation",e,n)})}function A(){let e=this;e.isPrinting||(i=e,l.isSafari||e.beforePrint(),setTimeout(()=>{g.focus(),g.print(),l.isSafari||setTimeout(()=>{e.afterPrint()},1e3)},1))}function K(){let e=this,t=e.options.exporting,n=t.buttons,i=e.isDirtyExporting||!e.exportSVGElements;e.buttonOffset=0,e.isDirtyExporting&&e.destroyExport(),i&&!1!==t.enabled&&(e.exportEvents=[],e.exportingGroup=e.exportingGroup||e.renderer.g("exporting-group").attr({zIndex:3}).add(),S(n,function(t){e.addButton(t)}),e.isDirtyExporting=!1)}function U(e,t){let n=e.indexOf("</svg>")+6,i=e.substr(n);return e=e.substr(0,n),t&&t.exporting&&t.exporting.allowHTML&&i&&(i='<foreignObject x="0" y="0" width="'+t.chart.width+'" height="'+t.chart.height+'"><body xmlns="http://www.w3.org/1999/xhtml">'+i.replace(/(<(?:img|br).*?(?=\>))>/g,"$1 />")+"</body></foreignObject>",e=e.replace("</svg>",i+"</svg>")),e=e.replace(/zIndex="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\(("|&quot;)(.*?)("|&quot;)\;?\)/g,"url($2)").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ (|NS[0-9]+\:)href=/g," xlink:href=").replace(/\n+/g," ").replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g,'$1="rgb($2)" $1-opacity="$3"').replace(/&nbsp;/g,"\xa0").replace(/&shy;/g,"\xad")}t.compose=function(e,t){r.compose(t),s.compose(e);let n=e.prototype;n.exportChart||(n.afterPrint=H,n.exportChart=I,n.inlineStyles=q,n.print=A,n.sanitizeSVG=U,n.getChartHTML=W,n.getSVG=L,n.getSVGForExport=$,n.getFilename=R,n.moveContainers=z,n.beforePrint=N,n.contextMenu=G,n.addButton=k,n.destroyExport=D,n.renderExporting=K,n.callbacks.push(j),f(e,"init",V),l.isSafari&&g.matchMedia("print").addListener(function(e){i&&(e.matches?i.beforePrint():i.afterPrint())}),u.exporting=C(o.exporting,u.exporting),u.lang=C(o.lang,u.lang),u.navigation=C(o.navigation,u.navigation))}}(p||(p={})),p}),n(t,"masters/modules/exporting.src.js",[t["Core/Globals.js"],t["Extensions/Exporting/Exporting.js"],t["Core/HttpUtilities.js"]],function(e,t,n){return e.HttpUtilities=e.HttpUtilities||n,e.ajax=e.HttpUtilities.ajax,e.getJSON=e.HttpUtilities.getJSON,e.post=e.HttpUtilities.post,t.compose(e.Chart,e.Renderer),e})});
23531},{}],114:[function(require,module,exports){
23532!/**
23533 * Highmaps JS v11.4.3 (2024-05-22)
23534 *
23535 * Highmaps as a plugin for Highcharts or Highcharts Stock.
23536 *
23537 * (c) 2011-2024 Torstein Honsi
23538 *
23539 * License: www.highcharts.com/license
23540 */function(t){"object"==typeof module&&module.exports?(t.default=t,module.exports=t):"function"==typeof define&&define.amd?define("highcharts/modules/map",["highcharts"],function(e){return t(e),t.Highcharts=e,t}):t("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(t){"use strict";var e=t?t._modules:{};function i(t,e,i,s){t.hasOwnProperty(e)||(t[e]=s.apply(null,i),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsM
23540oduleLoaded",{detail:{path:e,module:t[e]}})))}i(e,"Core/Axis/Color/ColorAxisComposition.js",[e["Core/Color/Color.js"],e["Core/Utilities.js"]],function(t,e){var i;let{parse:s}=t,{addEvent:o,extend:r,merge:a,pick:n,splat:l}=e;return function(t){let e;function i(){let{userOptions:t}=this;this.colorAxis=[],t.colorAxis&&(t.colorAxis=l(t.colorAxis),t.colorAxis.map(t=>new e(this,t)))}function h(t){let e=this.chart.colorAxis||[],i=e=>{let i=t.allItems.indexOf(e);-1!==i&&(this.destroyItem(t.allItems[i]),t.allItems.splice(i,1))},s=[],o,r;for(e.forEach(function(t){(o=t.options)&&o.showInLegend&&(o.dataClasses&&o.visible?s=s.concat(t.getDataClassLegendSymbols()):o.visible&&s.push(t),t.series.forEach(function(t){(!t.options.showInLegend||o.dataClasses)&&("point"===t.options.legendType?t.points.forEach(function(t){i(t)}):i(t))}))}),r=s.length;r--;)t.allItems.unshift(s[r])}function p(t){t.visible&&t.item.legendColor&&t.item.legendItem.symbol.attr({fill:t.item.legendColor})}function d(t){this.chart.colorAxis?.forEach(e=>{e.update({},t.redraw)})}function c(){(this.chart.colorAxis&&this.chart.colorAxis.length||this.colorAttribs)&&this.translateColors()}function u(){let t=this.axisTypes;t?-1===t.indexOf("colorAxis")&&t.push("colorAxis"):this.axisTypes=["colorAxis"]}function m(t){let e=this,i=t?"show":"hide";e.visible=e.options.visible=!!t,["graphic","dataLabel"].forEach(function(t){e[t]&&e[t][i]()}),this.series.buildKDTree()}function g(){let t=this,e=this.data.length?this.data:this.points,i=this.options.nullColor,s=this.colorAxis,o=this.colorKey;e.forEach(e=>{let r=e.getNestedProperty(o),a=e.options.color||(e.isNull||null===e.value?i:s&&void 0!==r?s.toColor(r,e):e.color||t.color);a&&e.color!==a&&(e.color=a,"point"===t.options.legendType&&e.legendItem&&e.legendItem.label&&t.chart.legend.colorizeItem(e,e.visible))})}function f(){this.elem.attr("fill",s(this.start).tweenTo(s(this.end),this.pos),void 0,!0)}function b(){this.elem.attr("stroke",s(this.start).tweenTo(s(this.end),this.pos),void 0,!0)}t.compose=function(t,s,l,y,x){let M=s.prototype,C=l.prototype,j=x.prototype;M.collectionsWithUpdate.includes("colorAxis")||(e=t,M.collectionsWithUpdate.push("colorAxis"),M.collectionsWithInit.colorAxis=[M.addColorAxis],o(s,"afterGetAxes",i),function(t){let i=t.prototype.createAxis;t.prototype.createAxis=function(t,s){if("colorAxis"!==t)return i.apply(this,arguments);let o=new e(this,a(s.axis,{index:this[t].length,isX:!1}));return this.isDirtyLegend=!0,this.axes.forEach(t=>{t.series=[]}),this.series.forEach(t=>{t.bindAxes(),t.isDirtyData=!0}),n(s.redraw,!0)&&this.redraw(s.animation),o}}(s),C.fillSetter=f,C.strokeSetter=b,o(y,"afterGetAllItems",h),o(y,"afterColorizeItem",p),o(y,"afterUpdate",d),r(j,{optionalAxis:"colorAxis",translateColors:g}),r(j.pointClass.prototype,{setVisible:m}),o(x,"afterTranslate",c,{order:1}),o(x,"bindAxes",u))},t.pointSetVisible=m}(i||(i={})),i}),i(e,"Core/Axis/Color/ColorAxisDefaults.js",[],function(){return{lineWidth:0,minPadding:0,maxPadding:0,gridLineColor:"#ffffff",gridLineWidth:1,tickPixelInterval:72,startOnTick:!0,endOnTick:!0,offset:0,marker:{animation:{duration:50},width:.01,color:"#999999"},labels:{distance:8,overflow:"justify",rotation:0},minColor:"#e6e9ff",maxColor:"#0022ff",tickLength:5,showInLegend:!0}}),i(e,"Core/Axis/Color/ColorAxisLike.js",[e["Core/Color/Color.js"],e["Core/Utilities.js"]],function(t,e){var i,s;let{parse:o}=t,{merge:r}=e;return(s=i||(i={})).initDataClasses=function(t){let e=this.chart,i=this.legendItem=this.legendItem||{},s=this.options,a=t.dataClasses||[],n,l,h=e.options.chart.colorCount,p=0,d;this.dataClasses=l=[],i.labels=[];for(let t=0,i=a.length;t<i;++t)n=r(n=a[t]),l.push(n),(e.styledMode||!n.color)&&("category"===s.dataClassColor?(e.styledMode||(h=(d=e.options.colors||[]).length,n.color=d[p]),n.colorIndex=p,++p===h&&(p=0)):n.color=o(s.minColor).tweenTo(o(s.maxColor),i<2?.5:t/(i-1)))},s.initStops=function(){let t=this.options,e=this.stops=t.stops||[[0,t.minColor||""],[1,t.maxColor||""]];for(let t=0,i=e.length;t<i;++t)e[t].color=o(e[t][1])},s.normalizedValue=function(t){let e=this.max||0,i=this.min||0;return this.logarithmic&&(t=this.logarithmic.log2lin(t)),1-(e-t)/(e-i||1)},s.toColor=function(t,e){let i,s,o,r,a,n;let l=this.dataClasses,h=this.stops;if(l){for(n=l.length;n--;)if(s=(a=l[n]).from,o=a.to,(void 0===s||t>=s)&&(void 0===o||t<=o)){r=a.color,e&&(e.dataClass=n,e.colorIndex=a.colorIndex);break}}else{for(i=this.normalizedValue(t),n=h.length;n--&&!(i>h[n][0]););s=h[n]||h[n+1],i=1-((o=h[n+1]||s)[0]-i)/(o[0]-s[0]||1),r=s.color.tweenTo(o.color,i)}return r},i}),i(e,"Core/Axis/Color/ColorAxis.js",[e["Core/Axis/Axis.js"],e["Core/Axis/Color/ColorAxisComposition.js"],e["Core/Axis/Color/ColorAxisDefaults.js"],e["Core/Axis/Color/ColorAxisLike.js"],e["Core/Defaults.js"],e["Core/Legend/LegendSymbol.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,
23540i,s,o,r,a,n){let{defaultOptions:l}=o,{series:h}=a,{defined:p,extend:d,fireEvent:c,isArray:u,isNumber:m,merge:g,pick:f,relativeLength:b}=n;l.colorAxis=g(l.xAxis,i);class y extends t{static compose(t,i,s,o){e.compose(y,t,i,s,o)}constructor(t,e){super(t,e),this.coll="colorAxis",this.visible=!0,this.init(t,e)}init(t,e){let i=t.options.legend||{},s=e.layout?"vertical"!==e.layout:"vertical"!==i.layout;this.side=e.side||s?2:1,this.reversed=e.reversed||!s,this.opposite=!s,super.init(t,e,"colorAxis"),this.userOptions=e,u(t.userOptions.colorAxis)&&(t.userOptions.colorAxis[this.index]=e),e.dataClasses&&this.initDataClasses(e),this.initStops(),this.horiz=s,this.zoomEnabled=!1}hasData(){return!!(this.tickPositions||[]).length}setTickPositions(){if(!this.dataClasses)return super.setTickPositions()}setOptions(t){let e=g(l.colorAxis,t,{showEmpty:!1,title:null,visible:this.chart.options.legend.enabled&&!1!==t.visible});super.setOptions(e),this.options.crosshair=this.options.marker}setAxisSize(){let t=this.chart,e=this.legendItem?.symbol,{width:i,height:s}=this.getSize();e&&(this.left=+e.attr("x"),this.top=+e.attr("y"),this.width=i=+e.attr("width"),this.height=s=+e.attr("height"),this.right=t.chartWidth-this.left-i,this.bottom=t.chartHeight-this.top-s,this.pos=this.horiz?this.left:this.top),this.len=(this.horiz?i:s)||y.defaultLegendLength}getOffset(){let t=this.legendItem?.group,e=this.chart.axisOffset[this.side];if(t){this.axisParent=t,super.getOffset();let i=this.chart.legend;i.allItems.forEach(function(t){t instanceof y&&t.drawLegendSymbol(i,t)}),i.render(),this.chart.getMargins(!0),this.chart.series.some(t=>t.isDrilling)||(this.isDirty=!0),this.added||(this.added=!0,this.labelLeft=0,this.labelRight=this.width),this.chart.axisOffset[this.side]=e}}setLegendColor(){let t=this.horiz,e=this.reversed,i=e?1:0,s=e?0:1,o=t?[i,0,s,0]:[0,s,0,i];this.legendColor={linearGradient:{x1:o[0],y1:o[1],x2:o[2],y2:o[3]},stops:this.stops}}drawLegendSymbol(t,e){let i=e.legendItem||{},s=t.padding,o=t.options,r=this.options.labels,a=f(o.itemDistance,10),n=this.horiz,{width:l,height:h}=this.getSize(),p=f(o.labelPadding,n?16:30);this.setLegendColor(),i.symbol||(i.symbol=this.chart.renderer.symbol("roundedRect").attr({r:o.symbolRadius??3,zIndex:1}).add(i.group)),i.symbol.attr({x:0,y:(t.baseline||0)-11,width:l,height:h}),i.labelWidth=l+s+(n?a:f(r.x,r.distance)+(this.maxLabelLength||0)),i.labelHeight=h+s+(n?p:0)}setState(t){this.series.forEach(function(e){e.setState(t)})}setVisible(){}getSeriesExtremes(){let t=this.series,e,i,s,o,r,a,n=t.length,l,d;for(this.dataMin=1/0,this.dataMax=-1/0;n--;){if(i=(a=t[n]).colorKey=f(a.options.colorKey,a.colorKey,a.pointValKey,a.zoneAxis,"y"),o=a.pointArrayMap,r=a[i+"Min"]&&a[i+"Max"],a[i+"Data"])e=a[i+"Data"];else if(o){if(e=[],s=o.indexOf(i),l=a.yData,s>=0&&l)for(d=0;d<l.length;
23540d++)e.push(f(l[d][s],l[d]))}else e=a.yData;if(r)a.minColorValue=a[i+"Min"],a.maxColorValue=a[i+"Max"];else{let t=h.prototype.getExtremes.call(a,e);a.minColorValue=t.dataMin,a.maxColorValue=t.dataMax}p(a.minColorValue)&&p(a.maxColorValue)&&(this.dataMin=Math.min(this.dataMin,a.minColorValue),this.dataMax=Math.max(this.dataMax,a.maxColorValue)),r||h.prototype.applyExtremes.call(a)}}drawCrosshair(t,e){let i;let s=this.legendItem||{},o=e&&e.plotX,r=e&&e.plotY,a=this.pos,n=this.len;e&&((i=this.toPixels(e.getNestedProperty(e.series.colorKey)))<a?i=a-2:i>a+n&&(i=a+n+2),e.plotX=i,e.plotY=this.len-i,super.drawCrosshair(t,e),e.plotX=o,e.plotY=r,this.cross&&!this.cross.addedToColorAxis&&s.group&&(this.cross.addClass("highcharts-coloraxis-marker").add(s.group),this.cross.addedToColorAxis=!0,this.chart.styledMode||"object"!=typeof this.crosshair||this.cross.attr({fill:this.crosshair.color})))}getPlotLinePath(t){let e=this.left,i=t.translatedValue,s=this.top;return m(i)?this.horiz?[["M",i-4,s-6],["L",i+4,s-6],["L",i,s],["Z"]]:[["M",e,i],["L",e-6,i+6],["L",e-6,i-6],["Z"]]:super.getPlotLinePath(t)}update(t,e){let i=this.chart.legend;this.series.forEach(t=>{t.isDirtyData=!0}),(t.dataClasses&&i.allItems||this.dataClasses)&&this.destroyItems(),super.update(t,e),this.legendItem&&this.legendItem.label&&(this.setLegendColor(),i.colorizeItem(this,!0))}destroyItems(){let t=this.chart,e=this.legendItem||{};if(e.label)t.legend.destroyItem(this);else if(e.labels)for(let i of e.labels)t.legend.destroyItem(i);t.isDirtyLegend=!0}destroy(){this.chart.isDirtyLegend=!0,this.destroyItems(),super.destroy(...[].slice.call(arguments))}remove(t){this.destroyItems(),super.remove(t)}getDataClassLegendSymbols(){let t;let e=this,i=e.chart,s=e.legendItem&&e.legendItem.labels||[],o=i.options.legend,a=f(o.valueDecimals,-1),n=f(o.valueSuffix,""),l=t=>e.series.reduce((e,i)=>(e.push(...i.points.filter(e=>e.dataClass===t)),e),[]);return s.length||e.dataClasses.forEach((o,h)=>{let p=o.from,u=o.to,{numberFormatter:m}=i,g=!0;t="",void 0===p?t="< ":void 0===u&&(t="> "),void 0!==p&&(t+=m(p,a)+n),void 0!==p&&void 0!==u&&(t+=" - "),void 0!==u&&(t+=m(u,a)+n),s.push(d({chart:i,name:t,options:{},drawLegendSymbol:r.rectangle,visible:!0,isDataClass:!0,setState:t=>{for(let e of l(h))e.setState(t)},setVisible:function(){this.visible=g=e.visible=!g;let t=[];for(let e of l(h))e.setVisible(g),e.hiddenInDataClass=!g,-1===t.indexOf(e.series)&&t.push(e.series);i.legend.colorizeItem(this,g),t.forEach(t=>{c(t,"afterDataClassLegendClick")})}},o))}),s}getSize(){let{chart:t,horiz:e}=this,{height:i,width:s}=this.options,{legend:o}=t.options;return{width:f(p(s)?b(s,t.chartWidth):void 0,o?.symbolWidth,e?y.defaultLegendLength:12),height:f(p(i)?b(i,t.chartHeight):void 0,o?.symbolHeight,e?12:y.defaultLegendLength)}}}return y.defaultLegendLength=200,y.keepProps=["legendItem"],d(y.prototype,s),Array.prototype.push.apply(t.keepProps,y.keepProps),y}),i(e,"masters/modules/coloraxis.src.js",[e["Core/Globals.js"],e["Core/Axis/Color/ColorAxis.js"]],function(t,e){return t.ColorAxis=t.ColorAxis||e,t.ColorAxis.compose(t.Chart,t.Fx,t.Legend,t.Series),t}),i(e,"Maps/MapNavigationDefaults.js",[],function(){return{lang:{zoomIn:"Zoom in",zoomOut:"Zoom out"},mapNavigation:{buttonOptions:{alignTo:"plotBox",align:"left",verticalAlign:"top",x:0,width:18,height:18,padding:5,style:{color:"#666666",fontSize:"1em",fontWeight:"bold"},theme:{fill:"#ffffff",stroke:"#e6e6e6","stroke-width":1,"text-align":"center"}},buttons:{zoomIn:{onclick:function(){this.mapZoom(.5)},text:"+",y:0},zoomOut:{onclick:function(){this.mapZoom(2)},text:"-",y:28}},mouseWheelSensitivity:1.1}}}),i(e,"Maps/MapPointer.js",[e["Core/Utilities.js"]],function(t){var e;let{defined:i,extend:s,pick:o,wrap:r}=t;return function(t){let e,a=0;function n(t){let e=this.chart;t=this.normalize(t),e.options.mapNavigation.enableDoubleClickZoomTo?e.pointer.inClass(t.target,"highcharts-tracker")&&e.hoverPoint&&e.hoverPoint.zoomTo():e.isInsidePlot(t.chartX-e.plotLeft,t.chartY-e.plotTop)&&e.mapZoom(.5,void 0,void 0,t.chartX,t.chartY)}function l(t){let s=this.chart,o=i((t=this.normalize(t)).wheelDelta)&&-t.wheelDelta/120||t.deltaY||t.detail;Math.abs(o)>=1&&(a+=Math.abs(o),e&&clearTimeout(e),e=setTimeout(()=>{a=0},50)),a<10&&s.isInsidePlot(t.chartX-s.plotLeft,t.chartY-s.plotTop)&&s.mapView&&s.mapView.zoomBy(-((s.options.mapNavigation.mouseWheelSensitivity-1)*o),void 0,[t.chartX,t.chartY],!(1>Math.abs(o))&&void 0)}
23540function h(t,e,i){let o=this.chart;if(e=t.call(this,e,i),o&&o.mapView){let t=o.mapView.pixelsToLonLat({x:e.chartX-o.plotLeft,y:e.chartY-o.plotTop});t&&s(e,t)}return e}function p(t){let e=this.chart.options.mapNavigation;e&&o(e.enableTouchZoom,e.enabled)&&(this.chart.zooming.pinchType="xy"),t.apply(this,[].slice.call(arguments,1))}t.compose=function(t){let e=t.prototype;e.onContainerDblClick||(s(e,{onContainerDblClick:n,onContainerMouseWheel:l}),r(e,"normalize",h),r(e,"zoomOption",p))}}(e||(e={})),e}),i(e,"Maps/MapSymbols.js",[],function(){let t;function e(e,i,s,o,r){if(r){let t=r?.r||0;r.brBoxY=i-t,r.brBoxHeight=o+t}return t.roundedRect(e,i,s,o,r)}function i(e,i,s,o,r){if(r){let t=r?.r||0;r.brBoxHeight=o+t}return t.roundedRect(e,i,s,o,r)}return{compose:function(s){(t=s.prototype.symbols).bottombutton=e,t.topbutton=i}}}),i(e,"Maps/MapNavigation.js",[e["Core/Defaults.js"],e["Core/Globals.js"],e["Maps/MapNavigationDefaults.js"],e["Maps/MapPointer.js"],e["Maps/MapSymbols.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,r){let{setOptions:a}=t,{composed:n}=e,{addEvent:l,extend:h,merge:p,objectEach:d,pick:c,pushUnique:u}=r;function m(t){t&&(t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0)}class g{static compose(t,e,r){s.compose(e),o.compose(r),u(n,"Map.Navigation")&&(l(t,"beforeRender",function(){this.mapNavigation=new g(this),this.mapNavigation.update()}),a(i))}constructor(t){this.chart=t,this.navButtons=[]}update(t){let e=this,i=e.chart,s=e.navButtons,o=function(t){this.handler.call(i,t),m(t)},r=i.options.mapNavigation;for(t&&(r=i.options.mapNavigation=p(i.options.mapNavigation,t));s.length;)s.pop().destroy();if(!i.renderer.forExport&&c(r.enableButtons,r.enabled)){e.navButtonsGroup||(e.navButtonsGroup=i.renderer.g().attr({zIndex:7}).add()),d(r.buttons,(t,a)=>{let n={padding:(t=p(r.buttonOptions,t)).padding};!i.styledMode&&t.theme&&(h(n,t.theme),n.style=p(t.theme.style,t.style));let{text:d,width:c=0,height:u=0,padding:g=0}=t,f=i.renderer.button("+"!==d&&"-"!==d&&d||"",0,0,o,n,void 0,void 0,void 0,"zoomIn"===a?"topbutton":"bottombutton").addClass("highcharts-map-navigation highcharts-"+({zoomIn:"zoom-in",zoomOut:"zoom-out"})[a]).attr({width:c,height:u,title:i.options.lang[a],zIndex:5}).add(e.navButtonsGroup);if("+"===d||"-"===d){let e=c+1,s=[["M",g+3,g+u/2],["L",g+e-3,g+u/2]];"+"===d&&s.push(["M",g+e/2,g+3],["L",g+e/2,g+u-3]),i.renderer.path(s).addClass("highcharts-button-symbol").attr(i.styledMode?{}:{stroke:t.style?.color,"stroke-width":3,"stroke-linecap":"round"}).add(f)}if(f.handler=t.onclick,l(f.element,"dblclick",m),s.push(f),h(t,{width:f.width,height:2*(f.height||0)}),i.hasLoaded)f.align(t,!1,t.alignTo);else{let e=l(i,"load",()=>{f.element&&f.align(t,!1,t.alignTo),e()})}});let t=(t,e)=>!(e.x>=t.x+t.width||e.x+e.width<=t.x||e.y>=t.y+t.height||e.y+e.height<=t.y);i.hasLoaded||l(i,"render",function(){let s=i.exportingGroup&&i.exportingGroup.getBBox();if(s){let i=e.navButtonsGroup.getBBox();if(t(s,i)){let t=-i.y-i.height+s.y-5,o=s.y+s.height-i.y+5,a=r.buttonOptions&&r.buttonOptions.verticalAlign;e.navButtonsGroup.attr({translateY:"bottom"===a?t:o})}}})}this.updateEvents(r)}updateEvents(t){let e=this.chart;c(t.enableDoubleClickZoom,t.enabled)||t.enableDoubleClickZoomTo?this.unbindDblClick=this.unbindDblClick||l(e.container,"dblclick",function(t){e.pointer.onContainerDblClick(t)}):this.unbindDblClick&&(this.unbindDblClick=this.unbindDblClick()),c(t.enableMouseWheelZoom,t.enabled)?this.unbindMouseWheel=this.unbindMouseWheel||l(e.container,"wheel",function(t){return e.pointer.inClass(t.target,"highcharts-no-mousewheel")||(e.pointer.onContainerMouseWheel(t),m(t)),!1}):this.unbindMouseWheel&&(this.unbindMouseWheel=this.unbindMouseWheel())}}return g}),i(e,"Series/ColorMapComposition.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{column:{prototype:o}}=t.seriesTypes,{addEvent:r,defined:a}=i;return function(t){function i(t){let i=this.series,s=i.chart.renderer;this.moveToTopOnHover&&this.graphic&&(i.stateMarkerGraphic||(i.stateMarkerGraphic=new e(s,"use").css({pointerEvents:"none"}).add(this.graphic.parentGroup)),t?.state==="hover"?(this.graphic.attr({id:this.id}),i.stateMarkerGraphic.attr({href:`${s.url}#${this.id}`,visibility:"visible"})):i.stateMarkerGraphic.attr({href:""}))}
23540t.pointMembers={dataLabelOnNull:!0,moveToTopOnHover:!0,isValid:function(){return null!==this.value&&this.value!==1/0&&this.value!==-1/0&&(void 0===this.value||!isNaN(this.value))}},t.seriesMembers={colorKey:"value",axisTypes:["xAxis","yAxis","colorAxis"],parallelArrays:["x","y","value"],pointArrayMap:["value"],trackerGroups:["group","markerGroup","dataLabelsGroup"],colorAttribs:function(t){let e={};return a(t.color)&&(!t.state||"normal"===t.state)&&(e[this.colorProp||"fill"]=t.color),e},pointAttribs:o.pointAttribs},t.compose=function(t){return r(t.prototype.pointClass,"afterSetState",i),t}}(s||(s={})),s}),i(e,"Core/Chart/MapChart.js",[e["Core/Chart/Chart.js"],e["Core/Defaults.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Utilities.js"]],function(t,e,i,s){var o;let{getOptions:r}=e,{isNumber:a,merge:n,pick:l}=s;class h extends t{init(t,e){let i=r().credits,s=n({chart:{panning:{enabled:!0,type:"xy"},type:"map"},credits:{mapText:l(i.mapText,' \xa9 <a href="{geojson.copyrightUrl}">{geojson.copyrightShort}</a>'),mapTextFull:l(i.mapTextFull,"{geojson.copyright}")},mapView:{},tooltip:{followTouchMove:!1}},t);super.init(s,e)}mapZoom(t,e,i,s,o){this.mapView&&(a(t)&&(t=Math.log(t)/Math.log(.5)),this.mapView.zoomBy(t,a(e)&&a(i)?this.mapView.projection.inverse([e,i]):void 0,a(s)&&a(o)?[s,o]:void 0))}update(t){t.chart&&"map"in t.chart&&this.mapView?.recommendMapView(this,[t.chart.map,...(this.options.series||[]).map(t=>t.mapData)],!0),super.update.apply(this,arguments)}}return(o=h||(h={})).maps={},o.mapChart=function(t,e,i){return new o(t,e,i)},o.splitPath=function(t){let e;return e="string"==typeof t?(t=t.replace(/([A-Za-z])/g," $1 ").replace(/^\s*/,"").replace(/\s*$/,"")).split(/[ ,;]+/).map(t=>/[A-Za-z]/.test(t)?t:parseFloat(t)):t,i.prototype.pathToSegments(e)},h}),i(e,"Maps/MapUtilities.js",[],function(){return{boundsFromPath:function(t){let e=-Number.MAX_VALUE,i=Number.MAX_VALUE,s=-Number.MAX_VALUE,o=Number.MAX_VALUE,r;if(t.forEach(t=>{let a=t[t.length-2],n=t[t.length-1];"number"==typeof a&&"number"==typeof n&&(i=Math.min(i,a),e=Math.max(e,a),o=Math.min(o,n),s=Math.max(s,n),r=!0)}),r)return{x1:i,y1:o,x2:e,y2:s}},pointInPolygon:function({x:t,y:e},i){let s,o,r=!1;for(s=0,o=i.length-1;s<i.length;o=s++)i[s][1]>e!=i[o][1]>e&&t<(i[o][0]-i[s][0])*(e-i[s][1])/(i[o][1]-i[s][1])+i[s][0]&&(r=!r);return r}}}),i(e,"Series/Map/MapPoint.js",[e["Series/ColorMapComposition.js"],e["Maps/MapUtilities.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{boundsFromPath:o}=e,r=i.seriesTypes.scatter.prototype.pointClass,{extend:a,isNumber:n,pick:l}=s;class h extends r{static getProjectedPath(t,e){return t.projectedPath||(e&&t.geometry?(e.hasCoordinates=!0,t.projectedPath=e.path(t.geometry)):t.projectedPath=t.path),t.projectedPath||[]}applyOptions(t,e){let i=this.series,s=super.applyOptions(t,e),o=i.joinBy;if(i.mapData&&i.mapMap){let t=o[1],e=super.getNestedProperty(t),r=void 0!==e&&i.mapMap[e];r?a(s,{...r,name:s.name??r.name}):-1!==i.pointArrayMap.indexOf("value")&&(s.value=s.value||null)}return s}getProjectedBounds(t){let e=o(h.getProjectedPath(this,t)),i=this.properties,s=this.series.chart.mapView;if(e){let o=i&&i["hc-middle-lon"],r=i&&i["hc-middle-lat"];if(s&&n(o)&&n(r)){let i=t.forward([o,r]);e.midX=i[0],e.midY=i[1]}else{let t=i&&i["hc-middle-x"],s=i&&i["hc-middle-y"];e.midX=e.x1+(e.x2-e.x1)*l(this.middleX,n(t)?t:.5);let o=l(this.middleY,n(s)?s:.5);this.geometry||(o=1-o),e.midY=e.y2-(e.y2-e.y1)*o}return e}}onMouseOver(t){s.clearTimeout(this.colorInterval),!this.isNull&&this.visible||this.series.options.nullInteraction?super.onMouseOver.call(this,t):this.series.onMouseOut()}setVisible(t){this.visible=this.options.visible=!!t,this.dataLabel&&this.dataLabel[t?"show":"hide"](),this.graphic&&this.graphic.attr(this.series.pointAttribs(this))}zoomTo(t){let e=this.series.chart,i=e.mapView,s=this.bounds;if(i&&s){let o=n(this.insetIndex)&&i.insets[this.insetIndex];if(o){let t=o.projectedUnitsToPixels({x:s.x1,y:s.y1}),e=o.projectedUnitsToPixels({x:s.x2,y:s.y2}),r=i.pixelsToProjectedUnits({x:t.x,y:t.y}),a=i.pixelsToProjectedUnits({x:e.x,y:e.y});s={x1:r.x,y1:r.y,x2:a.x,y2:a.y}}i.fitToBounds(s,void 0,!1),this.series.isDirty=!0,e.redraw(t)}}}
vendor: 29,440 bytes, line 23540
23540return a(h.prototype,{dataLabelOnNull:t.pointMembers.dataLabelOnNull,moveToTopOnHover:t.pointMembers.moveToTopOnHover,isValid:t.pointMembers.isValid}),h}),i(e,"Series/Map/MapSeriesDefaults.js",[e["Core/Utilities.js"]],function(t){let{isNumber:e}=t;return{affectsMapView:!0,animation:!1,dataLabels:{crop:!1,formatter:function(){let{numberFormatter:t}=this.series.chart,{value:i}=this.point;return e(i)?t(i,-1):this.point.name},inside:!0,overflow:!1,padding:0,verticalAlign:"middle"},linecap:"round",marker:null,nullColor:"#f7f7f7",stickyTracking:!1,tooltip:{followPointer:!0,pointFormat:"{point.name}: {point.value}<br/>"},turboThreshold:0,allAreas:!0,borderColor:"#e6e6e6",borderWidth:1,joinBy:"hc-key",states:{hover:{halo:void 0,borderColor:"#666666",borderWidth:2},normal:{animation:!0},select:{color:"#cccccc"}},legendSymbol:"rectangle"}}),i(e,"Maps/MapViewDefaults.js",[],function(){return{center:[0,0],fitToGeometry:void 0,maxZoom:void 0,padding:0,projection:{name:void 0,parallels:void 0,rotation:void 0},zoom:void 0,insetOptions:{borderColor:"#cccccc",borderWidth:1,padding:"10%",relativeTo:"mapBoundingBox",units:"percent"}}}),i(e,"Maps/GeoJSONComposition.js",[e["Core/Globals.js"],e["Core/Templating.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{win:o}=t,{format:r}=e,{error:a,extend:n,merge:l,wrap:h}=i;return function(t){function e(t){return this.mapView&&this.mapView.lonLatToProjectedUnits(t)}function i(t){return this.mapView&&this.mapView.projectedUnitsToLonLat(t)}function s(t,e){let i=this.options.chart.proj4||o.proj4;if(!i){a(21,!1,this);return}let{jsonmarginX:s=0,jsonmarginY:r=0,jsonres:n=1,scale:l=1,xoffset:h=0,xpan:p=0,yoffset:d=0,ypan:c=0}=e,u=i(e.crs,[t.lon,t.lat]),m=e.cosAngle||e.rotation&&Math.cos(e.rotation),g=e.sinAngle||e.rotation&&Math.sin(e.rotation),f=e.rotation?[u[0]*m+u[1]*g,-u[0]*g+u[1]*m]:u;return{x:((f[0]-h)*l+p)*n+s,y:-(((d-f[1])*l+c)*n-r)}}function p(t,e){let i=this.options.chart.proj4||o.proj4;if(!i){a(21,!1,this);return}if(null===t.y)return;let{jsonmarginX:s=0,jsonmarginY:r=0,jsonres:n=1,scale:l=1,xoffset:h=0,xpan:p=0,yoffset:d=0,ypan:c=0}=e,u={x:((t.x-s)/n-p)/l+h,y:((t.y-r)/n+c)/l+d},m=e.cosAngle||e.rotation&&Math.cos(e.rotation),g=e.sinAngle||e.rotation&&Math.sin(e.rotation),f=i(e.crs,"WGS84",e.rotation?{x:u.x*m+-(u.y*g),y:u.x*g+u.y*m}:u);return{lat:f.y,lon:f.x}}function d(t,e){e||(e=Object.keys(t.objects)[0]);let i=t.objects[e];if(i["hc-decoded-geojson"]&&i["hc-decoded-geojson"].title===t.title)return i["hc-decoded-geojson"];let s=t.arcs;if(t.transform){let e,i,o;let r=t.arcs,{scale:a,translate:n}=t.transform;s=[];for(let t=0,l=r.length;t<l;++t){let l=r[t];s.push(e=[]),i=0,o=0;for(let t=0,s=l.length;t<s;++t)e.push([(i+=l[t][0])*a[0]+n[0],(o+=l[t][1])*a[1]+n[1]])}}let o=t=>"number"==typeof t[0]?t.reduce((t,e,i)=>{let o=e<0?s[~e]:s[e];return e<0?(o=o.slice(0,0===i?o.length:o.length-1)).reverse():i&&(o=o.slice(1)),t.concat(o)},[]):t.map(o),r=i.geometries,a=[];for(let t=0,e=r.length;t<e;++t)a.push({type:"Feature",properties:r[t].properties,geometry:{type:r[t].type,coordinates:r[t].coordinates||o(r[t].arcs)}});let n={type:"FeatureCollection",copyright:t.copyright,copyrightShort:t.copyrightShort,copyrightUrl:t.copyrightUrl,features:a,"hc-recommended-mapview":i["hc-recommended-mapview"],bbox:t.bbox,title:t.title};return i["hc-decoded-geojson"]=n,n}function c(t,e){e=l(!0,this.options.credits,e),this.mapCredits&&(e.href=void 0),t.call(this,e),this.credits&&this.mapCreditsFull&&this.credits.attr({title:this.mapCreditsFull})}t.compose=function(t){let o=t.prototype;o.transformFromLatLon||(o.fromLatLonToPoint=e,o.fromPointToLatLon=i,o.transformFromLatLon=s,o.transformToLatLon=p,h(o,"addCredits",c))},t.geojson=function(t,e="map",i){let s=[],o="Topology"===t.type?d(t):t,a=o.features;for(let t=0,i=a.length;t<i;++t){let i;let o=a[t],r=o.geometry||{},l=r.type,h=r.coordinates,p=o.properties;if(("map"===e||"mapbubble"===e)&&("Polygon"===l||"MultiPolygon"===l)?h.length&&(i={geometry:{coordinates:h,type:l}}):"mapline"===e&&("LineString"===l||"MultiLineString"===l)?h.length&&(i={geometry:{coordinates:h,type:l}}):"mappoint"===e&&"Point"===l&&h.length&&(i={geometry:{coordinates:h,type:l}}),i){let t=p&&(p.name||p.NAME),e=p&&p.lon,o=p&&p.lat;s.push(n(i,{lat:"number"==typeof o?o:void 0,lon:"number"==typeof e?e:void 0,name:"string"==typeof t?t:void 0,properties:p}))}}return i&&o.copyrightShort&&(i.chart.mapCredits=r(i.chart.options.credits?.mapText,{geojson:o}),i.chart.mapCreditsFull=r(i.chart.options.credits?.mapTextFull,{geojson:o})),s},t.topo2geo=d}(s||(s={})),s}),i(e,"Core/Geometry/PolygonClip.js",[],function(){function t(t,s,o=!0){let r=s[s.length-1],a,n,l,h=t;for(let t=0;t<s.length;t++){let p=h;a=s[t],h=[],n=o?p[p.length-1]:p[0];for(let t=0;t<p.length;t++)e(r,a,l=p[t])?(e(r,a,n)||h.push(i(r,a,n,l)),h.push(l)):e(r,a,n)&&h.push(i(r,a,n,l)),n=l;r=a}return h}function e(t,e,i){return(e[0]-t[0])*(i[1]-t[1])>(e[1]-t[1])*(i[0]-t[0])}function i(t,e,i,s){let o=[t[0]-e[0],t[1]-e[1]],r=[i[0]-s[0],i[1]-s[1]],a=t[0]*e[1]-t[1]*e[0],n=i[0]*s[1]-i[1]*s[0],l=1/(o[0]*r[1]-o[1]*r[0]),h=[(a*r[0]-n*o[0])*l,(a*r[1]-n*o[1])*l];return h.isIntersection=!0,h}return{clipLineString:function(e,i){let s=[],o=t(e,i,!1);for(let t=1;t<o.length;t++)o[t].isIntersection&&o[t-1].isIntersection&&(s.push(o.splice(0,t)),t=0),t===o.length-1&&s.push(o);return s},clipPolygon:t}}),i(e,"Maps/Projections/LambertConformalConic.js",[],function(){let t=Math.sign||(t=>0===t?0:t>0?1:-1),e=Math.PI/180,i=Math.PI/2,s=t=>Math.tan((i+t)/2);return class{constructor(i){let o=(i.parallels||[]).map(t=>t*e),r=o[0]||0,a=o[1]??r,n=Math.cos(r);"object"==typeof i.projectedBounds&&(this.projectedBounds=i.projectedBounds);let l=r===a?Math.sin(r):Math.log(n/Math.cos(a))/Math.log(s(a)/s(r));1e-10>Math.abs(l)&&(l=1e-10*(t(l)||1)),this.n=l,this.c=n*Math.pow(s(r),l)/l}forward(t){let{c:o,n:r,projectedBounds:a}=this,n=t[0]*e,l=t[1]*e;o>0?l<-i+1e-6&&(l=-i+1e-6):l>i-1e-6&&(l=i-1e-6);let h=o/Math.pow(s(l),r),p=h*Math.sin(r*n)*63.78137,d=(o-h*Math.cos(r*n))*63.78137,c=[p,d];return a&&(p<a.x1||p>a.x2||d<a.y1||d>a.y2)&&(c.outside=!0),c}inverse(s){let{c:o,n:r}=this,a=s[0]/63.78137,n=o-s[1]/63.78137,l=t(r)*Math.sqrt(a*a+n*n),h=Math.atan2(a,Math.abs(n))*t(n);return n*r<0&&(h-=Math.PI*t(a)*t(n)),[h/r/e,(2*Math.atan(Math.pow(o/l,1/r))-i)/e]}}}),i(e,"Maps/Projections/EqualEarth.js",[],function(){let t=Math.sqrt(3)/2;return class{constructor(){this.bounds={x1:-200.37508342789243,x2:200.37508342789243,y1:-97.52595454902263,y2:97.52595454902263}}forward(e){let i=Math.PI/180,s=Math.asin(t*Math.sin(e[1]*i)),o=s*s,r=o*o*o;return[e[0]*i*Math.cos(s)*74.03120656864502/(t*(1.340264+-.24331799999999998*o+r*(.0062510000000000005+.034164*o))),74.03120656864502*s*(1.340264+-.081106*o+r*(893e-6+.003796*o))]}inverse(e){let i=e[0]/74.03120656864502,s=e[1]/74.03120656864502,o=180/Math.PI,r=s,a,n,l,h;for(let t=0;t<12&&(n=(a=r*r)*a*a,l=r*(1.340264+-.081106*a+n*(893e-6+.003796*a))-s,r-=h=l/(1.340264+-.24331799999999998*a+n*(.0062510000000000005+.034164*a)),!(1e-9>Math.abs(h)));++t);n=(a=r*r)*a*a;let p=o*t*i*(1.340264+-.24331799999999998*a+n*(.0062510000000000005+.034164*a))/Math.cos(r),d=o*Math.asin(Math.sin(r)/t);return Math.abs(p)>180?[NaN,NaN]:[p,d]}}}),i(e,"Maps/Projections/Miller.js",[],function(){let t=Math.PI/4,e=Math.PI/180;return class{constructor(){this.bounds={x1:-200.37508342789243,x2:200.37508342789243,y1:-146.91480769173063,y2:146.91480769173063}}forward(i){return[i[0]*e*63.78137,79.7267125*Math.log(Math.tan(t+.4*i[1]*e))]}inverse(i){return[i[0]/63.78137/e,2.5*(Math.atan(Math.exp(i[1]/63.78137*.8))-t)/e]}}}),i(e,"Maps/Projections/Orthographic.js",[],function(){let t=Math.PI/180;return class{constructor(){this.antimeridianCutting=!1,this.bounds={x1:-63.78460826781007,x2:63.78460826781007,y1:-63.78460826781007,y2:63.78460826781007}}forward(e){let i=e[0],s=e[1]*t,o=[Math.cos(s)*Math.sin(i*t)*63.78460826781007,63.78460826781007*Math.sin(s)];return(i<-90||i>90)&&(o.outside=!0),o}inverse(e){let i=e[0]/63.78460826781007,s=e[1]/63.78460826781007,o=Math.sqrt(i*i+s*s),r=Math.asin(o),a=Math.sin(r);return[Math.atan2(i*a,o*Math.cos(r))/t,Math.asin(o&&s*a/o)/t]}}}),i(e,"Maps/Projections/WebMercator.js",[],function(){let t=Math.PI/180;return class{constructor(){this.bounds={x1:-200.37508342789243,x2:200.37508342789243,y1:-200.3750834278071,y2:200.3750834278071},this.maxLatitude=85.0511287798}forward(e){let i=Math.sin(e[1]*t),s=[63.78137*e[0]*t,63.78137*Math.log((1+i)/(1-i))/2];return Math.abs(e[1])>this.maxLatitude&&(s.outside=!0),s}inverse(e){return[e[0]/(63.78137*t),(2*Math.atan(Math.exp(e[1]/63.78137))-Math.PI/2)/t]}}}),i(e,"Maps/Projections/ProjectionRegistry.js",[e["Maps/Projections/LambertConformalConic.js"],e["Maps/Projections/EqualEarth.js"],e["Maps/Projections/Miller.js"],e["Maps/Projections/Orthographic.js"],e["Maps/Projections/WebMercator.js"]],function(t,e,i,s,o){return{EqualEarth:e,LambertConformalConic:t,Miller:i,Orthographic:s,WebMercator:o}}),i(e,"Maps/Projection.js",[e["Core/Geometry/PolygonClip.js"],e["Maps/Projections/ProjectionRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{clipLineString:s,clipPolygon:o}=t,{clamp:r,erase:a}=i,n=2*Math.PI/360,l=t=>(t<-180&&(t+=360),t>180&&(t-=360),t),h=t=>(1-Math.cos(t))/2,p=(t,e)=>{let i=Math.cos,s=t[1]*n,o=t[0]*n,r=e[1]*n,a=e[0]*n;return h(r-s)+i(s)*i(r)*h(a-o)};class d{static add(t,e){d.registry[t]=e}static distance(t,e){let{atan2:i,sqrt:s}=Math,o=p(t,e);return 2*i(s(o),s(1-o))*6371e3}static geodesic(t,e,i,s=5e5){let{atan2:o,cos:r,sin:a,sqrt:l}=Math,h=d.distance,p=t[1]*n,c=t[0]*n,u=e[1]*n,m=e[0]*n,g=r(p)*r(c),f=r(u)*r(m),b=r(p)*a(c),y=r(u)*a(m),x=a(p),M=a(u),C=h(t,e),j=C/6371e3,v=a(j),w=Math.round(C/s),S=[];if(i&&S.push(t),w>1){let t=1/w;for(let e=t;e<.999;e+=t){let t=a((1-e)*j)/v,i=a(e*j)/v,s=t*g+i*f,r=t*b+i*y,h=o(t*x+i*M,l(s*s+r*r)),p=o(r,s);S.push([p/n,h/n])}}return i&&S.push(e),S}static insertGeodesics(t){let e=t.length-1;for(;e--;)if(Math.max(Math.abs(t[e][0]-t[e+1][0]),Math.abs(t[e][1]-t[e+1][1]))>10){let i=d.geodesic(t[e],t[e+1]);i.length&&t.splice(e+1,0,...i)}}static toString(t){let{name:e,rotation:i}=t||{};return[e,i&&i.join(",")].join(";")}constructor(t={}){this.hasCoordinates=!1,this.hasGeoProjection=!1,this.maxLatitude=90,this.options=t;let{name:e,projectedBounds:i,rotation:s}=t;this.rotator=s?this.getRotator(s):void 0;let o=e?d.registry[e]:void 0;o&&(this.def=new o(t));let{def:r,rotator:a}=this;r&&(this.maxLatitude=r.maxLatitude||90,this.hasGeoProjection=!0),a&&r?(this.forward=t=>r.forward(a.forward(t)),this.inverse=t=>a.inverse(r.inverse(t))):r?(this.forward=t=>r.forward(t),this.inverse=t=>r.inverse(t)):a&&(this.forward=a.forward,this.inverse=a.inverse),this.bounds="world"===i?r&&r.bounds:i}lineIntersectsBounds(t){let{x1:e,x2:i,y1:s,y2:o}=this.bounds||{},r=(t,e,i)=>{let[s,o]=t,r=e?0:1;if("number"==typeof i&&s[e]>=i!=o[e]>=i){let t=(i-s[e])/(o[e]-s[e]),a=s[r]+t*(o[r]-s[r]);return e?[a,i]:[i,a]}},a,n=t[0];return(a=r(t,0,e))?(n=a,t[1]=a):(a=r(t,0,i))&&(n=a,t[1]=a),(a=r(t,1,s))?n=a:(a=r(t,1,o))&&(n=a),n}getRotator(t){let e=t[0]*n,i=(t[1]||0)*n,s=(t[2]||0)*n,o=Math.cos(i),r=Math.sin(i),a=Math.cos(s),l=Math.sin(s);if(0!==e||0!==i||0!==s)return{forward:t=>{let i=t[0]*n+e,s=t[1]*n,h=Math.cos(s),p=Math.cos(i)*h,d=Math.sin(i)*h,c=Math.sin(s),u=c*o+p*r;return[Math.atan2(d*a-u*l,p*o-c*r)/n,Math.asin(u*a+d*l)/n]},inverse:t=>{let i=t[0]*n,s=t[1]*n,h=Math.cos(s),p=Math.cos(i)*h,d=Math.sin(i)*h,c=Math.sin(s),u=c*a-d*l;return[(Math.atan2(d*a+c*l,p*o+u*r)-e)/n,Math.asin(u*o-p*r)/n]}}}forward(t){return t}inverse(t){return t}cutOnAntimeridian(t,e){let i;let s=[],o=[t];for(let i=0,o=t.length;i<o;++i){let o=t[i],a=t[i-1];if(!i){if(!e)continue;a=t[t.length-1]}let n=a[0],l=o[0];if((n<-90||n>90)&&(l<-90||l>90)&&n>0!=l>0){let t=r((180-(n+360)%360)/((l+360)%360-(n+360)%360),0,1),e=a[1]+t*(o[1]-a[1]);s.push({i,lat:e,direction:n<0?1:-1,previousLonLat:a,lonLat:o})}}if(s.length){if(e){s.length%2==1&&(i=s.slice().sort((t,e)=>Math.abs(e.lat)-Math.abs(t.lat))[0],a(s,i));let e=s.length-2;for(;e>=0;){let i=s[e].i,r=l(180+1e-6*s[e].direction),a=l(180-1e-6*s[e].direction),n=t.splice(i,s[e+1].i-i,...d.geodesic([r,s[e].lat],[r,s[e+1].lat],!0));n.push(...d.geodesic([a,s[e+1].lat],[a,s[e].lat],!0)),o.push(n),e-=2}if(i)for(let t=0;t<o.length;t++){let{direction:e,lat:s}=i,r=o[t],a=r.indexOf(i.lonLat);if(a>-1){let t=(s<0?-1:1)*this.maxLatitude,o=l(180+1e-6*e),n=l(180-1e-6*e),h=d.geodesic([o,s],[o,t],!0);for(let i=o+120*e;i>-180&&i<180;i+=120*e)h.push([i,t]);h.push(...d.geodesic([n,t],[n,i.lat],!0)),r.splice(a,0,...h);break}}}else{let e=s.length;for(;e--;){let i=s[e].i,r=t.splice(i,t.length,[l(180+1e-6*s[e].direction),s[e].lat]);r.unshift([l(180-1e-6*s[e].direction),s[e].lat]),o.push(r)}}}return o}path(t){let e;let{bounds:i,def:r,rotator:a}=this,n=[],l="Polygon"===t.type||"MultiPolygon"===t.type,h=this.hasGeoProjection,p=!r||!1!==r.antimeridianCutting,c=p?a:void 0,u=p&&r||this;i&&(e=[[i.x1,i.y1],[i.x2,i.y1],[i.x2,i.y2],[i.x1,i.y2]]);let m=t=>{let r=t.map(t=>{if(p){c&&(t=c.forward(t));let e=t[0];1e-6>Math.abs(e-180)&&(e=e<180?179.999999:180.000001),t=[e,t[1]]}return t}),a=[r];h&&(d.insertGeodesics(r),p&&(a=this.cutOnAntimeridian(r,l))),a.forEach(t=>{let r,a;if(t.length<2)return;let c=!1,m=!1,g=t=>{c?n.push(["L",t[0],t[1]]):(n.push(["M",t[0],t[1]]),c=!0)},f=!1,b=!1,y=t.map(t=>{let e=u.forward(t);return e.outside?f=!0:b=!0,e[1]===1/0?e[1]=1e10:e[1]===-1/0&&(e[1]=-1e10),e});if(p){if(l&&y.push(y[0]),f){if(!b)return;if(e){if(l)y=o(y,e);else if(i){s(y,e).forEach(t=>{c=!1,t.forEach(g)});return}}}y.forEach(g)}else for(let e=0;e<y.length;e++){let i=t[e],s=y[e];s.outside?m=!0:(l&&!r&&(r=i,t.push(i),y.push(s)),m&&a&&(l&&h?d.geodesic(a,i).forEach(t=>g(u.forward(t))):c=!1),g(s),a=i,m=!1)}})};return"LineString"===t.type?m(t.coordinates):"MultiLineString"===t.type?t.coordinates.forEach(t=>m(t)):"Polygon"===t.type?(t.coordinates.forEach(t=>m(t)),n.length&&n.push(["Z"])):"MultiPolygon"===t.type&&(t.coordinates.forEach(t=>{t.forEach(t=>m(t))}),n.length&&n.push(["Z"])),n}}return d.registry=e,d}),i(e,"Maps/MapView.js",[e["Core/Globals.js"],e["Maps/MapViewDefaults.js"],e["Maps/GeoJSONComposition.js"],e["Maps/MapUtilities.js"],e["Maps/Projection.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,r){let{composed:a}=t,{topo2geo:n}=i,{boundsFromPath:l,pointInPolygon:h}=s,{addEvent:p,clamp:d,crisp:c,fireEvent:u,isArray:m,isNumber:g,isObject:f,isString:b,merge:y,pick:x,pushUnique:M,relativeLength:C}=r,j={};function v(t,e){let{width:i,height:s}=e;return Math.log(400.979322/Math.max((t.x2-t.x1)/(i/256),(t.y2-t.y1)/(s/256)))/Math.log(2)}function w(t){t.seriesOptions.mapData&&this.mapView?.recommendMapView(this,[this.options.chart.map,t.seriesOptions.mapData],this.options.drilldown?.mapZooming)}class S{static compose(t){M(a,"MapView")&&(j=t.maps,p(t,"afterInit",function(){this.mapView=new S(this,this.options.mapView)},{order:0}),p(t,"addSeriesAsDrilldown",w),p(t,"afterDrillUp",w))}static compositeBounds(t){if(t.length)return t.slice(1).reduce((t,e)=>(t.x1=Math.min(t.x1,e.x1),t.y1=Math.min(t.y1,e.y1),t.x2=Math.max(t.x2,e.x2),t.y2=Math.max(t.y2,e.y2),t),y(t[0]))}static mergeInsets(t,e){let i=t=>{let e={};return t.forEach((t,i)=>{e[t&&t.id||`i${i}`]=t}),e},s=y(i(t),i(e));return Object.keys(s).map(t=>s[t])}constructor(t,i){this.allowTransformAnimation=!0,this.eventsToUnbind=[],this.insets=[],this.padding=[0,0,0,0],this.recommendedMapView={},this instanceof P||this.recommendMapView(t,[t.options.chart.map,...(t.options.series||[]).map(t=>t.mapData)]),this.userOptions=i||{};let s=y(e,this.recommendedMapView,i),r=this.recommendedMapView?.insets,a=i&&i.insets;r&&a&&(s.insets=S.mergeInsets(r,a)),this.chart=t,this.center=s.center,this.options=s,this.projection=new o(s.projection),this.playingField=t.plotBox,this.zoom=s.zoom||0,this.minZoom=s.minZoom,this.createInsets(),this.eventsToUnbind.push(p(t,"afterSetChartSize",()=>{this.playingField=this.getField(),(void 0===this.minZoom||this.minZoom===this.zoom)&&(this.fitToBounds(void 0,void 0,!1),!this.chart.hasRendered&&g(this.userOptions.zoom)&&(this.zoom=this.userOptions.zoom),this.userOptions.center&&y(!0,this.center,this.userOptions.center))})),this.setUpEvents()}createInsets(){let t=this.options,e=t.insets;e&&e.forEach(e=>{let i=new P(this,y(t.insetOptions,e));this.insets.push(i)})}fitToBounds(t,e,i=!0,s){let o=t||this.getProjectedBounds();if(o){let r=x(e,t?0:this.options.padding),a=this.getField(!1),n=m(r)?r:[r,r,r,r];this.padding=[C(n[0],a.height),C(n[1],a.width),C(n[2],a.height),C(n[3],a.width)],this.playingField=this.getField();let l=v(o,this.playingField);t||(this.minZoom=l);let h=this.projection.inverse([(o.x2+o.x1)/2,(o.y2+o.y1)/2]);this.setView(h,l,i,s)}}getField(t=!0){let e=t?this.padding:[0,0,0,0];return{x:e[3],y:e[0],width:this.chart.plotWidth-e[1]-e[3],height:this.chart.plotHeight-e[0]-e[2]}}getGeoMap(t){if(b(t))return j[t]&&"Topology"===j[t].type?n(j[t]):j[t];if(f(t,!0)){if("FeatureCollection"===t.type)return t;if("Topology"===t.type)return n(t)}}getMapBBox(){let t=this.getProjectedBounds(),e=this.getScale();if(t){let i=this.padding,s=this.projectedUnitsToPixels({x:t.x1,y:t.y2});return{width:(t.x2-t.x1)*e+i[1]+i[3],height:(t.y2-t.y1)*e+i[0]+i[2],x:s.x-i[3],y:s.y-i[0]}}}getProjectedBounds(){let t=this.projection,e=this.chart.series.reduce((t,e)=>{let i=e.getProjectedBounds&&e.getProjectedBounds();return i&&!1!==e.options.affectsMapView&&t.push(i),t},[]),i=this.options.fitToGeometry;if(i){if(!this.fitToGeometryCache){if("MultiPoint"===i.type){let e=i.coordinates.map(e=>t.forward(e)),s=e.map(t=>t[0]),o=e.map(t=>t[1]);this.fitToGeometryCache={x1:Math.min.apply(0,s),x2:Math.max.apply(0,s),y1:Math.min.apply(0,o),y2:Math.max.apply(0,o)}}else this.fitToGeometryCache=l(t.path(i))}return this.fitToGeometryCache}return this.projection.bounds||S.compositeBounds(e)}getScale(){return 256/400.979322*Math.pow(2,this.zoom)}getSVGTransform(){let{x:t,y:e,width:i,height:s}=this.playingField,o=this.projection.forward(this.center),r=this.projection.hasCoordinates?-1:1,a=this.getScale(),n=a*r,l=t+i/2-o[0]*a,h=e+s/2-o[1]*n;return{scaleX:a,scaleY:n,translateX:l,translateY:h}}lonLatToPixels(t){let e=this.lonLatToProjectedUnits(t);if(e)return this.projectedUnitsToPixels(e)}lonLatToProjectedUnits(t){let e=this.chart,i=e.mapTransforms;if(i){for(let s in i)if(Object.hasOwnProperty.call(i,s)&&i[s].hitZone){let o=e.transformFromLatLon(t,i[s]);if(o&&h(o,i[s].hitZone.coordinates[0]))return o}return e.transformFromLatLon(t,i.default)}for(let e of this.insets)if(e.options.geoBounds&&h({x:t.lon,y:t.lat},e.options.geoBounds.coordinates[0])){let i=e.projection.forward([t.lon,t.lat]),s=e.projectedUnitsToPixels({x:i[0],y:i[1]});return this.pixelsToProjectedUnits(s)}let s=this.projection.forward([t.lon,t.lat]);if(!s.outside)return{x:s[0],y:s[1]}}projectedUnitsToLonLat(t){let e=this.chart,i=e.mapTransforms;if(i){for(let s in i)if(Object.hasOwnProperty.call(i,s)&&i[s].hitZone&&h(t,i[s].hitZone.coordinates[0]))return e.transformToLatLon(t,i[s]);return e.transformToLatLon(t,i.default)}let s=this.projectedUnitsToPixels(t);for(let t of this.insets)if(t.hitZone&&h(s,t.hitZone.coordinates[0])){let e=t.pixelsToProjectedUnits(s),i=t.projection.inverse([e.x,e.y]);return{lon:i[0],lat:i[1]}}let o=this.projection.inverse([t.x,t.y]);return{lon:o[0],lat:o[1]}}recommendMapView(t,e,i=!1){this.recommendedMapView={};let s=e.map(t=>this.getGeoMap(t)),o=[];s.forEach(t=>{if(t&&(Object.keys(this.recommendedMapView).length||(this.recommendedMapView=t["hc-recommended-mapview"]||{}),t.bbox)){let[e,i,s,r]=t.bbox;o.push({x1:e,y1:i,x2:s,y2:r})}});let r=o.length&&S.compositeBounds(o);u(this,"onRecommendMapView",{geoBounds:r,chart:t},function(){if(r&&this.recommendedMapView){if(!this.recommendedMapView.projection){let{x1:t,y1:e,x2:i,y2:s}=r;this.recommendedMapView.projection=i-t>180&&s-e>90?{name:"EqualEarth",parallels:[0,0],rotation:[0]}:{name:"LambertConformalConic",parallels:[e,s],rotation:[-(t+i)/2]}}this.recommendedMapView.insets||(this.recommendedMapView.insets=void 0)}}),this.geoMap=s[0],i&&t.hasRendered&&!t.userOptions.mapView?.projection&&this.recommendedMapView&&this.update(this.recommendedMapView)}redraw(t){this.chart.series.forEach(t=>{t.useMapGeometry&&(t.isDirty=!0)}),this.chart.redraw(t)}setView(t,e,i=!0,s){t&&(this.center=t),"number"==typeof e&&("number"==typeof this.minZoom&&(e=Math.max(e,this.minZoom)),"number"==typeof this.options.maxZoom&&(e=Math.min(e,this.options.maxZoom)),g(e)&&(this.zoom=e));let o=this.getProjectedBounds();if(o){let t=this.projection.forward(this.center),{x:e,y:i,width:s,height:r}=this.playingField,a=this.getScale(),n=this.projectedUnitsToPixels({x:o.x1,y:o.y1}),l=this.projectedUnitsToPixels({x:o.x2,y:o.y2}),h=[(o.x1+o.x2)/2,(o.y1+o.y2)/2];if(!this.chart.series.some(t=>t.isDrilling)){let o=n.x,p=l.y,d=l.x,c=n.y;d-o<s?t[0]=h[0]:o<e&&d<e+s?t[0]+=Math.max(o-e,d-s-e)/a:d>e+s&&o>e&&(t[0]+=Math.min(d-s-e,o-e)/a),c-p<r?t[1]=h[1]:p<i&&c<i+r?t[1]-=Math.max(p-i,c-r-i)/a:c>i+r&&p>i&&(t[1]-=Math.min(c-r-i,p-i)/a),this.center=this.projection.inverse(t)}this.insets.forEach(t=>{t.options.field&&(t.hitZone=t.getHitZone(),t.playingField=t.getField())}),this.render()}u(this,"afterSetView"),i&&this.redraw(s)}projectedUnitsToPixels(t){let e=this.getScale(),i=this.projection.forward(this.center),s=this.playingField,o=s.x+s.width/2,r=s.y+s.height/2;return{x:o-e*(i[0]-t.x),y:r+e*(i[1]-t.y)}}pixelsToLonLat(t){return this.projectedUnitsToLonLat(this.pixelsToProjectedUnits(t))}pixelsToProjectedUnits(t){let{x:e,y:i}=t,s=this.getScale(),o=this.projection.forward(this.center),r=this.playingField,a=r.x+r.width/2,n=r.y+r.height/2;return{x:o[0]+(e-a)/s,y:o[1]-(i-n)/s}}setUpEvents(){let t,e,i;let{chart:s}=this,o=o=>{let{lastTouches:r,pinchDown:a}=s.pointer,n=this.projection,l=o.touches,{mouseDownX:h,mouseDownY:p}=s,c=0;if(a?.length===1?(h=a[0].chartX,p=a[0].chartY):a?.length===2&&(h=(a[0].chartX+a[1].chartX)/2,p=(a[0].chartY+a[1].chartY)/2),l?.length===2&&r&&(c=Math.log(Math.sqrt(Math.pow(r[0].chartX-r[1].chartX,2)+Math.pow(r[0].chartY-r[1].chartY,2))/Math.sqrt(Math.pow(l[0].chartX-l[1].chartX,2)+Math.pow(l[0].chartY-l[1].chartY,2)))/Math.log(.5)),g(h)&&g(p)){let r=`${h},${p}`,{chartX:a,chartY:u}=o.originalEvent;l?.length===2&&(a=(l[0].chartX+l[1].chartX)/2,u=(l[0].chartY+l[1].chartY)/2),r!==e&&(e=r,t=this.projection.forward(this.center),i=(this.projection.options.rotation||[0,0]).slice());let m=n.def&&n.def.bounds,f=m&&v(m,this.playingField)||-1/0;if("Orthographic"===n.options.name&&2>(l?.length||0)&&(this.minZoom||1/0)<1.3*f){let t=440/(this.getScale()*Math.min(s.plotWidth,s.plotHeight));if(i){let e=(h-a)*t-i[0],o=d(-i[1]-(p-u)*t,-80,80),r=this.zoom;this.update({projection:{rotation:[-e,-o]}},!1),this.fitToBounds(void 0,void 0,!1),this.zoom=r,s.redraw(!1)}}else if(g(a)&&g(u)){let e=this.getScale(),i=this.projection.hasCoordinates?1:-1,s=this.projection.inverse([t[0]+(h-a)/e,t[1]-(p-u)/e*i]);isNaN(s[0]+s[1])||this.zoomBy(c,s,void 0,!1)}o.preventDefault()}};p(s,"pan",o),p(s,"touchpan",o),p(s,"selection",t=>{if(t.resetSelection)this.zoomBy();else{let e=t.x-s.plotLeft,i=t.y-s.plotTop,{y:o,x:r}=this.pixelsToProjectedUnits({x:e,y:i}),{y:a,x:n}=this.pixelsToProjectedUnits({x:e+t.width,y:i+t.height});this.fitToBounds({x1:r,y1:o,x2:n,y2:a},void 0,!0,!t.originalEvent.touches&&void 0),/^touch/.test(t.originalEvent.type)||s.showResetZoom(),t.preventDefault()}})}render(){this.group||(this.group=this.chart.renderer.g("map-view").attr({zIndex:4}).add())}update(t,e=!0,i){let s=t.projection,r=s&&o.toString(s)!==o.toString(this.options.projection),a=!1;y(!0,this.userOptions,t),y(!0,this.options,t),"insets"in t&&(this.insets.forEach(t=>t.destroy()),this.insets.length=0,a=!0),(r||"fitToGeometry"in t)&&delete this.fitToGeometryCache,(r||a)&&(this.chart.series.forEach(t=>{let e=t.transformGroups;if(t.clearBounds&&t.clearBounds(),t.isDirty=!0,t.isDirtyData=!0,a&&e)for(;e.length>1;){let t=e.pop();t&&t.destroy()}}),r&&(this.projection=new o(this.options.projection)),a&&this.createInsets(),!t.center&&Object.hasOwnProperty.call(t,"zoom")&&!g(t.zoom)&&this.fitToBounds(void 0,void 0,!1)),t.center||g(t.zoom)?this.setView(this.options.center,t.zoom,!1):"fitToGeometry"in t&&this.fitToBounds(void 0,void 0,!1),e&&this.chart.redraw(i)}zoomBy(t,e,i,s){let o=this.chart,r=this.projection.forward(this.center);if("number"==typeof t){let a,n,l;let h=this.zoom+t;if(i){let[t,e]=i,s=this.getScale(),a=t-o.plotLeft-o.plotWidth/2,h=e-o.plotTop-o.plotHeight/2;n=r[0]+a/s,l=r[1]+h/s}if("number"==typeof n&&"number"==typeof l){let t=1-Math.pow(2,this.zoom)/Math.pow(2,h),e=r[0]-n,i=r[1]-l;r[0]-=e*t,r[1]+=i*t,a=this.projection.inverse(r)}this.setView(e||a,h,void 0,s)}else this.fitToBounds(void 0,void 0,void 0,s)}}class P extends S{constructor(t,e){if(super(t.chart,e),this.id=e.id,this.mapView=t,this.options=y({center:[0,0]},t.options.insetOptions,e),this.allBounds=[],this.options.geoBounds){let e=t.projection.path(this.options.geoBounds);this.geoBoundsProjectedBox=l(e),this.geoBoundsProjectedPolygon=e.map(t=>[t[1]||0,t[2]||0])}}getField(t=!0){let e=this.hitZone;if(e){let i=t?this.padding:[0,0,0,0],s=e.coordinates[0],o=s.map(t=>t[0]),r=s.map(t=>t[1]),a=Math.min.apply(0,o)+i[3],n=Math.max.apply(0,o)-i[1],l=Math.min.apply(0,r)+i[0],h=Math.max.apply(0,r)-i[2];if(g(a)&&g(l))return{x:a,y:l,width:n-a,height:h-l}}return super.getField.call(this,t)}getHitZone(){let{chart:t,mapView:e,options:i}=this,{coordinates:s}=i.field||{};if(s){let o=s[0];if("percent"===i.units){let s="mapBoundingBox"===i.relativeTo&&e.getMapBBox()||y(t.plotBox,{x:0,y:0});o=o.map(t=>[C(`${t[0]}%`,s.width,s.x),C(`${t[1]}%`,s.height,s.y)])}return{type:"Polygon",coordinates:[o]}}}getProjectedBounds(){return S.compositeBounds(this.allBounds)}isInside(t){let{geoBoundsProjectedBox:e,geoBoundsProjectedPolygon:i}=this;return!!(e&&t.x>=e.x1&&t.x<=e.x2&&t.y>=e.y1&&t.y<=e.y2&&i&&h(t,i))}render(){let{chart:t,mapView:e,options:i}=this,s=i.borderPath||i.field;if(s&&e.group){let o=!0;this.border||(this.border=t.renderer.path().addClass("highcharts-mapview-inset-border").add(e.group),o=!1),t.styledMode||this.border.attr({stroke:i.borderColor,"stroke-width":i.borderWidth});let r=this.border.strokeWidth(),a="mapBoundingBox"===i.relativeTo&&e.getMapBBox()||e.playingField,n=(s.coordinates||[]).reduce((e,s)=>s.reduce((e,s,o)=>{let[n,l]=s;return"percent"===i.units&&(n=t.plotLeft+C(`${n}%`,a.width,a.x),l=t.plotTop+C(`${l}%`,a.height,a.y)),n=c(n,r),l=c(l,r),e.push(0===o?["M",n,l]:["L",n,l]),e},e),[]);this.border[o?"animate":"attr"]({d:n})}}destroy(){this.border&&(this.border=this.border.destroy()),this.eventsToUnbind.forEach(t=>t())}setUpEvents(){}}return S}),i(e,"Series/Map/MapSeries.js",[e["Core/Animation/AnimationUtilities.js"],e["Series/ColorMapComposition.js"],e["Series/CenteredUtilities.js"],e["Core/Globals.js"],e["Core/Chart/MapChart.js"],e["Series/Map/MapPoint.js"],e["Series/Map/MapSeriesDefaults.js"],e["Maps/MapView.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,r,a,n,l,h){let{animObject:p,stop:d}=t,{noop:c}=s,{splitPath:u}=o,{column:m,scatter:g}=l.seriesTypes,{extend:f,find:b,fireEvent:y,getNestedProperty:x,isArray:M,defined:C,isNumber:j,isObject:v,merge:w,objectEach:S,pick:P,splat:L}=h;class A extends g{constructor(){super(...arguments),this.processedData=[]}animate(t){let{chart:e,group:i}=this,s=p(this.options.animation);t?i.attr({translateX:e.plotLeft+e.plotWidth/2,translateY:e.plotTop+e.plotHeight/2,scaleX:.001,scaleY:.001}):i.animate({translateX:e.plotLeft,translateY:e.plotTop,scaleX:1,scaleY:1},s)}clearBounds(){this.points.forEach(t=>{delete t.bounds,delete t.insetIndex,delete t.projectedPath}),delete this.bounds}doFullTranslate(){return!!(this.isDirtyData||this.chart.isResizing||!this.hasRendered)}drawMapDataLabels(){super.drawDataLabels(),this.dataLabelsGroup&&this.dataLabelsGroup.clip(this.chart.clipRect)}drawPoints(){let t=this,{chart:e,group:i,transformGroups:s=[]}=this,{mapView:o,renderer:r}=e;if(o){this.transformGroups=s,s[0]||(s[0]=r.g().add(i));for(let t=0,e=o.insets.length;t<e;++t)s[t+1]||s.push(r.g().add(i));this.doFullTranslate()&&(this.points.forEach(t=>{let{graphic:e}=t;t.group=s["number"==typeof t.insetIndex?t.insetIndex+1:0],e&&e.parentGroup!==t.group&&e.add(t.group)}),m.prototype.drawPoints.apply(this),this.points.forEach(i=>{let s=i.graphic;if(s){let o=s.animate,r="";i.name&&(r+="highcharts-name-"+i.name.replace(/ /g,"-").toLowerCase()),i.properties&&i.properties["hc-key"]&&(r+=" highcharts-key-"+i.properties["hc-key"].toString().toLowerCase()),r&&s.addClass(r),e.styledMode&&s.css(this.pointAttribs(i,i.selected&&"select"||void 0)),s.attr({visibility:!i.visible&&(i.visible||i.isNull)?"hidden":"inherit"}),s.animate=function(i,r,a){let n=j(i["stroke-width"])&&!j(s["stroke-width"]),l=j(s["stroke-width"])&&!j(i["stroke-width"]);if(n||l){let o=P(t.getStrokeWidth(t.options),1)/(e.mapView&&e.mapView.getScale()||1);n&&(s["stroke-width"]=o),l&&(i["stroke-width"]=o)}return o.call(s,i,r,l?function(){s.element.removeAttribute("stroke-width"),delete s["stroke-width"],a&&a.apply(this,arguments)}:a)}}})),s.forEach((i,s)=>{let a=(0===s?o:o.insets[s-1]).getSVGTransform(),n=P(this.getStrokeWidth(this.options),1),l=a.scaleX,h=a.scaleY>0?1:-1,c=e=>{(t.points||[]).forEach(t=>{let i;let s=t.graphic;s&&s["stroke-width"]&&(i=this.getStrokeWidth(t.options))&&s.attr({"stroke-width":i/e})})};if(r.globalAnimation&&e.hasRendered&&o.allowTransformAnimation){let t=Number(i.attr("translateX")),e=Number(i.attr("translateY")),s=Number(i.attr("scaleX")),o=(o,r)=>
23540{let p=s+(l-s)*r.pos;i.attr({translateX:t+(a.translateX-t)*r.pos,translateY:e+(a.translateY-e)*r.pos,scaleX:p,scaleY:p*h,"stroke-width":n/p}),c(p)},d=w(p(r.globalAnimation)),u=d.step;d.step=function(){u&&u.apply(this,arguments),o.apply(this,arguments)},i.attr({animator:0}).animate({animator:1},d,(function(){"boolean"!=typeof r.globalAnimation&&r.globalAnimation.complete&&r.globalAnimation.complete({applyDrilldown:!0}),y(this,"mapZoomComplete")}).bind(this))}else d(i),i.attr(w(a,{"stroke-width":n/l})),c(l)}),this.isDrilling||this.drawMapDataLabels()}}getProjectedBounds(){if(!this.bounds&&this.chart.mapView){let{insets:t,projection:e}=this.chart.mapView,i=[];(this.points||[]).forEach(s=>{if(s.path||s.geometry){if("string"==typeof s.path?s.path=u(s.path):M(s.path)&&"M"===s.path[0]&&(s.path=this.chart.renderer.pathToSegments(s.path)),!s.bounds){let i=s.getProjectedBounds(e);if(i){s.labelrank=P(s.labelrank,(i.x2-i.x1)*(i.y2-i.y1));let{midX:e,midY:o}=i;if(t&&j(e)&&j(o)){let r=b(t,t=>t.isInside({x:e,y:o}));r&&(delete s.projectedPath,(i=s.getProjectedBounds(r.projection))&&r.allBounds.push(i),s.insetIndex=t.indexOf(r))}s.bounds=i}}s.bounds&&void 0===s.insetIndex&&i.push(s.bounds)}}),this.bounds=n.compositeBounds(i)}return this.bounds}getStrokeWidth(t){let e=this.pointAttrToOptions;return t[e&&e["stroke-width"]||"borderWidth"]}hasData(){return!!this.processedXData.length}pointAttribs(t,e){let{mapView:i,styledMode:s}=t.series.chart,o=s?this.colorAttribs(t):m.prototype.pointAttribs.call(this,t,e),r=this.getStrokeWidth(t.options);if(e){let i=w(this.options.states&&this.options.states[e],t.options.states&&t.options.states[e]||{}),s=this.getStrokeWidth(i);C(s)&&(r=s),o.stroke=i.borderColor??t.color}r&&i&&(r/=i.getScale());let a=this.getStrokeWidth(this.options);return o.dashstyle&&i&&j(a)&&(r=a/i.getScale()),t.visible||(o.fill=this.options.nullColor),C(r)?o["stroke-width"]=r:delete o["stroke-width"],o["stroke-linecap"]=o["stroke-linejoin"]=this.options.linecap,o}updateData(){return!this.processedData&&super.updateData.apply(this,arguments)}setData(t,e=!0,i,s){delete this.bounds,super.setData(t,!1,void 0,s),this.processData(),this.generatePoints(),e&&this.chart.redraw(i)}processData(){let t,e,i;let o=this.options,a=o.data,n=this.chart,l=n.options.chart,h=this.joinBy,p=o.keys||this.pointArrayMap,d=[],c={},u=this.chart.mapView,m=u&&(v(o.mapData,!0)?u.getGeoMap(o.mapData):u.geoMap),g=n.mapTransforms=l.mapTransforms||m&&m["hc-transform"]||n.mapTransforms;g&&S(g,t=>{t.rotation&&(t.cosAngle=Math.cos(t.rotation),t.sinAngle=Math.sin(t.rotation))}),M(o.mapData)?i=o.mapData:m&&"FeatureCollection"===m.type&&(this.mapTitle=m.title,i=s.geojson(m,this.type,this)),this.processedData=[];let f=this.processedData;if(a){let t;for(let e=0,i=a.length;e<i;++e){if(j(t=a[e]))f[e]={value:t};else if(M(t)){let i=0;f[e]={},!o.keys&&t.length>p.length&&"string"==typeof t[0]&&(f[e]["hc-key"]=t[0],++i);for(let s=0;s<p.length;++s,++i)p[s]&&void 0!==t[i]&&(p[s].indexOf(".")>0?r.prototype.setNestedProperty(f[e],t[i],p[s]):f[e][p[s]]=t[i])}else f[e]=a[e];h&&"_i"===h[0]&&(f[e]._i=e)}}if(i){this.mapData=i,this.mapMap={};for(let s=0;s<i.length;s++)e=(t=i[s]).properties,t._i=s,h[0]&&e&&e[h[0]]&&(t[h[0]]=e[h[0]]),c[t[h[0]]]=t;if(this.mapMap=c,h[1]){let t=h[1];f.forEach(e=>{let i=x(t,e);c[i]&&d.push(c[i])})}if(o.allAreas){if(h[1]){let t=h[1];f.forEach(e=>{d.push(x(t,e))})}let t="|"+d.map(function(t){return t&&t[h[0]]}).join("|")+"|";i.forEach(e=>{h[0]&&-1!==t.indexOf("|"+e[h[0]]+"|")||f.push(w(e,{value:null}))})}}this.processedXData=Array(f.length)}setOptions(t){let e=super.setOptions(t),i=e.joinBy;return null===e.joinBy&&(i="_i"),(i=this.joinBy=L(i))[1]||(i[1]=i[0]),e}translate(){let t=this.doFullTranslate(),e=this.chart.mapView,i=e&&e.projection;if(this.chart.hasRendered&&(this.isDirtyData||!this.hasRendered)&&(this.processData(),this.generatePoints(),delete this.bounds,!e||e.userOptions.center||j(e.userOptions.zoom)||e.zoom!==e.minZoom?this.getProjectedBounds():e.fitToBounds(void 0,void 0,!1)),e){let s=e.getSVGTransform();this.points.forEach(o=>{let a=j(o.insetIndex)&&e.insets[o.insetIndex].getSVGTransform()||s;a&&o.bounds&&j(o.bounds.midX)&&j(o.bounds.midY)&&(o.plotX=o.bounds.midX*a.scaleX+a.translateX,o.plotY=o.bounds.midY*a.scaleY+a.translateY),t&&(o.shapeType="path",o.shapeArgs={d:r.getProjectedPath(o,i)}),o.hiddenInDataClass||(o.projectedPath&&!o.projectedPath.length?o.setVisible(!1):o.visible||o.setVisible(!0))})}y(this,"afterTranslate")}update(t){t.mapData&&this.chart.mapView?.recommendMapView(this.chart,[this.chart.options.chart.map,...(this.chart.options.series||[]).map((e,i)=>i===this._i?t.mapData:e.mapData)],!0),super.update.apply(this,arguments)}}return A.defaultOptions=w(g.defaultOptions,a),f(A.prototype,{type:"map",axisTypes:e.seriesMembers.axisTypes,colorAttribs:e.seriesMembers.colorAttribs,colorKey:e.seriesMembers.colorKey,directTouch:!0,drawDataLabels:c,drawGraph:c,forceDL:!0,getCenter:i.getCenter,getExtremesFromAll:!0,getSymbol:c,isCartesian:!1,parallelArrays:e.seriesMembers.parallelArrays,pointArrayMap:e.seriesMembers.pointArrayMap,pointClass:r,preserveAspectRatio:!0,searchPoint:c,trackerGroups:e.seriesMembers.trackerGroups,useMapGeometry:!0}),e.compose(A),l.registerSeriesType("map",A),A}),i(e,"Series/MapLine/MapLineSeriesDefaults.js",[],function(){return{lineWidth:1,fillColor:"none",legendSymbol:"lineMarker"}}),i(e,"Series/MapLine/MapLineSeries.js",[e["Series/MapLine/MapLineSeriesDefaults.js"],e["Series/Map/MapSeries.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,
vendor: 10,837 bytes, line 23540
23540i,s){let{extend:o,merge:r}=s;class a extends e{pointAttribs(t,e){let i=super.pointAttribs(t,e);return i.fill=this.options.fillColor,i}}return a.defaultOptions=r(e.defaultOptions,t),o(a.prototype,{type:"mapline",colorProp:"stroke",pointAttrToOptions:{stroke:"color","stroke-width":"lineWidth"}}),i.registerSeriesType("mapline",a),a}),i(e,"Series/MapPoint/MapPointPoint.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{scatter:i}=t.seriesTypes,{isNumber:s}=e;class o extends i.prototype.pointClass{isValid(){return!!(this.options.geometry||s(this.x)&&s(this.y)||s(this.options.lon)&&s(this.options.lat))}}return o}),i(e,"Series/MapPoint/MapPointSeriesDefaults.js",[],function(){return{dataLabels:{crop:!1,defer:!1,enabled:!0,formatter:function(){return this.point.name},overflow:!1,style:{color:"#000000"}},legendSymbol:"lineMarker"}}),i(e,"Series/MapPoint/MapPointSeries.js",[e["Core/Globals.js"],e["Series/MapPoint/MapPointPoint.js"],e["Series/MapPoint/MapPointSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,r){let{noop:a}=t,{map:n,scatter:l}=s.seriesTypes,{extend:h,fireEvent:p,isNumber:d,merge:c}=r;class u extends l{constructor(){super(...arguments),this.clearBounds=n.prototype.clearBounds}drawDataLabels(){super.drawDataLabels(),this.dataLabelsGroup&&this.dataLabelsGroup.clip(this.chart.clipRect)}projectPoint(t){let e=this.chart.mapView;if(e){let{geometry:i,lon:s,lat:o}=t,r=i&&"Point"===i.type&&i.coordinates;if(d(s)&&d(o)&&(r=[s,o]),r)return e.lonLatToProjectedUnits({lon:r[0],lat:r[1]})}}translate(){let t=this.chart.mapView;if(this.processedXData||this.processData(),this.generatePoints(),this.getProjectedBounds&&this.isDirtyData&&(delete this.bounds,this.getProjectedBounds()),t){let e=t.getSVGTransform(),{hasCoordinates:i}=t.projection;this.points.forEach(s=>{let o,{x:r,y:a}=s,n=d(s.insetIndex)&&t.insets[s.insetIndex].getSVGTransform()||e,l=this.projectPoint(s.options)||s.properties&&this.projectPoint(s.properties);if(l?(r=l.x,a=l.y):s.bounds&&(r=s.bounds.midX,a=s.bounds.midY,n&&d(r)&&d(a)&&(s.plotX=r*n.scaleX+n.translateX,s.plotY=a*n.scaleY+n.translateY,o=!0)),d(r)&&d(a)){if(!o){let e=t.projectedUnitsToPixels({x:r,y:a});s.plotX=e.x,s.plotY=i?e.y:this.chart.plotHeight-e.y}}else s.y=s.plotX=s.plotY=void 0;s.isInside=this.isPointInside(s),s.zone=this.zones.length?s.getZone():void 0})}p(this,"afterTranslate")}}return u.defaultOptions=c(l.defaultOptions,i),o.prototype.symbols.mapmarker=(t,e,i,s,o)=>{let r,a;let n=o&&"legend"===o.context;n?(r=t+i/2,a=e+s):o&&"number"==typeof o.anchorX&&"number"==typeof o.anchorY?(r=o.anchorX,a=o.anchorY):(r=t+i/2,a=e+s/2,e-=s);let l=n?s/3:s/2;return[["M",r,a],["C",r,a,r-l,e+1.5*l,r-l,e+l],["A",l,l,1,1,1,r+l,e+l],["C",r+l,e+1.5*l,r,a,r,a],["Z"]]},h(u.prototype,{type:"mappoint",axisTypes:["colorAxis"],forceDL:!0,isCartesian:!1,pointClass:e,searchPoint:a,useMapGeometry:!0}),s.registerSeriesType("mappoint",u),u}),i(e,"Series/Bubble/BubbleLegendDefaults.js",[],function(){return{borderColor:void 0,borderWidth:2,className:void 0,color:void 0,connectorClassName:void 0,connectorColor:void 0,connectorDistance:60,connectorWidth:1,enabled:!1,labels:{className:void 0,allowOverlap:!1,format:"",formatter:void 0,align:"right",style:{fontSize:"0.9em",color:"#000000"},x:0,y:0},maxSize:60,minSize:10,legendIndex:0,ranges:{value:void 0,borderColor:void 0,color:void 0,connectorColor:void 0},sizeBy:"area",sizeByAbsoluteValue:!1,zIndex:1,zThreshold:0}}),i(e,"Series/Bubble/BubbleLegendItem.js",[e["Core/Color/Color.js"],e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{parse:o}=t,{noop:r}=i,{arrayMax:a,arrayMin:n,isNumber:l,merge:h,pick:p,stableSort:d}=s;return class{constructor(t,e){this.setState=r,this.init(t,e)}init(t,e){this.options=t,this.visible=!0,this.chart=e.chart,this.legend=e}addToLegend(t){t.splice(this.options.legendIndex,0,this)}drawLegendSymbol(t){let e;let i=p(t.options.itemDistance,20),s=this.legendItem||{},o=this.options,r=o.ranges,a=o.connectorDistance;if(!r||!r.length||!l(r[0].value)){t.options.bubbleLegend.autoRanges=!0;return}d(r,function(t,e){return e.value-t.value}),this.ranges=r,this.setOptions(),this.render();let n=this.getMaxLabelSize(),h=this.ranges[0].radius,c=2*h;e=(e=a-h+n.width)>0?e:0,this.maxLabel=n,this.movementX="left"===o.labels.align?e:0,s.labelWidth=c+e+i,s.labelHeight=c+n.height/2}setOptions(){let t=this.ranges,e=this.options,i=this.chart.series[e.seriesIndex],s=this.legend.baseline,r={zIndex:e.zIndex,"stroke-width":e.borderWidth},a={zIndex:e.zIndex,"stroke-width":e.connectorWidth},n={align:this.legend.options.rtl||"left"===e.labels.align?"right":"left",zIndex:e.zIndex},l=i.options.marker.fillOpacity,d=this.chart.styledMode;t.forEach(function(c,u){d||(r.stroke=p(c.borderColor,e.borderColor,i.color),r.fill=p(c.color,e.color,1!==l?o(i.color).setOpacity(l).get("rgba"):i.color),a.stroke=p(c.connectorColor,e.connectorColor,i.color)),t[u].radius=this.getRangeRadius(c.value),t[u]=h(t[u],{center:t[0].radius-t[u].radius+s}),d||h(!0,t[u],{bubbleAttribs:h(r),connectorAttribs:h(a),labelAttribs:n})},this)}getRangeRadius(t){let e=this.options,i=this.options.seriesIndex,s=this.chart.series[i],o=e.ranges[0].value,r=e.ranges[e.ranges.length-1].value,a=e.minSize,n=e.maxSize;return s.getRadius.call(this,r,o,a,n,t)}render(){let t=this.legendItem||{},e=this.chart.renderer,i=this.options.zThreshold;for(let s of(this.symbols||(this.symbols={connectors:[],bubbleItems:[],labels:[]}),t.symbol=e.g("bubble-legend"),t.label=e.g("bubble-legend-item").css(this.legend.itemStyle||{}),t.symbol.translateX=0,t.symbol.translateY=0,t.symbol.add(t.label),t.label.add(t.group),this.ranges))s.value>=i&&this.renderRange(s);this.hideOverlappingLabels()}renderRange(t){let e=this.ranges[0],i=this.legend,s=this.options,o=s.labels,r=this.chart,a=r.series[s.seriesIndex],n=r.renderer,l=this.symbols,h=l.labels,p=t.center,d=Math.abs(t.radius),c=s.connectorDistance||0,u=o.align,m=i.options.rtl,g=s.borderWidth,f=s.connectorWidth,b=e.radius||0,y=p-d-g/2+f/2,x=(y%1?1:.5)-(f%2?0:.5),M=n.styledMode,C=m||"left"===u?-c:c;"center"===u&&(C=0,s.connectorDistance=0,t.labelAttribs.align="center"),l.bubbleItems.push(n.circle(b,p+x,d).attr(M?{}:t.bubbleAttribs).addClass((M?"highcharts-color-"+a.colorIndex+" ":"")+"highcharts-bubble-legend-symbol "+(s.className||"")).add(this.legendItem.symbol)),l.connectors.push(n.path(n.crispLine([["M",b,y],["L",b+C,y]],s.connectorWidth)).attr(M?{}:t.connectorAttribs).addClass((M?"highcharts-color-"+this.options.seriesIndex+" ":"")+"highcharts-bubble-legend-connectors "+(s.connectorClassName||"")).add(this.legendItem.symbol));let j=n.text(this.formatLabel(t)).attr(M?{}:t.labelAttribs).css(M?{}:o.style).addClass("highcharts-bubble-legend-labels "+(s.labels.className||"")).add(this.legendItem.symbol),v={x:b+C+s.labels.x,y:y+s.labels.y+.4*j.getBBox().height};j.attr(v),h.push(j),j.placed=!0,j.alignAttr=v}getMaxLabelSize(){let t,e;return this.symbols.labels.forEach(function(i){e=i.getBBox(!0),t=t?e.width>t.width?e:t:e}),t||{}}formatLabel(t){let i=this.options,s=i.labels.formatter,o=i.labels.format,{numberFormatter:r}=this.chart;return o?e.format(o,t):s?s.call(t):r(t.value,1)}hideOverlappingLabels(){let t=this.chart,e=this.options.labels.allowOverlap,i=this.symbols;!e&&i&&(t.hideOverlappingLabels(i.labels),i.labels.forEach(function(t,e){t.newOpacity?t.newOpacity!==t.oldOpacity&&i.connectors[e].show():i.connectors[e].hide()}))}getRanges(){let t=this.legend.bubbleLegend,e=t.chart.series,i=t.options.ranges,s,o,r=Number.MAX_VALUE,d=-Number.MAX_VALUE;return e.forEach(function(t){t.isBubble&&!t.ignoreSeries&&(o=t.zData.filter(l)).length&&(r=p(t.options.zMin,Math.min(r,Math.max(n(o),!1===t.options.displayNegative?t.options.zThreshold:-Number.MAX_VALUE))),d=p(t.options.zMax,Math.max(d,a(o))))}),s=r===d?[{value:d}]:[{value:r},{value:(r+d)/2},{value:d,autoRanges:!0}],i.length&&i[0].radius&&s.reverse(),s.forEach(function(t,e){i&&i[e]&&(s[e]=h(i[e],t))}),s}predictBubbleSizes(){let t=this.chart,e=t.legend.options,i=e.floating,s="horizontal"===e.layout,o=s?t.legend.lastLineHeight:0,r=t.plotSizeX,a=t.plotSizeY,n=t.series[this.options.seriesIndex],l=n.getPxExtremes(),h=Math.ceil(l.minPxSize),p=Math.ceil(l.maxPxSize),d,c=n.options.maxSize;return i||!/%$/.test(c)?d=p:(d=(Math.min(a,r)+o)*(c=parseFloat(c))/100/(c/100+1),(s&&a-d>=r||!s&&r-d>=a)&&(d=p)),[h,Math.ceil(d)]}updateRanges(t,e){let i=this.legend.options.bubbleLegend;i.minSize=t,i.maxSize=e,i.ranges=this.getRanges()}correctSizes(){let t=this.legend,e=this.chart.series[this.options.seriesIndex].getPxExtremes();Math.abs(Math.ceil(e.maxPxSize)-this.options.maxSize)>1&&(this.updateRanges(this.options.minSize,e.maxPxSize),t.render())}}}),i(e,"Series/Bubble/BubbleLegendComposition.js",[e["Series/Bubble/BubbleLegendDefaults.js"],e["Series/Bubble/BubbleLegendItem.js"],e["Core/Defaults.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s,o){let{setOptions:r}=i,{composed:a}=s,{addEvent:n,objectEach:l,pushUnique:h,wrap:p}=o;function d(t,e,i){let s,o,r;let a=this.legend,n=c(this)>=0;a&&a.options.enabled&&a.bubbleLegend&&a.options.bubbleLegend.autoRanges&&n?(s=a.bubbleLegend.options,o=a.bubbleLegend.predictBubbleSizes(),a.bubbleLegend.updateRanges(o[0],o[1]),s.placed||(a.group.placed=!1,a.allItems.forEach(t=>{(r=t.legendItem||{}).group&&(r.group.translateY=void 0)})),a.render(),s.placed||(this.getMargins(),this.axes.forEach(function(t){t.visible&&t.render(),s.placed||(t.setScale(),t.updateNames(),l(t.ticks,function(t){t.isNew=!0,t.isNewLabel=!0}))}),this.getMargins()),s.placed=!0,t.call(this,e,i),a.bubbleLegend.correctSizes(),f(a,u(a))):(t.call(this,e,i),a&&a.options.enabled&&a.bubbleLegend&&(a.render(),f(a,u(a))))}function c(t){let e=t.series,i=0;for(;i<e.length;){if(e[i]&&e[i].isBubble&&e[i].visible&&e[i].zData.length)return i;i++}return -1}function u(t){let e=t.allItems,i=[],s=e.length,o,r,a,n=0,l=0;for(n=0;n<s;n++)if(r=e[n].legendItem||{},a=(e[n+1]||{}).legendItem||{},r.labelHeight&&(e[n].itemHeight=r.labelHeight),e[n]===e[s-1]||r.y!==a.y){for(i.push({height:0}),o=i[i.length-1];l<=n;l++)e[l].itemHeight>o.height&&(o.height=e[l].itemHeight);o.step=n}return i}function m(t){let i=this.bubbleLegend,s=this.options,o=s.bubbleLegend,r=c(this.chart);i&&i.ranges&&i.ranges.length&&(o.ranges.length&&(o.autoRanges=!!o.ranges[0].autoRanges),this.destroyItem(i)),r>=0&&s.enabled&&o.enabled&&(o.seriesIndex=r,this.bubbleLegend=new e(o,this),this.bubbleLegend.addToLegend(t.allItems))}function g(t){let e;if(t.defaultPrevented)return!1;let i=this.chart,s=this.visible,o=this.chart.legend;o&&o.bubbleLegend&&(this.visible=!s,this.ignoreSeries=s,e=c(i)>=0,o.bubbleLegend.visible!==e&&(o.update({bubbleLegend:{enabled:e}}),o.bubbleLegend.visible=e),this.visible=s)}
23540function f(t,e){let i=t.allItems,s=t.options.rtl,o,r,a,n,l=0;i.forEach((t,i)=>{(n=t.legendItem||{}).group&&(o=n.group.translateX||0,r=n.y||0,((a=t.movementX)||s&&t.ranges)&&(a=s?o-t.options.maxSize/2:o+a,n.group.attr({translateX:a})),i>e[l].step&&l++,n.group.attr({translateY:Math.round(r+e[l].height/2)}),n.y=r+e[l].height/2)})}return{compose:function(e,i,s){h(a,"Series.BubbleLegend")&&(r({legend:{bubbleLegend:t}}),p(e.prototype,"drawChartBox",d),n(i,"afterGetAllItems",m),n(s,"legendItemClick",g))}}}),i(e,"Series/Bubble/BubblePoint.js",[e["Core/Series/Point.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{seriesTypes:{scatter:{prototype:{pointClass:s}}}}=e,{extend:o}=i;class r extends s{haloPath(e){return t.prototype.haloPath.call(this,0===e?0:(this.marker&&this.marker.radius||0)+e)}}return o(r.prototype,{ttBelow:!1}),r}),i(e,"Series/Bubble/BubbleSeries.js",[e["Series/Bubble/BubbleLegendComposition.js"],e["Series/Bubble/BubblePoint.js"],e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,r){let{parse:a}=i,{composed:n,noop:l}=s,{series:h,seriesTypes:{column:{prototype:p},scatter:d}}=o,{addEvent:c,arrayMax:u,arrayMin:m,clamp:g,extend:f,isNumber:b,merge:y,pick:x,pushUnique:M}=r;function C(){let t=this.len,{coll:e,isXAxis:i,min:s}=this,o=i?"xData":"yData",r=(this.max||0)-(s||0),a=0,n=t,l=t/r,h;
23540("xAxis"===e||"yAxis"===e)&&(this.series.forEach(t=>{if(t.bubblePadding&&t.reserveSpace()){this.allowZoomOutside=!0,h=!0;let e=t[o];if(i&&((t.onPoint||t).getRadii(0,0,t),t.onPoint&&(t.radii=t.onPoint.radii)),r>0){let i=e.length;for(;i--;)if(b(e[i])&&this.dataMin<=e[i]&&e[i]<=this.max){let o=t.radii&&t.radii[i]||0;a=Math.min((e[i]-s)*l-o,a),n=Math.max((e[i]-s)*l+o,n)}}}}),h&&r>0&&!this.logarithmic&&(n-=t,l*=(t+Math.max(0,a)-Math.min(n,t))/t,[["min","userMin",a],["max","userMax",n]].forEach(t=>{void 0===x(this.options[t[0]],this[t[1]])&&(this[t[0]]+=t[2]/l)})))}class j extends d{static compose(e,i,s,o){t.compose(i,s,o),M(n,"Series.Bubble")&&c(e,"foundExtremes",C)}animate(t){!t&&this.points.length<this.options.animationLimit&&this.points.forEach(function(t){let{graphic:e,plotX:i=0,plotY:s=0}=t;e&&e.width&&(this.hasRendered||e.attr({x:i,y:s,width:1,height:1}),e.animate(this.markerAttribs(t),this.options.animation))},this)}getRadii(){let t=this.zData,e=this.yData,i=[],s,o,r,a=this.chart.bubbleZExtremes,{minPxSize:n,maxPxSize:l}=this.getPxExtremes();if(!a){let t,e=Number.MAX_VALUE,i=-Number.MAX_VALUE;this.chart.series.forEach(s=>{if(s.bubblePadding&&s.reserveSpace()){let o=(s.onPoint||s).getZExtremes();o&&(e=Math.min(x(e,o.zMin),o.zMin),i=Math.max(x(i,o.zMax),o.zMax),t=!0)}}),t?(a={zMin:e,zMax:i},this.chart.bubbleZExtremes=a):a={zMin:0,zMax:0}}for(o=0,s=t.length;o<s;o++)r=t[o],i.push(this.getRadius(a.zMin,a.zMax,n,l,r,e&&e[o]));this.radii=i}getRadius(t,e,i,s,o,r){let a=this.options,n="width"!==a.sizeBy,l=a.zThreshold,h=e-t,p=.5;if(null===r||null===o)return null;if(b(o)){if(a.sizeByAbsoluteValue&&(o=Math.abs(o-l),e=h=Math.max(e-l,Math.abs(t-l)),t=0),o<t)return i/2-1;h>0&&(p=(o-t)/h)}return n&&p>=0&&(p=Math.sqrt(p)),Math.ceil(i+p*(s-i))/2}hasData(){return!!this.processedXData.length}markerAttribs(t,e){let i=super.markerAttribs(t,e),{height:s=0,width:o=0}=i;return this.chart.inverted?f(i,{x:(t.plotX||0)-o/2,y:(t.plotY||0)-s/2}):i}pointAttribs(t,e){let i=this.options.marker.fillOpacity,s=h.prototype.pointAttribs.call(this,t,e);return 1!==i&&(s.fill=a(s.fill).setOpacity(i).get("rgba")),s}translate(){super.translate.call(this),this.getRadii(),this.translateBubble()}translateBubble(){let{data:t,options:e,radii:i}=this,{minPxSize:s}=this.getPxExtremes(),o=t.length;for(;o--;){let r=t[o],a=i?i[o]:0;"z"===this.zoneAxis&&(r.negative=(r.z||0)<(e.zThreshold||0)),b(a)&&a>=s/2?(r.marker=f(r.marker,{radius:a,width:2*a,height:2*a}),r.dlBox={x:r.plotX-a,y:r.plotY-a,width:2*a,height:2*a}):(r.shapeArgs=r.plotY=r.dlBox=void 0,r.isInside=!1)}}getPxExtremes(){let t=Math.min(this.chart.plotWidth,this.chart.plotHeight),e=e=>{let i;return"string"==typeof e&&(i=/%$/.test(e),e=parseInt(e,10)),i?t*e/100:e},i=e(x(this.options.minSize,8)),s=Math.max(e(x(this.options.maxSize,"20%")),i);return{minPxSize:i,maxPxSize:s}}getZExtremes(){let t=this.options,e=(this.zData||[]).filter(b);if(e.length){let i=x(t.zMin,g(m(e),!1===t.displayNegative?t.zThreshold||0:-Number.MAX_VALUE,Number.MAX_VALUE)),s=x(t.zMax,u(e));if(b(i)&&b(s))return{zMin:i,zMax:s}}}}return j.defaultOptions=y(d.defaultOptions,{dataLabels:{formatter:function(){let{numberFormatter:t}=this.series.chart,{z:e}=this.point;return b(e)?t(e,-1):""},inside:!0,verticalAlign:"middle"},animationLimit:250,marker:{lineColor:null,lineWidth:1,fillOpacity:.5,radius:null,states:{hover:{radiusPlus:0}},symbol:"circle"},minSize:8,maxSize:"20%",softThreshold:!1,states:{hover:{halo:{size:5}}},tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"},turboThreshold:0,zThreshold:0,zoneAxis:"z"}),f(j.prototype,{alignDataLabel:p.alignDataLabel,applyZones:l,bubblePadding:!0,isBubble:!0,pointArrayMap:["y","z"],pointClass:e,parallelArrays:["x","y","z"],trackerGroups:["group","dataLabelsGroup"],specialGroup:"group",zoneAxis:"z"}),c(j,"updatedData",t=>{delete t.target.chart.bubbleZExtremes}),c(j,"remove",t=>{delete t.target.chart.bubbleZExtremes}),o.registerSeriesType("bubble",j),j}),i(e,"Series/MapBubble/MapBubblePoint.js",[e["Series/Bubble/BubblePoint.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,
23540i){let{seriesTypes:{map:{prototype:{pointClass:{prototype:s}}}}}=e,{extend:o}=i;class r extends t{isValid(){return"number"==typeof this.z}}return o(r.prototype,{applyOptions:s.applyOptions,getProjectedBounds:s.getProjectedBounds}),r}),i(e,"Series/MapBubble/MapBubbleSeries.js",[e["Series/Bubble/BubbleSeries.js"],e["Series/MapBubble/MapBubblePoint.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{seriesTypes:{map:{prototype:o},mappoint:{prototype:r}}}=i,{extend:a,merge:n}=s;class l extends t{constructor(){super(...arguments),this.clearBounds=o.clearBounds}searchPoint(t,e){return this.searchKDTree({plotX:t.chartX-this.chart.plotLeft,plotY:t.chartY-this.chart.plotTop},e,t)}translate(){r.translate.call(this),this.getRadii(),this.translateBubble()}updateParallelArrays(t,e,i){super.updateParallelArrays.call(this,t,e,i);let s=this.processedXData,o=this.xData;s&&o&&(s.length=o.length)}}return l.defaultOptions=n(t.defaultOptions,{lineWidth:0,animationLimit:500,joinBy:"hc-key",tooltip:{pointFormat:"{point.name}: {point.z}"}}),a(l.prototype,{type:"mapbubble",axisTypes:["colorAxis"],getProjectedBounds:o.getProjectedBounds,isCartesian:!1,pointArrayMap:["z"],pointClass:e,processData:o.processData,projectPoint:r.projectPoint,kdAxisArray:["plotX","plotY"],setData:o.setData,setOptions:o.setOptions,updateData:o.updateData,useMapGeometry:!0,xyFromShape:!0}),i.registerSeriesType("mapbubble",l),l}),i(e,"Series/Heatmap/HeatmapPoint.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{scatter:{prototype:{pointClass:i}}}=t.seriesTypes,{clamp:s,defined:o,extend:r,pick:a}=e;class n extends i{applyOptions(t,e){return(this.isNull||null===this.value)&&delete this.color,super.applyOptions(t,e),this.formatPrefix=this.isNull||null===this.value?"null":"point",this}getCellAttributes(){let t=this.series,e=t.options,i=(e.colsize||1)/2,r=(e.rowsize||1)/2,n=t.xAxis,l=t.yAxis,h=this.options.marker||t.options.marker,p=t.pointPlacementToXValue(),d=a(this.pointPadding,e.pointPadding,0),c={x1:s(Math.round(n.len-n.translate(this.x-i,!1,!0,!1,!0,-p)),-n.len,2*n.len),x2:s(Math.round(n.len-n.translate(this.x+i,!1,!0,!1,!0,-p)),-n.len,2*n.len),y1:s(Math.round(l.translate(this.y-r,!1,!0,!1,!0)),-l.len,2*l.len),y2:s(Math.round(l.translate(this.y+r,!1,!0,!1,!0)),-l.len,2*l.len)};for(let t of[["width","x"],["height","y"]]){let e=t[0],i=t[1],s=i+"1",r=i+"2",a=Math.abs(c[s]-c[r]),p=h&&h.lineWidth||0,u=Math.abs(c[s]+c[r])/2,m=h&&h[e];if(o(m)&&m<a){let t=m/2+p/2;c[s]=u-t,c[r]=u+t}d&&(("x"===i&&n.reversed||"y"===i&&!l.reversed)&&(s=r,r=i+"1"),c[s]+=d,c[r]-=d)}return c}haloPath(t){if(!t)return[];let{x:e=0,y:i=0,width:s=0,height:o=0}=this.shapeArgs||{};return[["M",e-t,i-t],["L",e-t,i+o+t],["L",e+s+t,i+o+t],["L",e+s+t,i-t],["Z"]]}isValid(){return this.value!==1/0&&this.value!==-1/0}}return r(n.prototype,{dataLabelOnNull:!0,moveToTopOnHover:!0,ttBelow:!1}),n}),i(e,"Series/Heatmap/HeatmapSeriesDefaults.js",[e["Core/Utilities.js"]],function(t){let{isNumber:e}=t;return{animation:!1,borderRadius:0,borderWidth:0,interpolation:!1,nullColor:"#f7f7f7",dataLabels:{formatter:function(){let{numberFormatter:t}=this.series.chart,{value:i}=this.point;return e(i)?t(i,-1):""},inside:!0,verticalAlign:"middle",crop:!1,overflow:"allow",padding:0},marker:{symbol:"rect",radius:0,lineColor:void 0,states:{hover:{lineWidthPlus:0},select:{}}},clip:!0,pointRange:null,tooltip:{pointFormat:"{point.x}, {point.y}: {point.value}<br/>"},states:{hover:{halo:!1,brightness:.2}},legendSymbol:"rectangle"}}),i(e,"Series/InterpolationUtilities.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{doc:i}=t,{defined:s,pick:o}=e;return{colorFromPoint:function(t,e){let i=e.series.colorAxis;if(i){let r=i.toColor(t||0,e).split(")")[0].split("(")[1].split(",").map(t=>o(parseFloat(t),parseInt(t,10)));return r[3]=255*o(r[3],1),s(t)&&e.visible||(r[3]=0),r}return[0,0,0,0]},getContext:function(t){let{canvas:e,context:s}=t;return e&&s?(s.clearRect(0,0,e.width,e.height),s):(t.canvas=i.createElement("canvas"),t.context=t.canvas.getContext("2d",{willReadFrequently:!0})||void 0,t.context)}}}),i(e,"Series/Heatmap/HeatmapSeries.js",[e["Core/Color/Color.js"],e["Series/ColorMapComposition.js"],e["Series/Heatmap/HeatmapPoint.js"],e["Series/Heatmap/HeatmapSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Utilities.js"],e["Series/InterpolationUtilities.js"]],function(t,e,
vendor: 4,724 bytes, line 23540
23540i,s,o,r,a,n){let{series:l,seriesTypes:{column:h,scatter:p}}=o,{prototype:{symbols:d}}=r,{addEvent:c,extend:u,fireEvent:m,isNumber:g,merge:f,pick:b}=a,{colorFromPoint:y,getContext:x}=n;class M extends p{constructor(){super(...arguments),this.valueMax=NaN,this.valueMin=NaN,this.isDirtyCanvas=!0}drawPoints(){let t=this,e=t.options,i=e.interpolation,s=e.marker||{};if(i){let{image:e,chart:i,xAxis:s,yAxis:o}=t,{reversed:r=!1,len:a}=s,{reversed:n=!1,len:l}=o,h={width:a,height:l};if(!e||t.isDirtyData||t.isDirtyCanvas){let a=x(t),{canvas:l,options:{colsize:p=1,rowsize:d=1},points:c,points:{length:u}}=t,m=i.colorAxis&&i.colorAxis[0];if(l&&a&&m){let{min:m,max:g}=s.getExtremes(),{min:f,max:b}=o.getExtremes(),x=g-m,M=b-f,C=Math.round(x/p/8*8),j=Math.round(M/d/8*8),[v,w]=[[C,C/x,r,"ceil"],[j,j/M,!n,"floor"]].map(([t,e,i,s])=>i?i=>Math[s](t-e*i):t=>Math[s](e*t)),S=l.width=C+1,P=S*(l.height=j+1),L=(u-1)/P,A=new Uint8ClampedArray(4*P),T=(t,e)=>4*Math.ceil(S*w(e-f)+v(t-m));t.buildKDTree();for(let t=0;t<P;t++){let e=c[Math.ceil(L*t)],{x:i,y:s}=e;A.set(y(e.value,e),T(i,s))}a.putImageData(new ImageData(A,S),0,0),e?e.attr({...h,href:l.toDataURL("image/png",1)}):(t.directTouch=!1,t.image=i.renderer.image(l.toDataURL("image/png",1)).attr(h).add(t.group))}t.isDirtyCanvas=!1}else(e.width!==a||e.height!==l)&&e.attr(h)}else(s.enabled||t._hasPointMarkers)&&(l.prototype.drawPoints.call(t),t.points.forEach(e=>{e.graphic&&(e.graphic[t.chart.styledMode?"css":"animate"](t.colorAttribs(e)),null===e.value&&e.graphic.addClass("highcharts-null-point"))}))}getExtremes(){let{dataMin:t,dataMax:e}=l.prototype.getExtremes.call(this,this.valueData);return g(t)&&(this.valueMin=t),g(e)&&(this.valueMax=e),l.prototype.getExtremes.call(this)}getValidPoints(t,e){return l.prototype.getValidPoints.call(this,t,e,!0)}hasData(){return!!this.processedXData.length}init(){super.init.apply(this,arguments);let t=this.options;t.pointRange=b(t.pointRange,t.colsize||1),this.yAxis.axisPointRange=t.rowsize||1,d.ellipse=d.circle,t.marker&&g(t.borderRadius)&&(t.marker.r=t.borderRadius)}markerAttribs(t,e){let i=t.shapeArgs||{};if(t.hasImage)return{x:t.plotX,y:t.plotY};if(e&&"normal"!==e){let s=t.options.marker||{},o=this.options.marker||{},r=o.states&&o.states[e]||{},a=s.states&&s.states[e]||{},n=(a.width||r.width||i.width||0)+(a.widthPlus||r.widthPlus||0),l=(a.height||r.height||i.height||0)+(a.heightPlus||r.heightPlus||0);return{x:(i.x||0)+((i.width||0)-n)/2,y:(i.y||0)+((i.height||0)-l)/2,width:n,height:l}}return i}pointAttribs(e,i){let s=l.prototype.pointAttribs.call(this,e,i),o=this.options||{},r=this.chart.options.plotOptions||{},a=r.series||{},n=r.heatmap||{},h=e&&e.options.borderColor||o.borderColor||n.borderColor||a.borderColor,p=e&&e.options.borderWidth||o.borderWidth||n.borderWidth||a.borderWidth||s["stroke-width"];if(s.stroke=e&&e.marker&&e.marker.lineColor||o.marker&&o.marker.lineColor||h||this.color,s["stroke-width"]=p,i&&"normal"!==i){let r=f(o.states&&o.states[i],o.marker&&o.marker.states&&o.marker.states[i],e&&e.options.states&&e.options.states[i]||{});s.fill=r.color||t.parse(s.fill).brighten(r.brightness||0).get(),s.stroke=r.lineColor||s.stroke}return s}translate(){let{borderRadius:t,marker:e}=this.options,i=e&&e.symbol||"rect",s=d[i]?i:"rect",o=-1!==["circle","square"].indexOf(s);for(let e of(this.generatePoints(),this.points)){let r=e.getCellAttributes(),a=Math.min(r.x1,r.x2),n=Math.min(r.y1,r.y2),l=Math.max(Math.abs(r.x2-r.x1),0),h=Math.max(Math.abs(r.y2-r.y1),0);if(e.hasImage=0===(e.marker&&e.marker.symbol||i||"").indexOf("url"),o){let t=Math.abs(l-h);a=Math.min(r.x1,r.x2)+(l<h?0:t/2),n=Math.min(r.y1,r.y2)+(l<h?t/2:0),l=h=Math.min(l,h)}e.hasImage&&(e.marker={width:l,height:h}),e.plotX=e.clientX=(r.x1+r.x2)/2,e.plotY=(r.y1+r.y2)/2,e.shapeType="path",e.shapeArgs=f(!0,{x:a,y:n,width:l,height:h},{d:d[s](a,n,l,h,{r:g(t)?t:0})})}m(this,"afterTranslate")}}return M.defaultOptions=f(p.defaultOptions,s),c(M,"afterDataClassLegendClick",function(){this.isDirtyCanvas=!0,this.drawPoints()}),u(M.prototype,{axisTypes:e.seriesMembers.axisTypes,colorKey:e.seriesMembers.colorKey,directTouch:!0,getExtremesFromAll:!0,parallelArrays:e.seriesMembers.parallelArrays,pointArrayMap:["y","value"],pointClass:i,specialGroup:"group",trackerGroups:e.seriesMembers.trackerGroups,alignDataLabel:h.prototype.alignDataLabel,colorAttribs:e.seriesMembers.colorAttribs,getSymbol:l.prototype.getSymbol}),e.compose(M),o.registerSeriesType("heatmap",M),M}),i(e,"masters/modules/map.src.js",[e["Core/Globals.js"],e["Maps/MapNavigation.js"],e["Series/ColorMapComposition.js"],e["Series/MapBubble/MapBubbleSeries.js"],e["Maps/GeoJSONComposition.js"],e["Core/Chart/MapChart.js"],e["Maps/MapView.js"],e["Maps/Projection.js"]],function(t,e,
23540i,s,o,r,a,n){return t.ColorMapComposition=i,t.MapChart=t.MapChart||r,t.MapNavigation=t.MapNavigation||e,t.MapView=t.MapView||a,t.Projection=t.Projection||n,t.mapChart=t.Map=t.MapChart.mapChart,t.maps=t.MapChart.maps,t.geojson=o.geojson,t.topo2geo=o.topo2geo,o.compose(t.Chart),s.compose(t.Axis,t.Chart,t.Legend,t.Series),e.compose(r,t.Pointer,t.SVGRenderer),a.compose(r),t})});
23541},{}],115:[function(require,module,exports){
23542'use strict';
23543
23544var fnToStr = Function.prototype.toString;
23545var reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;
23546var badArrayLike;
23547var isCallableMarker;
23548if (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {
23549	try {
23550		badArrayLike = Object.defineProperty({}, 'length', {
23551			get: function () {
23552				throw isCallableMarker;
23553			}
23554		});
23555		isCallableMarker = {};
23556		// eslint-disable-next-line no-throw-literal
23557		reflectApply(function () { throw 42; }, null, badArrayLike);
23558	} catch (_) {
23559		if (_ !== isCallableMarker) {
23560			reflectApply = null;
23561		}
23562	}
23563} else {
23564	reflectApply = null;
23565}
23566
23567var constructorRegex = /^\s*class\b/;
23568var isES6ClassFn = function isES6ClassFunction(value) {
23569	try {
23570		var fnStr = fnToStr.call(value);
23571		return constructorRegex.test(fnStr);
23572	} catch (e) {
23573		return false; // not a function
23574	}
23575};
23576
23577var tryFunctionObject = function tryFunctionToStr(value) {
23578	try {
23579		if (isES6ClassFn(value)) { return false; }
23580		fnToStr.call(value);
23581		return true;
23582	} catch (e) {
23583		return false;
23584	}
23585};
23586var toStr = Object.prototype.toString;
23587var objectClass = '[object Object]';
23588var fnClass = '[object Function]';
23589var genClass = '[object GeneratorFunction]';
23590var ddaClass = '[object HTMLAllCollection]'; // IE 11
23591var ddaClass2 = '[object HTML document.all class]';
23592var ddaClass3 = '[object HTMLCollection]'; // IE 9-10
23593var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`
23594
23595var isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing
23596
23597var isDDA = function isDocumentDotAll() { return false; };
23598if (typeof document === 'object') {
23599	// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly
23600	var all = document.all;
23601	if (toStr.call(all) === toStr.call(document.all)) {
23602		isDDA = function isDocumentDotAll(value) {
23603			/* globals document: false */
23604			// in IE 6-8, typeof document.all is "object" and it's truthy
23605			if ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {
23606				try {
23607					var str = toStr.call(value);
23608					return (
23609						str === ddaClass
23610						|| str === ddaClass2
23611						|| str === ddaClass3 // opera 12.16
23612						|| str === objectClass // IE 6-8
23613					) && value('') == null; // eslint-disable-line eqeqeq
23614				} catch (e) { /**/ }
23615			}
23616			return false;
23617		};
23618	}
23619}
23620
23621module.exports = reflectApply
23622	? function isCallable(value) {
23623		if (isDDA(value)) { return true; }
23624		if (!value) { return false; }
23625		if (typeof value !== 'function' && typeof value !== 'object') { return false; }
23626		try {
23627			reflectApply(value, null, badArrayLike);
23628		} catch (e) {
23629			if (e !== isCallableMarker) { return false; }
23630		}
23631		return !isES6ClassFn(value) && tryFunctionObject(value);
23632	}
23633	: function isCallable(value) {
23634		if (isDDA(value)) { return true; }
23635		if (!value) { return false; }
23636		if (typeof value !== 'function' && typeof value !== 'object') { return false; }
23637		if (hasToStringTag) { return tryFunctionObject(value); }
23638		if (isES6ClassFn(value)) { return false; }
23639		var strClass = toStr.call(value);
23640		if (strClass !== fnClass && strClass !== genClass && !(/^\[object HTML/).test(strClass)) { return false; }
23641		return tryFunctionObject(value);
23642	};
23643
23644},{}],116:[function(require,module,exports){
23645'use strict';
23646
23647var getDay = Date.prototype.getDay;
23648var tryDateObject = function tryDateGetDayCall(value) {
23649	try {
23650		getDay.call(value);
23651		return true;
23652	} catch (e) {
23653		return false;
23654	}
23655};
23656
23657var toStr = Object.prototype.toString;
23658var dateClass = '[object Date]';
23659var hasToStringTag = require('has-tostringtag/shams')();
23660
23661module.exports = function isDateObject(value) {
23662	if (typeof value !== 'object' || value === null) {
23663		return false;
23664	}
23665	return hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;
23666};
23667
23668},{"has-tostringtag/shams":107}],117:[function(require,module,exports){
23669'use strict';
23670
23671var callBound = require('call-bind/callBound');
23672var hasToStringTag = require('has-tostringtag/shams')();
23673var has;
23674var $exec;
23675var isRegexMarker;
23676var badStringifier;
23677
23678if (hasToStringTag) {
23679	has = callBound('Object.prototype.hasOwnProperty');
23680	$exec = callBound('RegExp.prototype.exec');
23681	isRegexMarker = {};
23682
23683	var throwRegexMarker = function () {
23684		throw isRegexMarker;
23685	};
23686	badStringifier = {
23687		toString: throwRegexMarker,
23688		valueOf: throwRegexMarker
23689	};
23690
23691	if (typeof Symbol.toPrimitive === 'symbol') {
23692		badStringifier[Symbol.toPrimitive] = throwRegexMarker;
23693	}
23694}
23695
23696var $toString = callBound('Object.prototype.toString');
23697var gOPD = Object.getOwnPropertyDescriptor;
23698var regexClass = '[object RegExp]';
23699
23700module.exports = hasToStringTag
23701	// eslint-disable-next-line consistent-return
23702	? function isRegex(value) {
23703		if (!value || typeof value !== 'object') {
23704			return false;
23705		}
23706
23707		var descriptor = gOPD(value, 'lastIndex');
23708		var hasLastIndexDataProperty = descriptor && has(descriptor, 'value');
23709		if (!hasLastIndexDataProperty) {
23710			return false;
23711		}
23712
23713		try {
23714			$exec(value, badStringifier);
23715		} catch (e) {
23716			return e === isRegexMarker;
23717		}
23718	}
23719	: function isRegex(value) {
23720		// In older browsers, typeof regex incorrectly returns 'function'
23721		if (!value || (typeof value !== 'object' && typeof value !== 'function')) {
23722			return false;
23723		}
23724
23725		return $toString(value) === regexClass;
23726	};
23727
23728},{"call-bind/callBound":13,"has-tostringtag/shams":107}],118:[function(require,module,exports){
23729'use strict';
23730
23731var strValue = String.prototype.valueOf;
23732var tryStringObject = function tryStringObject(value) {
23733	try {
23734		strValue.call(value);
23735		return true;
23736	} catch (e) {
23737		return false;
23738	}
23739};
23740var toStr = Object.prototype.toString;
23741var strClass = '[object String]';
23742var hasToStringTag = require('has-tostringtag/shams')();
23743
23744module.exports = function isString(value) {
23745	if (typeof value === 'string') {
23746		return true;
23747	}
23748	if (typeof value !== 'object') {
23749		return false;
23750	}
23751	return hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass;
23752};
23753
23754},{"has-tostringtag/shams":107}],119:[function(require,module,exports){
23755'use strict';
23756
23757var toStr = Object.prototype.toString;
23758var hasSymbols = require('has-symbols')();
23759
23760if (hasSymbols) {
23761	var symToStr = Symbol.prototype.toString;
23762	var symStringRegex = /^Symbol\(.*\)$/;
23763	var isSymbolObject = function isRealSymbolObject(value) {
23764		if (typeof value.valueOf() !== 'symbol') {
23765			return false;
23766		}
23767		return symStringRegex.test(symToStr.call(value));
23768	};
23769
23770	module.exports = function isSymbol(value) {
23771		if (typeof value === 'symbol') {
23772			return true;
23773		}
23774		if (toStr.call(value) !== '[object Symbol]') {
23775			return false;
23776		}
23777		try {
23778			return isSymbolObject(value);
23779		} catch (e) {
23780			return false;
23781		}
23782	};
23783} else {
23784
23785	module.exports = function isSymbol(value) {
23786		// this environment does not support Symbols.
23787		return false && value;
23788	};
23789}
23790
23791},{"has-symbols":105}],120:[function(require,module,exports){
23792/*! @preserve
23793 * numeral.js
23794 * version : 2.0.6
23795 * author : Adam Draper
23796 * license : MIT
23797 * http://adamwdraper.github.com/Numeral-js/
23798 */
23799
23800(function (global, factory) {
23801    if (typeof define === 'function' && define.amd) {
23802        define(factory);
23803    } else if (typeof module === 'object' && module.exports) {
23804        module.exports = factory();
23805    } else {
23806        global.numeral = factory();
23807    }
23808}(this, function () {
23809    /************************************
23810        Variables
23811    ************************************/
23812
23813    var numeral,
23814        _,
23815        VERSION = '2.0.6',
23816        formats = {},
23817        locales = {},
23818        defaults = {
23819            currentLocale: 'en',
23820            zeroFormat: null,
23821            nullFormat: null,
23822            defaultFormat: '0,0',
23823            scalePercentBy100: true
23824        },
23825        options = {
23826            currentLocale: defaults.currentLocale,
23827            zeroFormat: defaults.zeroFormat,
23828            nullFormat: defaults.nullFormat,
23829            defaultFormat: defaults.defaultFormat,
23830            scalePercentBy100: defaults.scalePercentBy100
23831        };
23832
23833
23834    /************************************
23835        Constructors
23836    ************************************/
23837
23838    // Numeral prototype object
23839    function Numeral(input, number) {
23840        this._input = input;
23841
23842        this._value = number;
23843    }
23844
23845    numeral = function(input) {
23846        var value,
23847            kind,
23848            unformatFunction,
23849            regexp;
23850
23851        if (numeral.isNumeral(input)) {
23852            value = input.value();
23853        } else if (input === 0 || typeof input === 'undefined') {
23854            value = 0;
23855        } else if (input === null || _.isNaN(input)) {
23856            value = null;
23857        } else if (typeof input === 'string') {
23858            if (options.zeroFormat && input === options.zeroFormat) {
23859                value = 0;
23860            } else if (options.nullFormat && input === options.nullFormat || !input.replace(/[^0-9]+/g, '').length) {
23861                value = null;
23862            } else {
23863                for (kind in formats) {
23864                    regexp = typeof formats[kind].regexps.unformat === 'function' ? formats[kind].regexps.unformat() : formats[kind].regexps.unformat;
23865
23866                    if (regexp && input.match(regexp)) {
23867                        unformatFunction = formats[kind].unformat;
23868
23869                        break;
23870                    }
23871                }
23872
23873                unformatFunction = unformatFunction || numeral._.stringToNumber;
23874
23875                value = unformatFunction(input);
23876            }
23877        } else {
23878            value = Number(input)|| null;
23879        }
23880
23881        return new Numeral(input, value);
23882    };
23883
23884    // version number
23885    numeral.version = VERSION;
23886
23887    // compare numeral object
23888    numeral.isNumeral = function(obj) {
23889        return obj instanceof Numeral;
23890    };
23891
23892    // helper functions
23893    numeral._ = _ = {
23894        // formats numbers separators, decimals places, signs, abbreviations
23895        numberToFormat: function(value, format, roundingFunction) {
23896            var locale = locales[numeral.options.currentLocale],
23897                negP = false,
23898                optDec = false,
23899                leadingCount = 0,
23900                abbr = '',
23901                trillion = 1000000000000,
23902                billion = 1000000000,
23903                million = 1000000,
23904                thousand = 1000,
23905                decimal = '',
23906                neg = false,
23907                abbrForce, // force abbreviation
23908                abs,
23909                min,
23910                max,
23911                power,
23912                int,
23913                precision,
23914                signed,
23915                thousands,
23916                output;
23917
23918            // make sure we never format a null value
23919            value = value || 0;
23920
23921            abs = Math.abs(value);
23922
23923            // see if we should use parentheses for negative number or if we should prefix with a sign
23924            // if both are present we default to parentheses
23925            if (numeral._.includes(format, '(')) {
23926                negP = true;
23927                format = format.replace(/[\(|\)]/g, '');
23928            } else if (numeral._.includes(format, '+') || numeral._.includes(format, '-')) {
23929                signed = numeral._.includes(format, '+') ? format.indexOf('+') : value < 0 ? format.indexOf('-') : -1;
23930                format = format.replace(/[\+|\-]/g, '');
23931            }
23932
23933            // see if abbreviation is wanted
23934            if (numeral._.includes(format, 'a')) {
23935                abbrForce = format.match(/a(k|m|b|t)?/);
23936
23937                abbrForce = abbrForce ? abbrForce[1] : false;
23938
23939                // check for space before abbreviation
23940                if (numeral._.includes(format, ' a')) {
23941                    abbr = ' ';
23942                }
23943
23944                format = format.replace(new RegExp(abbr + 'a[kmbt]?'), '');
23945
23946                if (abs >= trillion && !abbrForce || abbrForce === 't') {
23947                    // trillion
23948                    abbr += locale.abbreviations.trillion;
23949                    value = value / trillion;
23950                } else if (abs < trillion && abs >= billion && !abbrForce || abbrForce === 'b') {
23951                    // billion
23952                    abbr += locale.abbreviations.billion;
23953                    value = value / billion;
23954                } else if (abs < billion && abs >= million && !abbrForce || abbrForce === 'm') {
23955                    // million
23956                    abbr += locale.abbreviations.million;
23957                    value = value / million;
23958                } else if (abs < million && abs >= thousand && !abbrForce || abbrForce === 'k') {
23959                    // thousand
23960                    abbr += locale.abbreviations.thousand;
23961                    value = value / thousand;
23962                }
23963            }
23964
23965            // check for optional decimals
23966            if (numeral._.includes(format, '[.]')) {
23967                optDec = true;
23968                format = format.replace('[.]', '.');
23969            }
23970
23971            // break number and format
23972            int = value.toString().split('.')[0];
23973            precision = format.split('.')[1];
23974            thousands = format.indexOf(',');
23975            leadingCount = (format.split('.')[0].split(',')[0].match(/0/g) || []).length;
23976
23977            if (precision) {
23978                if (numeral._.includes(precision, '[')) {
23979                    precision = precision.replace(']', '');
23980                    precision = precision.split('[');
23981                    decimal = numeral._.toFixed(value, (precision[0].length + precision[1].length), roundingFunction, precision[1].length);
23982                } else {
23983                    decimal = numeral._.toFixed(value, precision.length, roundingFunction);
23984                }
23985
23986                int = decimal.split('.')[0];
23987
23988                if (numeral._.includes(decimal, '.')) {
23989                    decimal = locale.delimiters.decimal + decimal.split('.')[1];
23990                } else {
23991                    decimal = '';
23992                }
23993
23994                if (optDec && Number(decimal.slice(1)) === 0) {
23995                    decimal = '';
23996                }
23997            } else {
23998                int = numeral._.toFixed(value, 0, roundingFunction);
23999            }
24000
24001            // check abbreviation again after rounding
24002            if (abbr && !abbrForce && Number(int) >= 1000 && abbr !== locale.abbreviations.trillion) {
24003                int = String(Number(int) / 1000);
24004
24005                switch (abbr) {
24006                    case locale.abbreviations.thousand:
24007                        abbr = locale.abbreviations.million;
24008                        break;
24009                    case locale.abbreviations.million:
24010                        abbr = locale.abbreviations.billion;
24011                        break;
24012                    case locale.abbreviations.billion:
24013                        abbr = locale.abbreviations.trillion;
24014                        break;
24015                }
24016            }
24017
24018
24019            // format number
24020            if (numeral._.includes(int, '-')) {
24021                int = int.slice(1);
24022                neg = true;
24023            }
24024
24025            if (int.length < leadingCount) {
24026                for (var i = leadingCount - int.length; i > 0; i--) {
24027                    int = '0' + int;
24028                }
24029            }
24030
24031            if (thousands > -1) {
24032                int = int.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + locale.delimiters.thousands);
24033            }
24034
24035            if (format.indexOf('.') === 0) {
24036                int = '';
24037            }
24038
24039            output = int + decimal + (abbr ? abbr : '');
24040
24041            if (negP) {
24042                output = (negP && neg ? '(' : '') + output + (negP && neg ? ')' : '');
24043            } else {
24044                if (signed >= 0) {
24045                    output = signed === 0 ? (neg ? '-' : '+') + output : output + (neg ? '-' : '+');
24046                } else if (neg) {
24047                    output = '-' + output;
24048                }
24049            }
24050
24051            return output;
24052        },
24053        // unformats numbers separators, decimals places, signs, abbreviations
24054        stringToNumber: function(string) {
24055            var locale = locales[options.currentLocale],
24056                stringOriginal = string,
24057                abbreviations = {
24058                    thousand: 3,
24059                    million: 6,
24060                    billion: 9,
24061                    trillion: 12
24062                },
24063                abbreviation,
24064                value,
24065                i,
24066                regexp;
24067
24068            if (options.zeroFormat && string === options.zeroFormat) {
24069                value = 0;
24070            } else if (options.nullFormat && string === options.nullFormat || !string.replace(/[^0-9]+/g, '').length) {
24071                value = null;
24072            } else {
24073                value = 1;
24074
24075                if (locale.delimiters.decimal !== '.') {
24076                    string = string.replace(/\./g, '').replace(locale.delimiters.decimal, '.');
24077                }
24078
24079                for (abbreviation in abbreviations) {
24080                    regexp = new RegExp('[^a-zA-Z]' + locale.abbreviations[abbreviation] + '(?:\\)|(\\' + locale.currency.symbol + ')?(?:\\))?)?$');
24081
24082                    if (stringOriginal.match(regexp)) {
24083                        value *= Math.pow(10, abbreviations[abbreviation]);
24084                        break;
24085                    }
24086                }
24087
24088                // check for negative number
24089                value *= (string.split('-').length + Math.min(string.split('(').length - 1, string.split(')').length - 1)) % 2 ? 1 : -1;
24090
24091                // remove non numbers
24092                string = string.replace(/[^0-9\.]+/g, '');
24093
24094                value *= Number(string);
24095            }
24096
24097            return value;
24098        },
24099        isNaN: function(value) {
24100            return typeof value === 'number' && isNaN(value);
24101        },
24102        includes: function(string, search) {
24103            return string.indexOf(search) !== -1;
24104        },
24105        insert: function(string, subString, start) {
24106            return string.slice(0, start) + subString + string.slice(start);
24107        },
24108        reduce: function(array, callback /*, initialValue*/) {
24109            if (this === null) {
24110                throw new TypeError('Array.prototype.reduce called on null or undefined');
24111            }
24112
24113            if (typeof callback !== 'function') {
24114                throw new TypeError(callback + ' is not a function');
24115            }
24116
24117            var t = Object(array),
24118                len = t.length >>> 0,
24119                k = 0,
24120                value;
24121
24122            if (arguments.length === 3) {
24123                value = arguments[2];
24124            } else {
24125                while (k < len && !(k in t)) {
24126                    k++;
24127                }
24128
24129                if (k >= len) {
24130                    throw new TypeError('Reduce of empty array with no initial value');
24131                }
24132
24133                value = t[k++];
24134            }
24135            for (; k < len; k++) {
24136                if (k in t) {
24137                    value = callback(value, t[k], k, t);
24138                }
24139            }
24140            return value;
24141        },
24142        /**
24143         * Computes the multiplier necessary to make x >= 1,
24144         * effectively eliminating miscalculations caused by
24145         * finite precision.
24146         */
24147        multiplier: function (x) {
24148            var parts = x.toString().split('.');
24149
24150            return parts.length < 2 ? 1 : Math.pow(10, parts[1].length);
24151        },
24152        /**
24153         * Given a variable number of arguments, returns the maximum
24154         * multiplier that must be used to normalize an operation involving
24155         * all of them.
24156         */
24157        correctionFactor: function () {
24158            var args = Array.prototype.slice.call(arguments);
24159
24160            return args.reduce(function(accum, next) {
24161                var mn = _.multiplier(next);
24162                return accum > mn ? accum : mn;
24163            }, 1);
24164        },
24165        /**
24166         * Implementation of toFixed() that treats floats more like decimals
24167         *
24168         * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present
24169         * problems for accounting- and finance-related software.
24170         */
24171        toFixed: function(value, maxDecimals, roundingFunction, optionals) {
24172            var splitValue = value.toString().split('.'),
24173                minDecimals = maxDecimals - (optionals || 0),
24174                boundedPrecision,
24175                optionalsRegExp,
24176                power,
24177                output;
24178
24179            // Use the smallest precision value possible to avoid errors from floating point representation
24180            if (splitValue.length === 2) {
24181              boundedPrecision = Math.min(Math.max(splitValue[1].length, minDecimals), maxDecimals);
24182            } else {
24183              boundedPrecision = minDecimals;
24184            }
24185
24186            power = Math.pow(10, boundedPrecision);
24187
24188            // Multiply up by precision, round accurately, then divide and use native toFixed():
24189            output = (roundingFunction(value + 'e+' + boundedPrecision) / power).toFixed(boundedPrecision);
24190
24191            if (optionals > maxDecimals - boundedPrecision) {
24192                optionalsRegExp = new RegExp('\\.?0{1,' + (optionals - (maxDecimals - boundedPrecision)) + '}$');
24193                output = output.replace(optionalsRegExp, '');
24194            }
24195
24196            return output;
24197        }
24198    };
24199
24200    // avaliable options
24201    numeral.options = options;
24202
24203    // avaliable formats
24204    numeral.formats = formats;
24205
24206    // avaliable formats
24207    numeral.locales = locales;
24208
24209    // This function sets the current locale.  If
24210    // no arguments are passed in, it will simply return the current global
24211    // locale key.
24212    numeral.locale = function(key) {
24213        if (key) {
24214            options.currentLocale = key.toLowerCase();
24215        }
24216
24217        return options.currentLocale;
24218    };
24219
24220    // This function provides access to the loaded locale data.  If
24221    // no arguments are passed in, it will simply return the current
24222    // global locale object.
24223    numeral.localeData = function(key) {
24224        if (!key) {
24225            return locales[options.currentLocale];
24226        }
24227
24228        key = key.toLowerCase();
24229
24230        if (!locales[key]) {
24231            throw new Error('Unknown locale : ' + key);
24232        }
24233
24234        return locales[key];
24235    };
24236
24237    numeral.reset = function() {
24238        for (var property in defaults) {
24239            options[property] = defaults[property];
24240        }
24241    };
24242
24243    numeral.zeroFormat = function(format) {
24244        options.zeroFormat = typeof(format) === 'string' ? format : null;
24245    };
24246
24247    numeral.nullFormat = function (format) {
24248        options.nullFormat = typeof(format) === 'string' ? format : null;
24249    };
24250
24251    numeral.defaultFormat = function(format) {
24252        options.defaultFormat = typeof(format) === 'string' ? format : '0.0';
24253    };
24254
24255    numeral.register = function(type, name, format) {
24256        name = name.toLowerCase();
24257
24258        if (this[type + 's'][name]) {
24259            throw new TypeError(name + ' ' + type + ' already registered.');
24260        }
24261
24262        this[type + 's'][name] = format;
24263
24264        return format;
24265    };
24266
24267
24268    numeral.validate = function(val, culture) {
24269        var _decimalSep,
24270            _thousandSep,
24271            _currSymbol,
24272            _valArray,
24273            _abbrObj,
24274            _thousandRegEx,
24275            localeData,
24276            temp;
24277
24278        //coerce val to string
24279        if (typeof val !== 'string') {
24280            val += '';
24281
24282            if (console.warn) {
24283                console.warn('Numeral.js: Value is not string. It has been co-erced to: ', val);
24284            }
24285        }
24286
24287        //trim whitespaces from either sides
24288        val = val.trim();
24289
24290        //if val is just digits return true
24291        if (!!val.match(/^\d+$/)) {
24292            return true;
24293        }
24294
24295        //if val is empty return false
24296        if (val === '') {
24297            return false;
24298        }
24299
24300        //get the decimal and thousands separator from numeral.localeData
24301        try {
24302            //check if the culture is understood by numeral. if not, default it to current locale
24303            localeData = numeral.localeData(culture);
24304        } catch (e) {
24305            localeData = numeral.localeData(numeral.locale());
24306        }
24307
24308        //setup the delimiters and currency symbol based on culture/locale
24309        _currSymbol = localeData.currency.symbol;
24310        _abbrObj = localeData.abbreviations;
24311        _decimalSep = localeData.delimiters.decimal;
24312        if (localeData.delimiters.thousands === '.') {
24313            _thousandSep = '\\.';
24314        } else {
24315            _thousandSep = localeData.delimiters.thousands;
24316        }
24317
24318        // validating currency symbol
24319        temp = val.match(/^[^\d]+/);
24320        if (temp !== null) {
24321            val = val.substr(1);
24322            if (temp[0] !== _currSymbol) {
24323                return false;
24324            }
24325        }
24326
24327        //validating abbreviation symbol
24328        temp = val.match(/[^\d]+$/);
24329        if (temp !== null) {
24330            val = val.slice(0, -1);
24331            if (temp[0] !== _abbrObj.thousand && temp[0] !== _abbrObj.million && temp[0] !== _abbrObj.billion && temp[0] !== _abbrObj.trillion) {
24332                return false;
24333            }
24334        }
24335
24336        _thousandRegEx = new RegExp(_thousandSep + '{2}');
24337
24338        if (!val.match(/[^\d.,]/g)) {
24339            _valArray = val.split(_decimalSep);
24340            if (_valArray.length > 2) {
24341                return false;
24342            } else {
24343                if (_valArray.length < 2) {
24344                    return ( !! _valArray[0].match(/^\d+.*\d$/) && !_valArray[0].match(_thousandRegEx));
24345                } else {
24346                    if (_valArray[0].length === 1) {
24347                        return ( !! _valArray[0].match(/^\d+$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\d+$/));
24348                    } else {
24349                        return ( !! _valArray[0].match(/^\d+.*\d$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\d+$/));
24350                    }
24351                }
24352            }
24353        }
24354
24355        return false;
24356    };
24357
24358
24359    /************************************
24360        Numeral Prototype
24361    ************************************/
24362
24363    numeral.fn = Numeral.prototype = {
24364        clone: function() {
24365            return numeral(this);
24366        },
24367        format: function(inputString, roundingFunction) {
24368            var value = this._value,
24369                format = inputString || options.defaultFormat,
24370                kind,
24371                output,
24372                formatFunction;
24373
24374            // make sure we have a roundingFunction
24375            roundingFunction = roundingFunction || Math.round;
24376
24377            // format based on value
24378            if (value === 0 && options.zeroFormat !== null) {
24379                output = options.zeroFormat;
24380            } else if (value === null && options.nullFormat !== null) {
24381                output = options.nullFormat;
24382            } else {
24383                for (kind in formats) {
24384                    if (format.match(formats[kind].regexps.format)) {
24385                        formatFunction = formats[kind].format;
24386
24387                        break;
24388                    }
24389                }
24390
24391                formatFunction = formatFunction || numeral._.numberToFormat;
24392
24393                output = formatFunction(value, format, roundingFunction);
24394            }
24395
24396            return output;
24397        },
24398        value: function() {
24399            return this._value;
24400        },
24401        input: function() {
24402            return this._input;
24403        },
24404        set: function(value) {
24405            this._value = Number(value);
24406
24407            return this;
24408        },
24409        add: function(value) {
24410            var corrFactor = _.correctionFactor.call(null, this._value, value);
24411
24412            function cback(accum, curr, currI, O) {
24413                return accum + Math.round(corrFactor * curr);
24414            }
24415
24416            this._value = _.reduce([this._value, value], cback, 0) / corrFactor;
24417
24418            return this;
24419        },
24420        subtract: function(value) {
24421            var corrFactor = _.correctionFactor.call(null, this._value, value);
24422
24423            function cback(accum, curr, currI, O) {
24424                return accum - Math.round(corrFactor * curr);
24425            }
24426
24427            this._value = _.reduce([value], cback, Math.round(this._value * corrFactor)) / corrFactor;
24428
24429            return this;
24430        },
24431        multiply: function(value) {
24432            function cback(accum, curr, currI, O) {
24433                var corrFactor = _.correctionFactor(accum, curr);
24434                return Math.round(accum * corrFactor) * Math.round(curr * corrFactor) / Math.round(corrFactor * corrFactor);
24435            }
24436
24437            this._value = _.reduce([this._value, value], cback, 1);
24438
24439            return this;
24440        },
24441        divide: function(value) {
24442            function cback(accum, curr, currI, O) {
24443                var corrFactor = _.correctionFactor(accum, curr);
24444                return Math.round(accum * corrFactor) / Math.round(curr * corrFactor);
24445            }
24446
24447            this._value = _.reduce([this._value, value], cback);
24448
24449            return this;
24450        },
24451        difference: function(value) {
24452            return Math.abs(numeral(this._value).subtract(value).value());
24453        }
24454    };
24455
24456    /************************************
24457        Default Locale && Format
24458    ************************************/
24459
24460    numeral.register('locale', 'en', {
24461        delimiters: {
24462            thousands: ',',
24463            decimal: '.'
24464        },
24465        abbreviations: {
24466            thousand: 'k',
24467            million: 'm',
24468            billion: 'b',
24469            trillion: 't'
24470        },
24471        ordinal: function(number) {
24472            var b = number % 10;
24473            return (~~(number % 100 / 10) === 1) ? 'th' :
24474                (b === 1) ? 'st' :
24475                (b === 2) ? 'nd' :
24476                (b === 3) ? 'rd' : 'th';
24477        },
24478        currency: {
24479            symbol: '$'
24480        }
24481    });
24482
24483    
24484
24485(function() {
24486        numeral.register('format', 'bps', {
24487            regexps: {
24488                format: /(BPS)/,
24489                unformat: /(BPS)/
24490            },
24491            format: function(value, format, roundingFunction) {
24492                var space = numeral._.includes(format, ' BPS') ? ' ' : '',
24493                    output;
24494
24495                value = value * 10000;
24496
24497                // check for space before BPS
24498                format = format.replace(/\s?BPS/, '');
24499
24500                output = numeral._.numberToFormat(value, format, roundingFunction);
24501
24502                if (numeral._.includes(output, ')')) {
24503                    output = output.split('');
24504
24505                    output.splice(-1, 0, space + 'BPS');
24506
24507                    output = output.join('');
24508                } else {
24509                    output = output + space + 'BPS';
24510                }
24511
24512                return output;
24513            },
24514            unformat: function(string) {
24515                return +(numeral._.stringToNumber(string) * 0.0001).toFixed(15);
24516            }
24517        });
24518})();
24519
24520
24521(function() {
24522        var decimal = {
24523            base: 1000,
24524            suffixes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
24525        },
24526        binary = {
24527            base: 1024,
24528            suffixes: ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']
24529        };
24530
24531    var allSuffixes =  decimal.suffixes.concat(binary.suffixes.filter(function (item) {
24532            return decimal.suffixes.indexOf(item) < 0;
24533        }));
24534        var unformatRegex = allSuffixes.join('|');
24535        // Allow support for BPS (http://www.investopedia.com/terms/b/basispoint.asp)
24536        unformatRegex = '(' + unformatRegex.replace('B', 'B(?!PS)') + ')';
24537
24538    numeral.register('format', 'bytes', {
24539        regexps: {
24540            format: /([0\s]i?b)/,
24541            unformat: new RegExp(unformatRegex)
24542        },
24543        format: function(value, format, roundingFunction) {
24544            var output,
24545                bytes = numeral._.includes(format, 'ib') ? binary : decimal,
24546                suffix = numeral._.includes(format, ' b') || numeral._.includes(format, ' ib') ? ' ' : '',
24547                power,
24548                min,
24549                max;
24550
24551            // check for space before
24552            format = format.replace(/\s?i?b/, '');
24553
24554            for (power = 0; power <= bytes.suffixes.length; power++) {
24555                min = Math.pow(bytes.base, power);
24556                max = Math.pow(bytes.base, power + 1);
24557
24558                if (value === null || value === 0 || value >= min && value < max) {
24559                    suffix += bytes.suffixes[power];
24560
24561                    if (min > 0) {
24562                        value = value / min;
24563                    }
24564
24565                    break;
24566                }
24567            }
24568
24569            output = numeral._.numberToFormat(value, format, roundingFunction);
24570
24571            return output + suffix;
24572        },
24573        unformat: function(string) {
24574            var value = numeral._.stringToNumber(string),
24575                power,
24576                bytesMultiplier;
24577
24578            if (value) {
24579                for (power = decimal.suffixes.length - 1; power >= 0; power--) {
24580                    if (numeral._.includes(string, decimal.suffixes[power])) {
24581                        bytesMultiplier = Math.pow(decimal.base, power);
24582
24583                        break;
24584                    }
24585
24586                    if (numeral._.includes(string, binary.suffixes[power])) {
24587                        bytesMultiplier = Math.pow(binary.base, power);
24588
24589                        break;
24590                    }
24591                }
24592
24593                value *= (bytesMultiplier || 1);
24594            }
24595
24596            return value;
24597        }
24598    });
24599})();
24600
24601
24602(function() {
24603        numeral.register('format', 'currency', {
24604        regexps: {
24605            format: /(\$)/
24606        },
24607        format: function(value, format, roundingFunction) {
24608            var locale = numeral.locales[numeral.options.currentLocale],
24609                symbols = {
24610                    before: format.match(/^([\+|\-|\(|\s|\$]*)/)[0],
24611                    after: format.match(/([\+|\-|\)|\s|\$]*)$/)[0]
24612                },
24613                output,
24614                symbol,
24615                i;
24616
24617            // strip format of spaces and $
24618            format = format.replace(/\s?\$\s?/, '');
24619
24620            // format the number
24621            output = numeral._.numberToFormat(value, format, roundingFunction);
24622
24623            // update the before and after based on value
24624            if (value >= 0) {
24625                symbols.before = symbols.before.replace(/[\-\(]/, '');
24626                symbols.after = symbols.after.replace(/[\-\)]/, '');
24627            } else if (value < 0 && (!numeral._.includes(symbols.before, '-') && !numeral._.includes(symbols.before, '('))) {
24628                symbols.before = '-' + symbols.before;
24629            }
24630
24631            // loop through each before symbol
24632            for (i = 0; i < symbols.before.length; i++) {
24633                symbol = symbols.before[i];
24634
24635                switch (symbol) {
24636                    case '$':
24637                        output = numeral._.insert(output, locale.currency.symbol, i);
24638                        break;
24639                    case ' ':
24640                        output = numeral._.insert(output, ' ', i + locale.currency.symbol.length - 1);
24641                        break;
24642                }
24643            }
24644
24645            // loop through each after symbol
24646            for (i = symbols.after.length - 1; i >= 0; i--) {
24647                symbol = symbols.after[i];
24648
24649                switch (symbol) {
24650                    case '$':
24651                        output = i === symbols.after.length - 1 ? output + locale.currency.symbol : numeral._.insert(output, locale.currency.symbol, -(symbols.after.length - (1 + i)));
24652                        break;
24653                    case ' ':
24654                        output = i === symbols.after.length - 1 ? output + ' ' : numeral._.insert(output, ' ', -(symbols.after.length - (1 + i) + locale.currency.symbol.length - 1));
24655                        break;
24656                }
24657            }
24658
24659
24660            return output;
24661        }
24662    });
24663})();
24664
24665
24666(function() {
24667        numeral.register('format', 'exponential', {
24668        regexps: {
24669            format: /(e\+|e-)/,
24670            unformat: /(e\+|e-)/
24671        },
24672        format: function(value, format, roundingFunction) {
24673            var output,
24674                exponential = typeof value === 'number' && !numeral._.isNaN(value) ? value.toExponential() : '0e+0',
24675                parts = exponential.split('e');
24676
24677            format = format.replace(/e[\+|\-]{1}0/, '');
24678
24679            output = numeral._.numberToFormat(Number(parts[0]), format, roundingFunction);
24680
24681            return output + 'e' + parts[1];
24682        },
24683        unformat: function(string) {
24684            var parts = numeral._.includes(string, 'e+') ? string.split('e+') : string.split('e-'),
24685                value = Number(parts[0]),
24686                power = Number(parts[1]);
24687
24688            power = numeral._.includes(string, 'e-') ? power *= -1 : power;
24689
24690            function cback(accum, curr, currI, O) {
24691                var corrFactor = numeral._.correctionFactor(accum, curr),
24692                    num = (accum * corrFactor) * (curr * corrFactor) / (corrFactor * corrFactor);
24693                return num;
24694            }
24695
24696            return numeral._.reduce([value, Math.pow(10, power)], cback, 1);
24697        }
24698    });
24699})();
24700
24701
24702(function() {
24703        numeral.register('format', 'ordinal', {
24704        regexps: {
24705            format: /(o)/
24706        },
24707        format: function(value, format, roundingFunction) {
24708            var locale = numeral.locales[numeral.options.currentLocale],
24709                output,
24710                ordinal = numeral._.includes(format, ' o') ? ' ' : '';
24711
24712            // check for space before
24713            format = format.replace(/\s?o/, '');
24714
24715            ordinal += locale.ordinal(value);
24716
24717            output = numeral._.numberToFormat(value, format, roundingFunction);
24718
24719            return output + ordinal;
24720        }
24721    });
24722})();
24723
24724
24725(function() {
24726        numeral.register('format', 'percentage', {
24727        regexps: {
24728            format: /(%)/,
24729            unformat: /(%)/
24730        },
24731        format: function(value, format, roundingFunction) {
24732            var space = numeral._.includes(format, ' %') ? ' ' : '',
24733                output;
24734
24735            if (numeral.options.scalePercentBy100) {
24736                value = value * 100;
24737            }
24738
24739            // check for space before %
24740            format = format.replace(/\s?\%/, '');
24741
24742            output = numeral._.numberToFormat(value, format, roundingFunction);
24743
24744            if (numeral._.includes(output, ')')) {
24745                output = output.split('');
24746
24747                output.splice(-1, 0, space + '%');
24748
24749                output = output.join('');
24750            } else {
24751                output = output + space + '%';
24752            }
24753
24754            return output;
24755        },
24756        unformat: function(string) {
24757            var number = numeral._.stringToNumber(string);
24758            if (numeral.options.scalePercentBy100) {
24759                return number * 0.01;
24760            }
24761            return number;
24762        }
24763    });
24764})();
24765
24766
24767(function() {
24768        numeral.register('format', 'time', {
24769        regexps: {
24770            format: /(:)/,
24771            unformat: /(:)/
24772        },
24773        format: function(value, format, roundingFunction) {
24774            var hours = Math.floor(value / 60 / 60),
24775                minutes = Math.floor((value - (hours * 60 * 60)) / 60),
24776                seconds = Math.round(value - (hours * 60 * 60) - (minutes * 60));
24777
24778            return hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds);
24779        },
24780        unformat: function(string) {
24781            var timeArray = string.split(':'),
24782                seconds = 0;
24783
24784            // turn hours and minutes into seconds and add them all up
24785            if (timeArray.length === 3) {
24786                // hours
24787                seconds = seconds + (Number(timeArray[0]) * 60 * 60);
24788                // minutes
24789                seconds = seconds + (Number(timeArray[1]) * 60);
24790                // seconds
24791                seconds = seconds + Number(timeArray[2]);
24792            } else if (timeArray.length === 2) {
24793                // minutes
24794                seconds = seconds + (Number(timeArray[0]) * 60);
24795                // seconds
24796                seconds = seconds + Number(timeArray[1]);
24797            }
24798            return Number(seconds);
24799        }
24800    });
24801})();
24802
24803return numeral;
24804}));
24805
24806},{}],121:[function(require,module,exports){
24807(function (global){(function (){
24808var hasMap = typeof Map === 'function' && Map.prototype;
24809var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;
24810var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;
24811var mapForEach = hasMap && Map.prototype.forEach;
24812var hasSet = typeof Set === 'function' && Set.prototype;
24813var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;
24814var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;
24815var setForEach = hasSet && Set.prototype.forEach;
24816var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;
24817var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;
24818var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;
24819var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;
24820var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;
24821var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;
24822var booleanValueOf = Boolean.prototype.valueOf;
24823var objectToString = Object.prototype.toString;
24824var functionToString = Function.prototype.toString;
24825var $match = String.prototype.match;
24826var $slice = String.prototype.slice;
24827var $replace = String.prototype.replace;
24828var $toUpperCase = String.prototype.toUpperCase;
24829var $toLowerCase = String.prototype.toLowerCase;
24830var $test = RegExp.prototype.test;
24831var $concat = Array.prototype.concat;
24832var $join = Array.prototype.join;
24833var $arrSlice = Array.prototype.slice;
24834var $floor = Math.floor;
vendor: 4,990 bytes, lines 24835-24969
24835var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;
24836var gOPS = Object.getOwnPropertySymbols;
24837var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;
24838var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';
24839// ie, `has-tostringtag/shams
24840var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')
24841    ? Symbol.toStringTag
24842    : null;
24843var isEnumerable = Object.prototype.propertyIsEnumerable;
24844
24845var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (
24846    [].__proto__ === Array.prototype // eslint-disable-line no-proto
24847        ? function (O) {
24848            return O.__proto__; // eslint-disable-line no-proto
24849        }
24850        : null
24851);
24852
24853function addNumericSeparator(num, str) {
24854    if (
24855        num === Infinity
24856        || num === -Infinity
24857        || num !== num
24858        || (num && num > -1000 && num < 1000)
24859        || $test.call(/e/, str)
24860    ) {
24861        return str;
24862    }
24863    var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;
24864    if (typeof num === 'number') {
24865        var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)
24866        if (int !== num) {
24867            var intStr = String(int);
24868            var dec = $slice.call(str, intStr.length + 1);
24869            return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');
24870        }
24871    }
24872    return $replace.call(str, sepRegex, '$&_');
24873}
24874
24875var utilInspect = require('./util.inspect');
24876var inspectCustom = utilInspect.custom;
24877var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;
24878
24879module.exports = function inspect_(obj, options, depth, seen) {
24880    var opts = options || {};
24881
24882    if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {
24883        throw new TypeError('option "quoteStyle" must be "single" or "double"');
24884    }
24885    if (
24886        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'
24887            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity
24888            : opts.maxStringLength !== null
24889        )
24890    ) {
24891        throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');
24892    }
24893    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;
24894    if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {
24895        throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`');
24896    }
24897
24898    if (
24899        has(opts, 'indent')
24900        && opts.indent !== null
24901        && opts.indent !== '\t'
24902        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)
24903    ) {
24904        throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');
24905    }
24906    if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {
24907        throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');
24908    }
24909    var numericSeparator = opts.numericSeparator;
24910
24911    if (typeof obj === 'undefined') {
24912        return 'undefined';
24913    }
24914    if (obj === null) {
24915        return 'null';
24916    }
24917    if (typeof obj === 'boolean') {
24918        return obj ? 'true' : 'false';
24919    }
24920
24921    if (typeof obj === 'string') {
24922        return inspectString(obj, opts);
24923    }
24924    if (typeof obj === 'number') {
24925        if (obj === 0) {
24926            return Infinity / obj > 0 ? '0' : '-0';
24927        }
24928        var str = String(obj);
24929        return numericSeparator ? addNumericSeparator(obj, str) : str;
24930    }
24931    if (typeof obj === 'bigint') {
24932        var bigIntStr = String(obj) + 'n';
24933        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;
24934    }
24935
24936    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;
24937    if (typeof depth === 'undefined') { depth = 0; }
24938    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {
24939        return isArray(obj) ? '[Array]' : '[Object]';
24940    }
24941
24942    var indent = getIndent(opts, depth);
24943
24944    if (typeof seen === 'undefined') {
24945        seen = [];
24946    } else if (indexOf(seen, obj) >= 0) {
24947        return '[Circular]';
24948    }
24949
24950    function inspect(value, from, noIndent) {
24951        if (from) {
24952            seen = $arrSlice.call(seen);
24953            seen.push(from);
24954        }
24955        if (noIndent) {
24956            var newOpts = {
24957                depth: opts.depth
24958            };
24959            if (has(opts, 'quoteStyle')) {
24960                newOpts.quoteStyle = opts.quoteStyle;
24961            }
24962            return inspect_(value, newOpts, depth + 1, seen);
24963        }
24964        return inspect_(value, opts, depth + 1, seen);
24965    }
24966
24967    if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable
24968        var name = nameOf(obj);
24969        var keys = arrObjKeys(obj, inspect);
vendor: 5,588 bytes, lines 24970-25089
24970        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');
24971    }
24972    if (isSymbol(obj)) {
24973        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj);
24974        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;
24975    }
24976    if (isElement(obj)) {
24977        var s = '<' + $toLowerCase.call(String(obj.nodeName));
24978        var attrs = obj.attributes || [];
24979        for (var i = 0; i < attrs.length; i++) {
24980            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);
24981        }
24982        s += '>';
24983        if (obj.childNodes && obj.childNodes.length) { s += '...'; }
24984        s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';
24985        return s;
24986    }
24987    if (isArray(obj)) {
24988        if (obj.length === 0) { return '[]'; }
24989        var xs = arrObjKeys(obj, inspect);
24990        if (indent && !singleLineValues(xs)) {
24991            return '[' + indentedJoin(xs, indent) + ']';
24992        }
24993        return '[ ' + $join.call(xs, ', ') + ' ]';
24994    }
24995    if (isError(obj)) {
24996        var parts = arrObjKeys(obj, inspect);
24997        if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {
24998            return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';
24999        }
25000        if (parts.length === 0) { return '[' + String(obj) + ']'; }
25001        return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';
25002    }
25003    if (typeof obj === 'object' && customInspect) {
25004        if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {
25005            return utilInspect(obj, { depth: maxDepth - depth });
25006        } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {
25007            return obj.inspect();
25008        }
25009    }
25010    if (isMap(obj)) {
25011        var mapParts = [];
25012        if (mapForEach) {
25013            mapForEach.call(obj, function (value, key) {
25014                mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));
25015            });
25016        }
25017        return collectionOf('Map', mapSize.call(obj), mapParts, indent);
25018    }
25019    if (isSet(obj)) {
25020        var setParts = [];
25021        if (setForEach) {
25022            setForEach.call(obj, function (value) {
25023                setParts.push(inspect(value, obj));
25024            });
25025        }
25026        return collectionOf('Set', setSize.call(obj), setParts, indent);
25027    }
25028    if (isWeakMap(obj)) {
25029        return weakCollectionOf('WeakMap');
25030    }
25031    if (isWeakSet(obj)) {
25032        return weakCollectionOf('WeakSet');
25033    }
25034    if (isWeakRef(obj)) {
25035        return weakCollectionOf('WeakRef');
25036    }
25037    if (isNumber(obj)) {
25038        return markBoxed(inspect(Number(obj)));
25039    }
25040    if (isBigInt(obj)) {
25041        return markBoxed(inspect(bigIntValueOf.call(obj)));
25042    }
25043    if (isBoolean(obj)) {
25044        return markBoxed(booleanValueOf.call(obj));
25045    }
25046    if (isString(obj)) {
25047        return markBoxed(inspect(String(obj)));
25048    }
25049    // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other
25050    /* eslint-env browser */
25051    if (typeof window !== 'undefined' && obj === window) {
25052        return '{ [object Window] }';
25053    }
25054    if (obj === global) {
25055        return '{ [object globalThis] }';
25056    }
25057    if (!isDate(obj) && !isRegExp(obj)) {
25058        var ys = arrObjKeys(obj, inspect);
25059        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;
25060        var protoTag = obj instanceof Object ? '' : 'null prototype';
25061        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';
25062        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';
25063        var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');
25064        if (ys.length === 0) { return tag + '{}'; }
25065        if (indent) {
25066            return tag + '{' + indentedJoin(ys, indent) + '}';
25067        }
25068        return tag + '{ ' + $join.call(ys, ', ') + ' }';
25069    }
25070    return String(obj);
25071};
25072
25073function wrapQuotes(s, defaultStyle, opts) {
25074    var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'";
25075    return quoteChar + s + quoteChar;
25076}
25077
25078function quote(s) {
25079    return $replace.call(String(s), /"/g, '&quot;');
25080}
25081
25082function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
25083function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
25084function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
25085function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
25086function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
25087function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
25088function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
25089
vendor: 4,465 bytes, lines 25090-25266
25090// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives
25091function isSymbol(obj) {
25092    if (hasShammedSymbols) {
25093        return obj && typeof obj === 'object' && obj instanceof Symbol;
25094    }
25095    if (typeof obj === 'symbol') {
25096        return true;
25097    }
25098    if (!obj || typeof obj !== 'object' || !symToString) {
25099        return false;
25100    }
25101    try {
25102        symToString.call(obj);
25103        return true;
25104    } catch (e) {}
25105    return false;
25106}
25107
25108function isBigInt(obj) {
25109    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {
25110        return false;
25111    }
25112    try {
25113        bigIntValueOf.call(obj);
25114        return true;
25115    } catch (e) {}
25116    return false;
25117}
25118
25119var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };
25120function has(obj, key) {
25121    return hasOwn.call(obj, key);
25122}
25123
25124function toStr(obj) {
25125    return objectToString.call(obj);
25126}
25127
25128function nameOf(f) {
25129    if (f.name) { return f.name; }
25130    var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/);
25131    if (m) { return m[1]; }
25132    return null;
25133}
25134
25135function indexOf(xs, x) {
25136    if (xs.indexOf) { return xs.indexOf(x); }
25137    for (var i = 0, l = xs.length; i < l; i++) {
25138        if (xs[i] === x) { return i; }
25139    }
25140    return -1;
25141}
25142
25143function isMap(x) {
25144    if (!mapSize || !x || typeof x !== 'object') {
25145        return false;
25146    }
25147    try {
25148        mapSize.call(x);
25149        try {
25150            setSize.call(x);
25151        } catch (s) {
25152            return true;
25153        }
25154        return x instanceof Map; // core-js workaround, pre-v2.5.0
25155    } catch (e) {}
25156    return false;
25157}
25158
25159function isWeakMap(x) {
25160    if (!weakMapHas || !x || typeof x !== 'object') {
25161        return false;
25162    }
25163    try {
25164        weakMapHas.call(x, weakMapHas);
25165        try {
25166            weakSetHas.call(x, weakSetHas);
25167        } catch (s) {
25168            return true;
25169        }
25170        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0
25171    } catch (e) {}
25172    return false;
25173}
25174
25175function isWeakRef(x) {
25176    if (!weakRefDeref || !x || typeof x !== 'object') {
25177        return false;
25178    }
25179    try {
25180        weakRefDeref.call(x);
25181        return true;
25182    } catch (e) {}
25183    return false;
25184}
25185
25186function isSet(x) {
25187    if (!setSize || !x || typeof x !== 'object') {
25188        return false;
25189    }
25190    try {
25191        setSize.call(x);
25192        try {
25193            mapSize.call(x);
25194        } catch (m) {
25195            return true;
25196        }
25197        return x instanceof Set; // core-js workaround, pre-v2.5.0
25198    } catch (e) {}
25199    return false;
25200}
25201
25202function isWeakSet(x) {
25203    if (!weakSetHas || !x || typeof x !== 'object') {
25204        return false;
25205    }
25206    try {
25207        weakSetHas.call(x, weakSetHas);
25208        try {
25209            weakMapHas.call(x, weakMapHas);
25210        } catch (s) {
25211            return true;
25212        }
25213        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0
25214    } catch (e) {}
25215    return false;
25216}
25217
25218function isElement(x) {
25219    if (!x || typeof x !== 'object') { return false; }
25220    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {
25221        return true;
25222    }
25223    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';
25224}
25225
25226function inspectString(str, opts) {
25227    if (str.length > opts.maxStringLength) {
25228        var remaining = str.length - opts.maxStringLength;
25229        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');
25230        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;
25231    }
25232    // eslint-disable-next-line no-control-regex
25233    var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte);
25234    return wrapQuotes(s, 'single', opts);
25235}
25236
25237function lowbyte(c) {
25238    var n = c.charCodeAt(0);
25239    var x = {
25240        8: 'b',
25241        9: 't',
25242        10: 'n',
25243        12: 'f',
25244        13: 'r'
25245    }[n];
25246    if (x) { return '\\' + x; }
25247    return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));
25248}
25249
25250function markBoxed(str) {
25251    return 'Object(' + str + ')';
25252}
25253
25254function weakCollectionOf(type) {
25255    return type + ' { ? }';
25256}
25257
25258function collectionOf(type, size, entries, indent) {
25259    var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');
25260    return type + ' (' + size + ') {' + joinedEntries + '}';
25261}
25262
25263function singleLineValues(xs) {
25264    for (var i = 0; i < xs.length; i++) {
25265        if (indexOf(xs[i], '\n') >= 0) {
25266            return false;
25267        }
25268    }
25269    return true;
25270}
25271
25272function getIndent(opts, depth) {
25273    var baseIndent;
25274    if (opts.indent === '\t') {
25275        baseIndent = '\t';
25276    } else if (typeof opts.indent === 'number' && opts.indent > 0) {
25277        baseIndent = $join.call(Array(opts.indent + 1), ' ');
25278    } else {
25279        return null;
25280    }
25281    return {
25282        base: baseIndent,
25283        prev: $join.call(Array(depth + 1), baseIndent)
25284    };
25285}
25286
25287function indentedJoin(xs, indent) {
25288    if (xs.length === 0) { return ''; }
25289    var lineJoiner = '\n' + indent.prev + indent.base;
25290    return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev;
25291}
25292
25293function arrObjKeys(obj, inspect) {
25294    var isArr = isArray(obj);
25295    var xs = [];
25296    if (isArr) {
25297        xs.length = obj.length;
25298        for (var i = 0; i < obj.length; i++) {
25299            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';
25300        }
25301    }
25302    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];
25303    var symMap;
25304    if (hasShammedSymbols) {
25305        symMap = {};
25306        for (var k = 0; k < syms.length; k++) {
25307            symMap['$' + syms[k]] = syms[k];
25308        }
25309    }
25310
25311    for (var key in obj) { // eslint-disable-line no-restricted-syntax
25312        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue
25313        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue
25314        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {
25315            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section
25316            continue; // eslint-disable-line no-restricted-syntax, no-continue
25317        } else if ($test.call(/[^\w$]/, key)) {
25318            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));
25319        } else {
25320            xs.push(key + ': ' + inspect(obj[key], obj));
25321        }
25322    }
25323    if (typeof gOPS === 'function') {
25324        for (var j = 0; j < syms.length; j++) {
25325            if (isEnumerable.call(obj, syms[j])) {
25326                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));
25327            }
25328        }
25329    }
25330    return xs;
25331}
25332
25333}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
25334},{"./util.inspect":12}],122:[function(require,module,exports){
25335'use strict';
25336
25337var keysShim;
25338if (!Object.keys) {
25339	// modified from https://github.com/es-shims/es5-shim
25340	var has = Object.prototype.hasOwnProperty;
25341	var toStr = Object.prototype.toString;
25342	var isArgs = require('./isArguments'); // eslint-disable-line global-require
25343	var isEnumerable = Object.prototype.propertyIsEnumerable;
25344	var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
25345	var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
25346	var dontEnums = [
25347		'toString',
25348		'toLocaleString',
25349		'valueOf',
25350		'hasOwnProperty',
25351		'isPrototypeOf',
25352		'propertyIsEnumerable',
25353		'constructor'
25354	];
25355	var equalsConstructorPrototype = function (o) {
25356		var ctor = o.constructor;
25357		return ctor && ctor.prototype === o;
25358	};
25359	var excludedKeys = {
25360		$applicationCache: true,
25361		$console: true,
25362		$external: true,
25363		$frame: true,
25364		$frameElement: true,
25365		$frames: true,
25366		$innerHeight: true,
25367		$innerWidth: true,
25368		$onmozfullscreenchange: true,
25369		$onmozfullscreenerror: true,
25370		$outerHeight: true,
25371		$outerWidth: true,
25372		$pageXOffset: true,
25373		$pageYOffset: true,
25374		$parent: true,
25375		$scrollLeft: true,
25376		$scrollTop: true,
25377		$scrollX: true,
25378		$scrollY: true,
25379		$self: true,
25380		$webkitIndexedDB: true,
25381		$webkitStorageInfo: true,
25382		$window: true
25383	};
25384	var hasAutomationEqualityBug = (function () {
25385		/* global window */
25386		if (typeof window === 'undefined') { return false; }
25387		for (var k in window) {
25388			try {
25389				if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
25390					try {
25391						equalsConstructorPrototype(window[k]);
25392					} catch (e) {
25393						return true;
25394					}
25395				}
25396			} catch (e) {
25397				return true;
25398			}
25399		}
25400		return false;
vendor: 2,457 bytes, lines 25401-25492
25401	}());
25402	var equalsConstructorPrototypeIfNotBuggy = function (o) {
25403		/* global window */
25404		if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
25405			return equalsConstructorPrototype(o);
25406		}
25407		try {
25408			return equalsConstructorPrototype(o);
25409		} catch (e) {
25410			return false;
25411		}
25412	};
25413
25414	keysShim = function keys(object) {
25415		var isObject = object !== null && typeof object === 'object';
25416		var isFunction = toStr.call(object) === '[object Function]';
25417		var isArguments = isArgs(object);
25418		var isString = isObject && toStr.call(object) === '[object String]';
25419		var theKeys = [];
25420
25421		if (!isObject && !isFunction && !isArguments) {
25422			throw new TypeError('Object.keys called on a non-object');
25423		}
25424
25425		var skipProto = hasProtoEnumBug && isFunction;
25426		if (isString && object.length > 0 && !has.call(object, 0)) {
25427			for (var i = 0; i < object.length; ++i) {
25428				theKeys.push(String(i));
25429			}
25430		}
25431
25432		if (isArguments && object.length > 0) {
25433			for (var j = 0; j < object.length; ++j) {
25434				theKeys.push(String(j));
25435			}
25436		} else {
25437			for (var name in object) {
25438				if (!(skipProto && name === 'prototype') && has.call(object, name)) {
25439					theKeys.push(String(name));
25440				}
25441			}
25442		}
25443
25444		if (hasDontEnumBug) {
25445			var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
25446
25447			for (var k = 0; k < dontEnums.length; ++k) {
25448				if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
25449					theKeys.push(dontEnums[k]);
25450				}
25451			}
25452		}
25453		return theKeys;
25454	};
25455}
25456module.exports = keysShim;
25457
25458},{"./isArguments":124}],123:[function(require,module,exports){
25459'use strict';
25460
25461var slice = Array.prototype.slice;
25462var isArgs = require('./isArguments');
25463
25464var origKeys = Object.keys;
25465var keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');
25466
25467var originalKeys = Object.keys;
25468
25469keysShim.shim = function shimObjectKeys() {
25470	if (Object.keys) {
25471		var keysWorksWithArguments = (function () {
25472			// Safari 5.0 bug
25473			var args = Object.keys(arguments);
25474			return args && args.length === arguments.length;
25475		}(1, 2));
25476		if (!keysWorksWithArguments) {
25477			Object.keys = function keys(object) { // eslint-disable-line func-name-matching
25478				if (isArgs(object)) {
25479					return originalKeys(slice.call(object));
25480				}
25481				return originalKeys(object);
25482			};
25483		}
25484	} else {
25485		Object.keys = keysShim;
25486	}
25487	return Object.keys || keysShim;
25488};
25489
25490module.exports = keysShim;
25491
25492},{"./implementation":122,"./isArguments":124}
25492],124:[function(require,module,exports){
25493'use strict';
25494
25495var toStr = Object.prototype.toString;
25496
25497module.exports = function isArguments(value) {
25498	var str = toStr.call(value);
25499	var isArgs = str === '[object Arguments]';
25500	if (!isArgs) {
25501		isArgs = str !== '[object Array]' &&
25502			value !== null &&
25503			typeof value === 'object' &&
25504			typeof value.length === 'number' &&
25505			value.length >= 0 &&
25506			toStr.call(value.callee) === '[object Function]';
25507	}
25508	return isArgs;
25509};
25510
25511},{}],125:[function(require,module,exports){
25512'use strict';
25513
25514var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
25515var callBound = require('call-bind/callBound');
25516var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
25517var $push = callBound('Array.prototype.push');
25518
25519module.exports = function entries(O) {
25520	var obj = RequireObjectCoercible(O);
25521	var entrys = [];
25522	for (var key in obj) {
25523		if ($isEnumerable(obj, key)) { // checks own-ness as well
25524			$push(entrys, [key, obj[key]]);
25525		}
25526	}
25527	return entrys;
25528};
25529
25530},{"call-bind/callBound":13,"es-object-atoms/RequireObjectCoercible":79}],126:[function(require,module,exports){
25531'use strict';
25532
25533var define = require('define-properties');
25534var callBind = require('call-bind');
25535
25536var implementation = require('./implementation');
25537var getPolyfill = require('./polyfill');
25538var shim = require('./shim');
25539
25540var polyfill = callBind(getPolyfill(), Object);
25541
25542define(polyfill, {
25543	getPolyfill: getPolyfill,
25544	implementation: implementation,
25545	shim: shim
25546});
25547
25548module.exports = polyfill;
25549
25550},{"./implementation":125,"./polyfill":127,"./shim":128,"call-bind":14,"define-properties":16}],127:[function(require,module,exports){
25551'use strict';
25552
25553var implementation = require('./implementation');
25554
25555module.exports = function getPolyfill() {
25556	return typeof Object.entries === 'function' ? Object.entries : implementation;
25557};
25558
25559},{"./implementation":125}],128:[function(require,module,exports){
25560'use strict';
25561
25562var getPolyfill = require('./polyfill');
25563var define = require('define-properties');
25564
25565module.exports = function shimEntries() {
25566	var polyfill = getPolyfill();
25567	define(Object, { entries: polyfill }, {
25568		entries: function testEntries() {
25569			return Object.entries !== polyfill;
25570		}
25571	});
25572	return polyfill;
25573};
25574
25575},{"./polyfill":127,"define-properties":16}],129:[function(require,module,exports){
25576'use strict';
25577
25578var CreateDataProperty = require('es-abstract/2024/CreateDataProperty');
25579var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
25580var ToObject = require('es-object-atoms/ToObject');
25581var safeConcat = require('safe-array-concat');
25582var reduce = require('array.prototype.reduce');
25583var gOPD = require('gopd');
25584var $Object = require('es-object-atoms');
25585
25586var $getOwnNames = $Object.getOwnPropertyNames;
25587var $getSymbols = $Object.getOwnPropertySymbols;
25588
25589var getAll = $getSymbols ? function (obj) {
25590	return safeConcat($getOwnNames(obj), $getSymbols(obj));
25591} : $getOwnNames;
25592
25593var isES5 = gOPD && typeof $getOwnNames === 'function';
25594
25595module.exports = function getOwnPropertyDescriptors(value) {
25596	RequireObjectCoercible(value);
25597	if (!isES5) {
25598		throw new TypeError('getOwnPropertyDescriptors requires Object.getOwnPropertyDescriptor');
25599	}
25600
25601	var O = ToObject(value);
25602	return reduce(
25603		getAll(O),
25604		function (acc, key) {
25605			var descriptor = gOPD(O, key);
25606			if (typeof descriptor !== 'undefined') {
25607				CreateDataProperty(acc, key, descriptor);
25608			}
25609			return acc;
25610		},
25611		{}
25612	);
25613};
25614
25615},{"array.prototype.reduce":8,"es-abstract/2024/CreateDataProperty":25,"es-object-atoms":81,"es-object-atoms/RequireObjectCoercible":79,"es-object-atoms/ToObject":80,"gopd":102,"safe-array-concat":139}],130:[function(require,module,exports){
25616'use strict';
25617
25618var define = require('define-properties');
25619var callBind = require('call-bind');
25620
25621var implementation = require('./implementation');
25622var getPolyfill = require('./polyfill');
25623var shim = require('./shim');
25624
25625var bound = callBind(getPolyfill(), Object);
25626
25627define(bound, {
25628	getPolyfill: getPolyfill,
25629	implementation: implementation,
25630	shim: shim
25631});
25632
25633module.exports = bound;
25634
25635},{"./implementation":129,"./polyfill":131,"./shim":132,"call-bind":14,"define-properties":16}],131:[function(require,module,exports){
25636'use strict';
25637
25638var implementation = require('./implementation');
25639
25640module.exports = function getPolyfill() {
25641	return typeof Object.getOwnPropertyDescriptors === 'function' ? Object.getOwnPropertyDescriptors : implementation;
25642};
25643
25644},{"./implementation":129}
25644],132:[function(require,module,exports){
25645'use strict';
25646
25647var getPolyfill = require('./polyfill');
25648var define = require('define-properties');
25649
25650module.exports = function shimGetOwnPropertyDescriptors() {
25651	var polyfill = getPolyfill();
25652	define(
25653		Object,
25654		{ getOwnPropertyDescriptors: polyfill },
25655		{ getOwnPropertyDescriptors: function () { return Object.getOwnPropertyDescriptors !== polyfill; } }
25656	);
25657	return polyfill;
25658};
25659
25660},{"./polyfill":131,"define-properties":16}],133:[function(require,module,exports){
25661'use strict';
25662
25663var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
25664var callBound = require('call-bind/callBound');
25665
25666var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
25667var $push = callBound('Array.prototype.push');
25668
25669module.exports = function values(O) {
25670	var obj = RequireObjectCoercible(O);
25671	var vals = [];
25672	for (var key in obj) {
25673		if ($isEnumerable(obj, key)) { // checks own-ness as well
25674			$push(vals, obj[key]);
25675		}
25676	}
25677	return vals;
25678};
25679
25680},{"call-bind/callBound":13,"es-object-atoms/RequireObjectCoercible":79}],134:[function(require,module,exports){
25681arguments[4][126][0].apply(exports,arguments)
25682},{"./implementation":133,"./polyfill":135,"./shim":136,"call-bind":14,"define-properties":16,"dup":126}],135:[function(require,module,exports){
25683'use strict';
25684
25685var implementation = require('./implementation');
25686
25687module.exports = function getPolyfill() {
25688	return typeof Object.values === 'function' ? Object.values : implementation;
25689};
25690
25691},{"./implementation":133}],136:[function(require,module,exports){
25692'use strict';
25693
25694var getPolyfill = require('./polyfill');
25695var define = require('define-properties');
25696
25697module.exports = function shimValues() {
25698	var polyfill = getPolyfill();
25699	define(Object, { values: polyfill }, {
25700		values: function testValues() {
25701			return Object.values !== polyfill;
25702		}
25703	});
25704	return polyfill;
25705};
25706
25707},{"./polyfill":135,"define-properties":16}],137:[function(require,module,exports){
25708// shim for using process in browser
25709var process = module.exports = {};
25710
25711// cached from whatever global is present so that test runners that stub it
25712// don't break things.  But we need to wrap it in a try catch in case it is
25713// wrapped in strict mode code which doesn't define any globals.  It's inside a
25714// function because try/catches deoptimize in certain engines.
25715
25716var cachedSetTimeout;
25717var cachedClearTimeout;
25718
25719function defaultSetTimout() {
25720    throw new Error('setTimeout has not been defined');
25721}
25722function defaultClearTimeout () {
25723    throw new Error('clearTimeout has not been defined');
25724}
25725(function () {
25726    try {
25727        if (typeof setTimeout === 'function') {
25728            cachedSetTimeout = setTimeout;
25729        } else {
25730            cachedSetTimeout = defaultSetTimout;
25731        }
25732    } catch (e) {
25733        cachedSetTimeout = defaultSetTimout;
25734    }
25735    try {
25736        if (typeof clearTimeout === 'function') {
25737            cachedClearTimeout = clearTimeout;
25738        } else {
25739            cachedClearTimeout = defaultClearTimeout;
25740        }
25741    } catch (e) {
25742        cachedClearTimeout = defaultClearTimeout;
25743    }
25744} ())
25745function runTimeout(fun) {
25746    if (cachedSetTimeout === setTimeout) {
25747        //normal enviroments in sane situations
25748        return setTimeout(fun, 0);
25749    }
25750    // if setTimeout wasn't available but was latter defined
25751    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
25752        cachedSetTimeout = setTimeout;
25753        return setTimeout(fun, 0);
25754    }
25755    try {
25756        // when when somebody has screwed with setTimeout but no I.E. maddness
25757        return cachedSetTimeout(fun, 0);
25758    } catch(e){
25759        try {
25760            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25761            return cachedSetTimeout.call(null, fun, 0);
25762        } catch(e){
25763            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
25764            return cachedSetTimeout.call(this, fun, 0);
25765        }
25766    }
25767
25768
25769}
25770function runClearTimeout(marker) {
25771    if (cachedClearTimeout === clearTimeout) {
25772        //normal enviroments in sane situations
25773        return clearTimeout(marker);
25774    }
25775    // if clearTimeout wasn't available but was latter defined
25776    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
25777        cachedClearTimeout = clearTimeout;
25778        return clearTimeout(marker);
25779    }
25780    try {
25781        // when when somebody has screwed with setTimeout but no I.E. maddness
25782        return cachedClearTimeout(marker);
25783    } catch (e){
25784        try {
25785            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
25786            return cachedClearTimeout.call(null, marker);
25787        } catch (e){
25788            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
25789            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
25790            return cachedClearTimeout.call(this, marker);
25791        }
25792    }
25793
25794
25795
25796}
25797var queue = [];
25798var draining = false;
vendor: 3,286 bytes, lines 25799-25915
25799var currentQueue;
25800var queueIndex = -1;
25801
25802function cleanUpNextTick() {
25803    if (!draining || !currentQueue) {
25804        return;
25805    }
25806    draining = false;
25807    if (currentQueue.length) {
25808        queue = currentQueue.concat(queue);
25809    } else {
25810        queueIndex = -1;
25811    }
25812    if (queue.length) {
25813        drainQueue();
25814    }
25815}
25816
25817function drainQueue() {
25818    if (draining) {
25819        return;
25820    }
25821    var timeout = runTimeout(cleanUpNextTick);
25822    draining = true;
25823
25824    var len = queue.length;
25825    while(len) {
25826        currentQueue = queue;
25827        queue = [];
25828        while (++queueIndex < len) {
25829            if (currentQueue) {
25830                currentQueue[queueIndex].run();
25831            }
25832        }
25833        queueIndex = -1;
25834        len = queue.length;
25835    }
25836    currentQueue = null;
25837    draining = false;
25838    runClearTimeout(timeout);
25839}
25840
25841process.nextTick = function (fun) {
25842    var args = new Array(arguments.length - 1);
25843    if (arguments.length > 1) {
25844        for (var i = 1; i < arguments.length; i++) {
25845            args[i - 1] = arguments[i];
25846        }
25847    }
25848    queue.push(new Item(fun, args));
25849    if (queue.length === 1 && !draining) {
25850        runTimeout(drainQueue);
25851    }
25852};
25853
25854// v8 likes predictible objects
25855function Item(fun, array) {
25856    this.fun = fun;
25857    this.array = array;
25858}
25859Item.prototype.run = function () {
25860    this.fun.apply(null, this.array);
25861};
25862process.title = 'browser';
25863process.browser = true;
25864process.env = {};
25865process.argv = [];
25866process.version = ''; // empty string to avoid regexp issues
25867process.versions = {};
25868
25869function noop() {}
25870
25871process.on = noop;
25872process.addListener = noop;
25873process.once = noop;
25874process.off = noop;
25875process.removeListener = noop;
25876process.removeAllListeners = noop;
25877process.emit = noop;
25878process.prependListener = noop;
25879process.prependOnceListener = noop;
25880
25881process.listeners = function (name) { return [] }
25882
25883process.binding = function (name) {
25884    throw new Error('process.binding is not supported');
25885};
25886
25887process.cwd = function () { return '/' };
25888process.chdir = function (dir) {
25889    throw new Error('process.chdir is not supported');
25890};
25891process.umask = function() { return 0; };
25892
25893},{}],138:[function(require,module,exports){
25894(function (global, factory) {
25895    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
25896    typeof define === 'function' && define.amd ? define(factory) :
25897    (global.proj4 = factory());
25898}(this, (function () { 'use strict';
25899
25900    var globals = function(defs) {
25901      defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees");
25902      defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees");
25903      defs('EPSG:3857', "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");
25904
25905      defs.WGS84 = defs['EPSG:4326'];
25906      defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857
25907      defs.GOOGLE = defs['EPSG:3857'];
25908      defs['EPSG:900913'] = defs['EPSG:3857'];
25909      defs['EPSG:102113'] = defs['EPSG:3857'];
25910    };
25911
25912    var PJD_3PARAM = 1;
25913    var PJD_7PARAM = 2;
25914    var PJD_GRIDSHIFT = 3;
25915    var PJD_WGS84 = 4; // WGS84 or equivalent
25916    var PJD_NODATUM = 5; // WGS84 or equivalent
25917    var SRS_WGS84_SEMIMAJOR = 6378137.0;  // only used in grid shift transforms
25918    var SRS_WGS84_SEMIMINOR = 6356752.314;  // only used in grid shift transforms
25919    var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms
25920    var SEC_TO_RAD = 4.84813681109535993589914102357e-6;
25921    var HALF_PI = Math.PI/2;
25922    // ellipoid pj_set_ell.c
25923    var SIXTH = 0.1666666666666666667;
25924    /* 1/6 */
25925    var RA4 = 0.04722222222222222222;
25926    /* 17/360 */
25927    var RA6 = 0.02215608465608465608;
25928    var EPSLN = 1.0e-10;
25929    // you'd think you could use Number.EPSILON above but that makes
25930    // Mollweide get into an infinate loop.
25931
25932    var D2R = 0.01745329251994329577;
25933    var R2D = 57.29577951308232088;
25934    var FORTPI = Math.PI/4;
25935    var TWO_PI = Math.PI * 2;
25936    // SPI is slightly greater than Math.PI, so values that exceed the -180..180
25937    // degree range by a tiny amount don't get wrapped. This prevents points that
25938    // have drifted from their original location along the 180th meridian (due to
25939    // floating point error) from changing their sign.
25940    var SPI = 3.14159265359;
25941
25942    var exports$1 = {};
25943    exports$1.greenwich = 0.0; //"0dE",
25944    exports$1.lisbon = -9.131906111111; //"9d07'54.862\"W",
25945    exports$1.paris = 2.337229166667; //"2d20'14.025\"E",
25946    exports$1.bogota = -74.080916666667; //"74d04'51.3\"W",
25947    exports$1.madrid = -3.687938888889; //"3d41'16.58\"W",
25948    exports$1.rome = 12.452333333333; //"12d27'8.4\"E",
25949    exports$1.bern = 7.439583333333; //"7d26'22.5\"E",
25950    exports$1.jakarta = 106.807719444444; //"106d48'27.79\"E",
25951    exports$1.ferro = -17.666666666667; //"17d40'W",
25952    exports$1.brussels = 4.367975; //"4d22'4.71\"E",
25953    exports$1.stockholm = 18.058277777778; //"18d3'29.8\"E",
25954    exports$1.athens = 23.7163375; //"23d42'58.815\"E",
25955    exports$1.oslo = 10.722916666667; //"10d43'22.5\"E"
25956
25957    var units = {
25958      ft: {to_meter: 0.3048},
25959      'us-ft': {to_meter: 1200 / 3937}
25960    };
25961
25962    var ignoredChar = /[\s_\-\/\(\)]/g;
25963    function match(obj, key) {
25964      if (obj[key]) {
25965        return obj[key];
25966      }
25967      var keys = Object.keys(obj);
25968      var lkey = key.toLowerCase().replace(ignoredChar, '');
25969      var i = -1;
25970      var testkey, processedKey;
25971      while (++i < keys.length) {
25972        testkey = keys[i];
25973        processedKey = testkey.toLowerCase().replace(ignoredChar, '');
25974        if (processedKey === lkey) {
25975          return obj[testkey];
25976        }
25977      }
25978    }
25979
25980    var parseProj = function(defData) {
25981      var self = {};
25982      var paramObj = defData.split('+').map(function(v) {
25983        return v.trim();
25984      }).filter(function(a) {
25985        return a;
25986      }).reduce(function(p, a) {
25987        var split = a.split('=');
25988        split.push(true);
25989        p[split[0].toLowerCase()] = split[1];
25990        return p;
25991      }, {});
25992      var paramName, paramVal, paramOutname;
25993      var params = {
25994        proj: 'projName',
25995        datum: 'datumCode',
25996        rf: function(v) {
25997          self.rf = parseFloat(v);
25998        },
25999        lat_0: function(v) {
26000          self.lat0 = v * D2R;
26001        },
26002        lat_1: function(v) {
26003          self.lat1 = v * D2R;
26004        },
26005        lat_2: function(v) {
26006          self.lat2 = v * D2R;
26007        },
26008        lat_ts: function(v) {
26009          self.lat_ts = v * D2R;
26010        },
26011        lon_0: function(v) {
26012          self.long0 = v * D2R;
26013        },
26014        lon_1: function(v) {
26015          self.long1 = v * D2R;
26016        },
26017        lon_2: function(v) {
26018          self.long2 = v * D2R;
26019        },
26020        alpha: function(v) {
26021          self.alpha = parseFloat(v) * D2R;
26022        },
26023        gamma: function(v) {
26024          self.rectified_grid_angle = parseFloat(v);
26025        },
26026        lonc: function(v) {
26027          self.longc = v * D2R;
26028        },
26029        x_0: function(v) {
26030          self.x0 = parseFloat(v);
26031        },
26032        y_0: function(v) {
26033          self.y0 = parseFloat(v);
26034        },
26035        k_0: function(v) {
26036          self.k0 = parseFloat(v);
26037        },
26038        k: function(v) {
26039          self.k0 = parseFloat(v);
26040        },
26041        a: function(v) {
26042          self.a = parseFloat(v);
26043        },
26044        b: function(v) {
26045          self.b = parseFloat(v);
26046        },
26047        r: function(v) {
26048          self.a = self.b = parseFloat(v);
26049        },
26050        r_a: function() {
26051          self.R_A = true;
26052        },
26053        zone: function(v) {
26054          self.zone = parseInt(v, 10);
26055        },
26056        south: function() {
26057          self.utmSouth = true;
26058        },
26059        towgs84: function(v) {
26060          self.datum_params = v.split(",").map(function(a) {
26061            return parseFloat(a);
26062          });
26063        },
26064        to_meter: function(v) {
26065          self.to_meter = parseFloat(v);
26066        },
26067        units: function(v) {
26068          self.units = v;
26069          var unit = match(units, v);
26070          if (unit) {
26071            self.to_meter = unit.to_meter;
26072          }
26073        },
26074        from_greenwich: function(v) {
26075          self.from_greenwich = v * D2R;
26076        },
26077        pm: function(v) {
26078          var pm = match(exports$1, v);
26079          self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;
26080        },
26081        nadgrids: function(v) {
26082          if (v === '@null') {
26083            self.datumCode = 'none';
26084          }
26085          else {
26086            self.nadgrids = v;
26087          }
26088        },
26089        axis: function(v) {
26090          var legalAxis = "ewnsud";
26091          if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {
26092            self.axis = v;
26093          }
26094        },
26095        approx: function() {
26096          self.approx = true;
26097        }
26098      };
26099      for (paramName in paramObj) {
26100        paramVal = paramObj[paramName];
26101        if (paramName in params) {
26102          paramOutname = params[paramName];
26103          if (typeof paramOutname === 'function') {
26104            paramOutname(paramVal);
26105          }
26106          else {
26107            self[paramOutname] = paramVal;
26108          }
26109        }
26110        else {
26111          self[paramName] = paramVal;
26112        }
26113      }
26114      if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){
26115        self.datumCode = self.datumCode.toLowerCase();
26116      }
26117      return self;
26118    };
26119
26120    var NEUTRAL = 1;
26121    var KEYWORD = 2;
26122    var NUMBER = 3;
26123    var QUOTED = 4;
26124    var AFTERQUOTE = 5;
26125    var ENDED = -1;
26126    var whitespace = /\s/;
26127    var latin = /[A-Za-z]/;
26128    var keyword = /[A-Za-z84_]/;
26129    var endThings = /[,\]]/;
26130    var digets = /[\d\.E\-\+]/;
26131    // const ignoredChar = /[\s_\-\/\(\)]/g;
26132    function Parser(text) {
26133      if (typeof text !== 'string') {
26134        throw new Error('not a string');
26135      }
26136      this.text = text.trim();
26137      this.level = 0;
26138      this.place = 0;
26139      this.root = null;
26140      this.stack = [];
26141      this.currentObject = null;
26142      this.state = NEUTRAL;
26143    }
26144    Parser.prototype.readCharicter = function() {
26145      var char = this.text[this.place++];
26146      if (this.state !== QUOTED) {
26147        while (whitespace.test(char)) {
26148          if (this.place >= this.text.length) {
26149            return;
26150          }
26151          char = this.text[this.place++];
26152        }
26153      }
26154      switch (this.state) {
26155        case NEUTRAL:
26156          return this.neutral(char);
26157        case KEYWORD:
26158          return this.keyword(char)
26159        case QUOTED:
26160          return this.quoted(char);
26161        case AFTERQUOTE:
26162          return this.afterquote(char);
26163        case NUMBER:
26164          return this.number(char);
26165        case ENDED:
26166          return;
26167      }
26168    };
26169    Parser.prototype.afterquote = function(char) {
26170      if (char === '"') {
26171        this.word += '"';
26172        this.state = QUOTED;
26173        return;
26174      }
26175      if (endThings.test(char)) {
26176        this.word = this.word.trim();
26177        this.afterItem(char);
26178        return;
26179      }
26180      throw new Error('havn\'t handled "' +char + '" in afterquote yet, index ' + this.place);
26181    };
26182    Parser.prototype.afterItem = function(char) {
26183      if (char === ',') {
26184        if (this.word !== null) {
26185          this.currentObject.push(this.word);
26186        }
26187        this.word = null;
26188        this.state = NEUTRAL;
26189        return;
26190      }
26191      if (char === ']') {
26192        this.level--;
26193        if (this.word !== null) {
26194          this.currentObject.push(this.word);
26195          this.word = null;
26196        }
26197        this.state = NEUTRAL;
26198        this.currentObject = this.stack.pop();
26199        if (!this.currentObject) {
26200          this.state = ENDED;
26201        }
26202
26203        return;
26204      }
26205    };
26206    Parser.prototype.number = function(char) {
26207      if (digets.test(char)) {
26208        this.word += char;
26209        return;
26210      }
26211      if (endThings.test(char)) {
26212        this.word = parseFloat(this.word);
26213        this.afterItem(char);
26214        return;
26215      }
26216      throw new Error('havn\'t handled "' +char + '" in number yet, index ' + this.place);
26217    };
26218    Parser.prototype.quoted = function(char) {
26219      if (char === '"') {
26220        this.state = AFTERQUOTE;
26221        return;
26222      }
26223      this.word += char;
26224      return;
26225    };
26226    Parser.prototype.keyword = function(char) {
26227      if (keyword.test(char)) {
26228        this.word += char;
26229        return;
26230      }
26231      if (char === '[') {
26232        var newObjects = [];
26233        newObjects.push(this.word);
26234        this.level++;
26235        if (this.root === null) {
26236          this.root = newObjects;
26237        } else {
26238          this.currentObject.push(newObjects);
26239        }
26240        this.stack.push(this.currentObject);
26241        this.currentObject = newObjects;
26242        this.state = NEUTRAL;
26243        return;
26244      }
26245      if (endThings.test(char)) {
26246        this.afterItem(char);
26247        return;
26248      }
26249      throw new Error('havn\'t handled "' +char + '" in keyword yet, index ' + this.place);
26250    };
26251    Parser.prototype.neutral = function(char) {
26252      if (latin.test(char)) {
26253        this.word = char;
26254        this.state = KEYWORD;
26255        return;
26256      }
26257      if (char === '"') {
26258        this.word = '';
26259        this.state = QUOTED;
26260        return;
26261      }
26262      if (digets.test(char)) {
26263        this.word = char;
26264        this.state = NUMBER;
26265        return;
26266      }
26267      if (endThings.test(char)) {
26268        this.afterItem(char);
26269        return;
26270      }
26271      throw new Error('havn\'t handled "' +char + '" in neutral yet, index ' + this.place);
26272    };
26273    Parser.prototype.output = function() {
26274      while (this.place < this.text.length) {
26275        this.readCharicter();
26276      }
26277      if (this.state === ENDED) {
26278        return this.root;
26279      }
26280      throw new Error('unable to parse string "' +this.text + '". State is ' + this.state);
26281    };
26282
26283    function parseString(txt) {
26284      var parser = new Parser(txt);
26285      return parser.output();
26286    }
26287
26288    function mapit(obj, key, value) {
26289      if (Array.isArray(key)) {
26290        value.unshift(key);
26291        key = null;
26292      }
26293      var thing = key ? {} : obj;
26294
26295      var out = value.reduce(function(newObj, item) {
26296        sExpr(item, newObj);
26297        return newObj
26298      }, thing);
26299      if (key) {
26300        obj[key] = out;
26301      }
26302    }
26303
26304    function sExpr(v, obj) {
26305      if (!Array.isArray(v)) {
26306        obj[v] = true;
26307        return;
26308      }
26309      var key = v.shift();
26310      if (key === 'PARAMETER') {
26311        key = v.shift();
26312      }
26313      if (v.length === 1) {
26314        if (Array.isArray(v[0])) {
26315          obj[key] = {};
26316          sExpr(v[0], obj[key]);
26317          return;
26318        }
26319        obj[key] = v[0];
26320        return;
26321      }
26322      if (!v.length) {
26323        obj[key] = true;
26324        return;
26325      }
26326      if (key === 'TOWGS84') {
26327        obj[key] = v;
26328        return;
26329      }
26330      if (key === 'AXIS') {
26331        if (!(key in obj)) {
26332          obj[key] = [];
26333        }
26334        obj[key].push(v);
26335        return;
26336      }
26337      if (!Array.isArray(key)) {
26338        obj[key] = {};
26339      }
26340
26341      var i;
26342      switch (key) {
26343        case 'UNIT':
26344        case 'PRIMEM':
26345        case 'VERT_DATUM':
26346          obj[key] = {
26347            name: v[0].toLowerCase(),
26348            convert: v[1]
26349          };
26350          if (v.length === 3) {
26351            sExpr(v[2], obj[key]);
26352          }
26353          return;
26354        case 'SPHEROID':
26355        case 'ELLIPSOID':
26356          obj[key] = {
26357            name: v[0],
26358            a: v[1],
26359            rf: v[2]
26360          };
26361          if (v.length === 4) {
26362            sExpr(v[3], obj[key]);
26363          }
26364          return;
26365        case 'PROJECTEDCRS':
26366        case 'PROJCRS':
26367        case 'GEOGCS':
26368        case 'GEOCCS':
26369        case 'PROJCS':
26370        case 'LOCAL_CS':
26371        case 'GEODCRS':
26372        case 'GEODETICCRS':
26373        case 'GEODETICDATUM':
26374        case 'EDATUM':
26375        case 'ENGINEERINGDATUM':
26376        case 'VERT_CS':
26377        case 'VERTCRS':
26378        case 'VERTICALCRS':
26379        case 'COMPD_CS':
26380        case 'COMPOUNDCRS':
26381        case 'ENGINEERINGCRS':
26382        case 'ENGCRS':
26383        case 'FITTED_CS':
26384        case 'LOCAL_DATUM':
26385        case 'DATUM':
26386          v[0] = ['name', v[0]];
26387          mapit(obj, key, v);
26388          return;
26389        default:
26390          i = -1;
26391          while (++i < v.length) {
26392            if (!Array.isArray(v[i])) {
26393              return sExpr(v, obj[key]);
26394            }
26395          }
26396          return mapit(obj, key, v);
26397      }
26398    }
26399
26400    var D2R$1 = 0.01745329251994329577;
26401    function rename(obj, params) {
26402      var outName = params[0];
26403      var inName = params[1];
26404      if (!(outName in obj) && (inName in obj)) {
26405        obj[outName] = obj[inName];
26406        if (params.length === 3) {
26407          obj[outName] = params[2](obj[outName]);
26408        }
26409      }
26410    }
26411
26412    function d2r(input) {
26413      return input * D2R$1;
26414    }
26415
26416    function cleanWKT(wkt) {
26417      if (wkt.type === 'GEOGCS') {
26418        wkt.projName = 'longlat';
26419      } else if (wkt.type === 'LOCAL_CS') {
26420        wkt.projName = 'identity';
26421        wkt.local = true;
26422      } else {
26423        if (typeof wkt.PROJECTION === 'object') {
26424          wkt.projName = Object.keys(wkt.PROJECTION)[0];
26425        } else {
26426          wkt.projName = wkt.PROJECTION;
26427        }
26428      }
26429      if (wkt.AXIS) {
26430        var axisOrder = '';
26431        for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {
26432          var axis = [wkt.AXIS[i][0].toLowerCase(), wkt.AXIS[i][1].toLowerCase()];
26433          if (axis[0].indexOf('north') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'north')) {
26434            axisOrder += 'n';
26435          } else if (axis[0].indexOf('south') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'south')) {
26436            axisOrder += 's';
26437          } else if (axis[0].indexOf('east') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'east')) {
26438            axisOrder += 'e';
26439          } else if (axis[0].indexOf('west') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'west')) {
26440            axisOrder += 'w';
26441          }
26442        }
26443        if (axisOrder.length === 2) {
26444          axisOrder += 'u';
26445        }
26446        if (axisOrder.length === 3) {
26447          wkt.axis = axisOrder;
26448        }
26449      }
26450      if (wkt.UNIT) {
26451        wkt.units = wkt.UNIT.name.toLowerCase();
26452        if (wkt.units === 'metre') {
26453          wkt.units = 'meter';
26454        }
26455        if (wkt.UNIT.convert) {
26456          if (wkt.type === 'GEOGCS') {
26457            if (wkt.DATUM && wkt.DATUM.SPHEROID) {
26458              wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;
26459            }
26460          } else {
26461            wkt.to_meter = wkt.UNIT.convert;
26462          }
26463        }
26464      }
26465      var geogcs = wkt.GEOGCS;
26466      if (wkt.type === 'GEOGCS') {
26467        geogcs = wkt;
26468      }
26469      if (geogcs) {
26470        //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){
26471        //  wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;
26472        //}
26473        if (geogcs.DATUM) {
26474          wkt.datumCode = geogcs.DATUM.name.toLowerCase();
26475        } else {
26476          wkt.datumCode = geogcs.name.toLowerCase();
26477        }
26478        if (wkt.datumCode.slice(0, 2) === 'd_') {
26479          wkt.datumCode = wkt.datumCode.slice(2);
26480        }
26481        if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {
26482          wkt.datumCode = 'nzgd49';
26483        }
26484        if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {
26485          if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {
26486            wkt.sphere = true;
26487          }
26488          wkt.datumCode = 'wgs84';
26489        }
26490        if (wkt.datumCode.slice(-6) === '_ferro') {
26491          wkt.datumCode = wkt.datumCode.slice(0, - 6);
26492        }
26493        if (wkt.datumCode.slice(-8) === '_jakarta') {
26494          wkt.datumCode = wkt.datumCode.slice(0, - 8);
26495        }
26496        if (~wkt.datumCode.indexOf('belge')) {
26497          wkt.datumCode = 'rnb72';
26498        }
26499        if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {
26500          wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\_18/, 'clrk');
26501          if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {
26502            wkt.ellps = 'intl';
26503          }
26504
26505          wkt.a = geogcs.DATUM.SPHEROID.a;
26506          wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);
26507        }
26508
26509        if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {
26510          wkt.datum_params = geogcs.DATUM.TOWGS84;
26511        }
26512        if (~wkt.datumCode.indexOf('osgb_1936')) {
26513          wkt.datumCode = 'osgb36';
26514        }
26515        if (~wkt.datumCode.indexOf('osni_1952')) {
26516          wkt.datumCode = 'osni52';
26517        }
26518        if (~wkt.datumCode.indexOf('tm65')
26519          || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {
26520          wkt.datumCode = 'ire65';
26521        }
26522        if (wkt.datumCode === 'ch1903+') {
26523          wkt.datumCode = 'ch1903';
26524        }
26525        if (~wkt.datumCode.indexOf('israel')) {
26526          wkt.datumCode = 'isr93';
26527        }
26528      }
26529      if (wkt.b && !isFinite(wkt.b)) {
26530        wkt.b = wkt.a;
26531      }
26532
26533      function toMeter(input) {
26534        var ratio = wkt.to_meter || 1;
26535        return input * ratio;
26536      }
26537      var renamer = function(a) {
26538        return rename(wkt, a);
26539      };
26540      var list = [
26541        ['standard_parallel_1', 'Standard_Parallel_1'],
26542        ['standard_parallel_1', 'Latitude of 1st standard parallel'],
26543        ['standard_parallel_2', 'Standard_Parallel_2'],
26544        ['standard_parallel_2', 'Latitude of 2nd standard parallel'],
26545        ['false_easting', 'False_Easting'],
26546        ['false_easting', 'False easting'],
26547        ['false-easting', 'Easting at false origin'],
26548        ['false_northing', 'False_Northing'],
26549        ['false_northing', 'False northing'],
26550        ['false_northing', 'Northing at false origin'],
26551        ['central_meridian', 'Central_Meridian'],
26552        ['central_meridian', 'Longitude of natural origin'],
26553        ['central_meridian', 'Longitude of false origin'],
26554        ['latitude_of_origin', 'Latitude_Of_Origin'],
26555        ['latitude_of_origin', 'Central_Parallel'],
26556        ['latitude_of_origin', 'Latitude of natural origin'],
26557        ['latitude_of_origin', 'Latitude of false origin'],
26558        ['scale_factor', 'Scale_Factor'],
26559        ['k0', 'scale_factor'],
26560        ['latitude_of_center', 'Latitude_Of_Center'],
26561        ['latitude_of_center', 'Latitude_of_center'],
26562        ['lat0', 'latitude_of_center', d2r],
26563        ['longitude_of_center', 'Longitude_Of_Center'],
26564        ['longitude_of_center', 'Longitude_of_center'],
26565        ['longc', 'longitude_of_center', d2r],
26566        ['x0', 'false_easting', toMeter],
26567        ['y0', 'false_northing', toMeter],
26568        ['long0', 'central_meridian', d2r],
26569        ['lat0', 'latitude_of_origin', d2r],
26570        ['lat0', 'standard_parallel_1', d2r],
26571        ['lat1', 'standard_parallel_1', d2r],
26572        ['lat2', 'standard_parallel_2', d2r],
26573        ['azimuth', 'Azimuth'],
26574        ['alpha', 'azimuth', d2r],
26575        ['srsCode', 'name']
26576      ];
26577      list.forEach(renamer);
26578      if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {
26579        wkt.long0 = wkt.longc;
26580      }
26581      if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {
26582        wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);
26583        wkt.lat_ts = wkt.lat1;
26584      } else if (!wkt.lat_ts && wkt.lat0 && wkt.projName === 'Polar_Stereographic') {
26585        wkt.lat_ts = wkt.lat0;
26586        wkt.lat0 = d2r(wkt.lat0 > 0 ? 90 : -90);
26587      }
26588    }
26589    var wkt = function(wkt) {
26590      var lisp = parseString(wkt);
26591      var type = lisp.shift();
26592      var name = lisp.shift();
26593      lisp.unshift(['name', name]);
26594      lisp.unshift(['type', type]);
26595      var obj = {};
26596      sExpr(lisp, obj);
26597      cleanWKT(obj);
26598      return obj;
26599    };
26600
26601    function defs(name) {
26602      /*global console*/
26603      var that = this;
26604      if (arguments.length === 2) {
26605        var def = arguments[1];
26606        if (typeof def === 'string') {
26607          if (def.charAt(0) === '+') {
26608            defs[name] = parseProj(arguments[1]);
26609          }
26610          else {
26611            defs[name] = wkt(arguments[1]);
26612          }
26613        } else {
26614          defs[name] = def;
26615        }
26616      }
26617      else if (arguments.length === 1) {
26618        if (Array.isArray(name)) {
26619          return name.map(function(v) {
26620            if (Array.isArray(v)) {
26621              defs.apply(that, v);
26622            }
26623            else {
26624              defs(v);
26625            }
26626          });
26627        }
26628        else if (typeof name === 'string') {
26629          if (name in defs) {
26630            return defs[name];
26631          }
26632        }
26633        else if ('EPSG' in name) {
26634          defs['EPSG:' + name.EPSG] = name;
26635        }
26636        else if ('ESRI' in name) {
26637          defs['ESRI:' + name.ESRI] = name;
26638        }
26639        else if ('IAU2000' in name) {
26640          defs['IAU2000:' + name.IAU2000] = name;
26641        }
26642        else {
26643          console.log(name);
26644        }
26645        return;
26646      }
26647
26648
26649    }
26650    globals(defs);
26651
26652    function testObj(code){
26653      return typeof code === 'string';
26654    }
26655    function testDef(code){
26656      return code in defs;
26657    }
26658    var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];
26659    function testWKT(code){
26660      return codeWords.some(function (word) {
26661        return code.indexOf(word) > -1;
26662      });
26663    }
26664    var codes = ['3857', '900913', '3785', '102113'];
26665    function checkMercator(item) {
26666      var auth = match(item, 'authority');
26667      if (!auth) {
26668        return;
26669      }
26670      var code = match(auth, 'epsg');
26671      return code && codes.indexOf(code) > -1;
26672    }
26673    function checkProjStr(item) {
26674      var ext = match(item, 'extension');
26675      if (!ext) {
26676        return;
26677      }
26678      return match(ext, 'proj4');
26679    }
26680    function testProj(code){
26681      return code[0] === '+';
26682    }
26683    function parse(code){
26684      if (testObj(code)) {
26685        //check to see if this is a WKT string
26686        if (testDef(code)) {
26687          return defs[code];
26688        }
26689        if (testWKT(code)) {
26690          var out = wkt(code);
26691          // test of spetial case, due to this being a very common and often malformed
26692          if (checkMercator(out)) {
26693            return defs['EPSG:3857'];
26694          }
26695          var maybeProjStr = checkProjStr(out);
26696          if (maybeProjStr) {
26697            return parseProj(maybeProjStr);
26698          }
26699          return out;
26700        }
26701        if (testProj(code)) {
26702          return parseProj(code);
26703        }
26704      }else{
26705        return code;
26706      }
26707    }
26708
26709    var extend = function(destination, source) {
26710      destination = destination || {};
26711      var value, property;
26712      if (!source) {
26713        return destination;
26714      }
26715      for (property in source) {
26716        value = source[property];
26717        if (value !== undefined) {
26718          destination[property] = value;
26719        }
26720      }
26721      return destination;
26722    };
26723
26724    var msfnz = function(eccent, sinphi, cosphi) {
26725      var con = eccent * sinphi;
26726      return cosphi / (Math.sqrt(1 - con * con));
26727    };
26728
26729    var sign = function(x) {
26730      return x<0 ? -1 : 1;
26731    };
26732
26733    var adjust_lon = function(x) {
26734      return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));
26735    };
26736
26737    var tsfnz = function(eccent, phi, sinphi) {
26738      var con = eccent * sinphi;
26739      var com = 0.5 * eccent;
26740      con = Math.pow(((1 - con) / (1 + con)), com);
26741      return (Math.tan(0.5 * (HALF_PI - phi)) / con);
26742    };
26743
26744    var phi2z = function(eccent, ts) {
26745      var eccnth = 0.5 * eccent;
26746      var con, dphi;
26747      var phi = HALF_PI - 2 * Math.atan(ts);
26748      for (var i = 0; i <= 15; i++) {
26749        con = eccent * Math.sin(phi);
26750        dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;
26751        phi += dphi;
26752        if (Math.abs(dphi) <= 0.0000000001) {
26753          return phi;
26754        }
26755      }
26756      //console.log("phi2z has NoConvergence");
26757      return -9999;
26758    };
26759
26760    function init() {
26761      var con = this.b / this.a;
26762      this.es = 1 - con * con;
26763      if(!('x0' in this)){
26764        this.x0 = 0;
26765      }
26766      if(!('y0' in this)){
26767        this.y0 = 0;
26768      }
26769      this.e = Math.sqrt(this.es);
26770      if (this.lat_ts) {
26771        if (this.sphere) {
26772          this.k0 = Math.cos(this.lat_ts);
26773        }
26774        else {
26775          this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));
26776        }
26777      }
26778      else {
26779        if (!this.k0) {
26780          if (this.k) {
26781            this.k0 = this.k;
26782          }
26783          else {
26784            this.k0 = 1;
26785          }
26786        }
26787      }
26788    }
26789
26790    /* Mercator forward equations--mapping lat,long to x,y
26791      --------------------------------------------------*/
26792
26793    function forward(p) {
26794      var lon = p.x;
26795      var lat = p.y;
26796      // convert to radians
26797      if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {
26798        return null;
26799      }
26800
26801      var x, y;
26802      if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {
26803        return null;
26804      }
26805      else {
26806        if (this.sphere) {
26807          x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);
26808          y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));
26809        }
26810        else {
26811          var sinphi = Math.sin(lat);
26812          var ts = tsfnz(this.e, lat, sinphi);
26813          x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);
26814          y = this.y0 - this.a * this.k0 * Math.log(ts);
26815        }
26816        p.x = x;
26817        p.y = y;
26818        return p;
26819      }
26820    }
26821
26822    /* Mercator inverse equations--mapping x,y to lat/long
26823      --------------------------------------------------*/
26824    function inverse(p) {
26825
26826      var x = p.x - this.x0;
26827      var y = p.y - this.y0;
26828      var lon, lat;
26829
26830      if (this.sphere) {
26831        lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));
26832      }
26833      else {
26834        var ts = Math.exp(-y / (this.a * this.k0));
26835        lat = phi2z(this.e, ts);
26836        if (lat === -9999) {
26837          return null;
26838        }
26839      }
26840      lon = adjust_lon(this.long0 + x / (this.a * this.k0));
26841
26842      p.x = lon;
26843      p.y = lat;
26844      return p;
26845    }
26846
26847    var names$1 = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"];
26848    var merc = {
26849      init: init,
26850      forward: forward,
26851      inverse: inverse,
26852      names: names$1
26853    };
26854
26855    function init$1() {
26856      //no-op for longlat
26857    }
26858
26859    function identity(pt) {
26860      return pt;
26861    }
26862    var names$2 = ["longlat", "identity"];
26863    var longlat = {
26864      init: init$1,
26865      forward: identity,
26866      inverse: identity,
26867      names: names$2
26868    };
26869
26870    var projs = [merc, longlat];
26871    var names = {};
26872    var projStore = [];
26873
26874    function add(proj, i) {
26875      var len = projStore.length;
26876      if (!proj.names) {
26877        console.log(i);
26878        return true;
26879      }
26880      projStore[len] = proj;
26881      proj.names.forEach(function(n) {
26882        names[n.toLowerCase()] = len;
26883      });
26884      return this;
26885    }
26886
26887    function get(name) {
26888      if (!name) {
26889        return false;
26890      }
26891      var n = name.toLowerCase();
26892      if (typeof names[n] !== 'undefined' && projStore[names[n]]) {
26893        return projStore[names[n]];
26894      }
26895    }
26896
26897    function start() {
26898      projs.forEach(add);
26899    }
26900    var projections = {
26901      start: start,
26902      add: add,
26903      get: get
26904    };
26905
26906    var exports$2 = {};
26907    exports$2.MERIT = {
26908      a: 6378137.0,
26909      rf: 298.257,
26910      ellipseName: "MERIT 1983"
26911    };
26912
26913    exports$2.SGS85 = {
26914      a: 6378136.0,
26915      rf: 298.257,
26916      ellipseName: "Soviet Geodetic System 85"
26917    };
26918
26919    exports$2.GRS80 = {
26920      a: 6378137.0,
26921      rf: 298.257222101,
26922      ellipseName: "GRS 1980(IUGG, 1980)"
26923    };
26924
26925    exports$2.IAU76 = {
26926      a: 6378140.0,
26927      rf: 298.257,
26928      ellipseName: "IAU 1976"
26929    };
26930
26931    exports$2.airy = {
26932      a: 6377563.396,
26933      b: 6356256.910,
26934      ellipseName: "Airy 1830"
26935    };
26936
26937    exports$2.APL4 = {
26938      a: 6378137,
26939      rf: 298.25,
26940      ellipseName: "Appl. Physics. 1965"
26941    };
26942
26943    exports$2.NWL9D = {
26944      a: 6378145.0,
26945      rf: 298.25,
26946      ellipseName: "Naval Weapons Lab., 1965"
26947    };
26948
26949    exports$2.mod_airy = {
26950      a: 6377340.189,
26951      b: 6356034.446,
26952      ellipseName: "Modified Airy"
26953    };
26954
26955    exports$2.andrae = {
26956      a: 6377104.43,
26957      rf: 300.0,
26958      ellipseName: "Andrae 1876 (Den., Iclnd.)"
26959    };
26960
26961    exports$2.aust_SA = {
26962      a: 6378160.0,
26963      rf: 298.25,
26964      ellipseName: "Australian Natl & S. Amer. 1969"
26965    };
26966
26967    exports$2.GRS67 = {
26968      a: 6378160.0,
26969      rf: 298.2471674270,
26970      ellipseName: "GRS 67(IUGG 1967)"
26971    };
26972
26973    exports$2.bessel = {
26974      a: 6377397.155,
26975      rf: 299.1528128,
26976      ellipseName: "Bessel 1841"
26977    };
26978
26979    exports$2.bess_nam = {
26980      a: 6377483.865,
26981      rf: 299.1528128,
26982      ellipseName: "Bessel 1841 (Namibia)"
26983    };
26984
26985    exports$2.clrk66 = {
26986      a: 6378206.4,
26987      b: 6356583.8,
26988      ellipseName: "Clarke 1866"
26989    };
26990
26991    exports$2.clrk80 = {
26992      a: 6378249.145,
26993      rf: 293.4663,
26994      ellipseName: "Clarke 1880 mod."
26995    };
26996
26997    exports$2.clrk80ign = {
26998      a: 6378249.2,
26999      b: 6356515,
27000      rf: 293.4660213,
27001      ellipseName: "Clarke 1880 (IGN)"
27002    };
27003
27004    exports$2.clrk58 = {
27005      a: 6378293.645208759,
27006      rf: 294.2606763692654,
27007      ellipseName: "Clarke 1858"
27008    };
27009
27010    exports$2.CPM = {
27011      a: 6375738.7,
27012      rf: 334.29,
27013      ellipseName: "Comm. des Poids et Mesures 1799"
27014    };
27015
27016    exports$2.delmbr = {
27017      a: 6376428.0,
27018      rf: 311.5,
27019      ellipseName: "Delambre 1810 (Belgium)"
27020    };
27021
27022    exports$2.engelis = {
27023      a: 6378136.05,
27024      rf: 298.2566,
27025      ellipseName: "Engelis 1985"
27026    };
27027
27028    exports$2.evrst30 = {
27029      a: 6377276.345,
27030      rf: 300.8017,
27031      ellipseName: "Everest 1830"
27032    };
27033
27034    exports$2.evrst48 = {
27035      a: 6377304.063,
27036      rf: 300.8017,
27037      ellipseName: "Everest 1948"
27038    };
27039
27040    exports$2.evrst56 = {
27041      a: 6377301.243,
27042      rf: 300.8017,
27043      ellipseName: "Everest 1956"
27044    };
27045
27046    exports$2.evrst69 = {
27047      a: 6377295.664,
27048      rf: 300.8017,
27049      ellipseName: "Everest 1969"
27050    };
27051
27052    exports$2.evrstSS = {
27053      a: 6377298.556,
27054      rf: 300.8017,
27055      ellipseName: "Everest (Sabah & Sarawak)"
27056    };
27057
27058    exports$2.fschr60 = {
27059      a: 6378166.0,
27060      rf: 298.3,
27061      ellipseName: "Fischer (Mercury Datum) 1960"
27062    };
27063
27064    exports$2.fschr60m = {
27065      a: 6378155.0,
27066      rf: 298.3,
27067      ellipseName: "Fischer 1960"
27068    };
27069
27070    exports$2.fschr68 = {
27071      a: 6378150.0,
27072      rf: 298.3,
27073      ellipseName: "Fischer 1968"
27074    };
27075
27076    exports$2.helmert = {
27077      a: 6378200.0,
27078      rf: 298.3,
27079      ellipseName: "Helmert 1906"
27080    };
27081
27082    exports$2.hough = {
27083      a: 6378270.0,
27084      rf: 297.0,
27085      ellipseName: "Hough"
27086    };
27087
27088    exports$2.intl = {
27089      a: 6378388.0,
27090      rf: 297.0,
27091      ellipseName: "International 1909 (Hayford)"
27092    };
27093
27094    exports$2.kaula = {
27095      a: 6378163.0,
27096      rf: 298.24,
27097      ellipseName: "Kaula 1961"
27098    };
27099
27100    exports$2.lerch = {
27101      a: 6378139.0,
27102      rf: 298.257,
27103      ellipseName: "Lerch 1979"
27104    };
27105
27106    exports$2.mprts = {
27107      a: 6397300.0,
27108      rf: 191.0,
27109      ellipseName: "Maupertius 1738"
27110    };
27111
27112    exports$2.new_intl = {
27113      a: 6378157.5,
27114      b: 6356772.2,
27115      ellipseName: "New International 1967"
27116    };
27117
27118    exports$2.plessis = {
27119      a: 6376523.0,
27120      rf: 6355863.0,
27121      ellipseName: "Plessis 1817 (France)"
27122    };
27123
27124    exports$2.krass = {
27125      a: 6378245.0,
27126      rf: 298.3,
27127      ellipseName: "Krassovsky, 1942"
27128    };
27129
27130    exports$2.SEasia = {
27131      a: 6378155.0,
27132      b: 6356773.3205,
27133      ellipseName: "Southeast Asia"
27134    };
27135
27136    exports$2.walbeck = {
27137      a: 6376896.0,
27138      b: 6355834.8467,
27139      ellipseName: "Walbeck"
27140    };
27141
27142    exports$2.WGS60 = {
27143      a: 6378165.0,
27144      rf: 298.3,
27145      ellipseName: "WGS 60"
27146    };
27147
27148    exports$2.WGS66 = {
27149      a: 6378145.0,
27150      rf: 298.25,
27151      ellipseName: "WGS 66"
27152    };
27153
27154    exports$2.WGS7 = {
27155      a: 6378135.0,
27156      rf: 298.26,
27157      ellipseName: "WGS 72"
27158    };
27159
27160    var WGS84 = exports$2.WGS84 = {
27161      a: 6378137.0,
27162      rf: 298.257223563,
27163      ellipseName: "WGS 84"
27164    };
27165
27166    exports$2.sphere = {
27167      a: 6370997.0,
27168      b: 6370997.0,
27169      ellipseName: "Normal Sphere (r=6370997)"
27170    };
27171
27172    function eccentricity(a, b, rf, R_A) {
27173      var a2 = a * a; // used in geocentric
27174      var b2 = b * b; // used in geocentric
27175      var es = (a2 - b2) / a2; // e ^ 2
27176      var e = 0;
27177      if (R_A) {
27178        a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));
27179        a2 = a * a;
27180        es = 0;
27181      } else {
27182        e = Math.sqrt(es); // eccentricity
27183      }
27184      var ep2 = (a2 - b2) / b2; // used in geocentric
27185      return {
27186        es: es,
27187        e: e,
27188        ep2: ep2
27189      };
27190    }
27191    function sphere(a, b, rf, ellps, sphere) {
27192      if (!a) { // do we have an ellipsoid?
27193        var ellipse = match(exports$2, ellps);
27194        if (!ellipse) {
27195          ellipse = WGS84;
27196        }
27197        a = ellipse.a;
27198        b = ellipse.b;
27199        rf = ellipse.rf;
27200      }
27201
27202      if (rf && !b) {
27203        b = (1.0 - 1.0 / rf) * a;
27204      }
27205      if (rf === 0 || Math.abs(a - b) < EPSLN) {
27206        sphere = true;
27207        b = a;
27208      }
27209      return {
27210        a: a,
27211        b: b,
27212        rf: rf,
27213        sphere: sphere
27214      };
27215    }
27216
27217    var exports$3 = {};
27218    exports$3.wgs84 = {
27219      towgs84: "0,0,0",
27220      ellipse: "WGS84",
27221      datumName: "WGS84"
27222    };
27223
27224    exports$3.ch1903 = {
27225      towgs84: "674.374,15.056,405.346",
27226      ellipse: "bessel",
27227      datumName: "swiss"
27228    };
27229
27230    exports$3.ggrs87 = {
27231      towgs84: "-199.87,74.79,246.62",
27232      ellipse: "GRS80",
27233      datumName: "Greek_Geodetic_Reference_System_1987"
27234    };
27235
27236    exports$3.nad83 = {
27237      towgs84: "0,0,0",
27238      ellipse: "GRS80",
27239      datumName: "North_American_Datum_1983"
27240    };
27241
27242    exports$3.nad27 = {
27243      nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",
27244      ellipse: "clrk66",
27245      datumName: "North_American_Datum_1927"
27246    };
27247
27248    exports$3.potsdam = {
27249      towgs84: "598.1,73.7,418.2,0.202,0.045,-2.455,6.7",
27250      ellipse: "bessel",
27251      datumName: "Potsdam Rauenberg 1950 DHDN"
27252    };
27253
27254    exports$3.carthage = {
27255      towgs84: "-263.0,6.0,431.0",
27256      ellipse: "clark80",
27257      datumName: "Carthage 1934 Tunisia"
27258    };
27259
27260    exports$3.hermannskogel = {
27261      towgs84: "577.326,90.129,463.919,5.137,1.474,5.297,2.4232",
27262      ellipse: "bessel",
27263      datumName: "Hermannskogel"
27264    };
27265
27266    exports$3.militargeographische_institut = {
27267      towgs84: "577.326,90.129,463.919,5.137,1.474,5.297,2.4232",
27268      ellipse: "bessel",
27269      datumName: "Militar-Geographische Institut"
27270    };
27271
27272    exports$3.osni52 = {
27273      towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
27274      ellipse: "airy",
27275      datumName: "Irish National"
27276    };
27277
27278    exports$3.ire65 = {
27279      towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
27280      ellipse: "mod_airy",
27281      datumName: "Ireland 1965"
27282    };
27283
27284    exports$3.rassadiran = {
27285      towgs84: "-133.63,-157.5,-158.62",
27286      ellipse: "intl",
27287      datumName: "Rassadiran"
27288    };
27289
27290    exports$3.nzgd49 = {
27291      towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",
27292      ellipse: "intl",
27293      datumName: "New Zealand Geodetic Datum 1949"
27294    };
27295
27296    exports$3.osgb36 = {
27297      towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",
27298      ellipse: "airy",
27299      datumName: "Airy 1830"
27300    };
27301
27302    exports$3.s_jtsk = {
27303      towgs84: "589,76,480",
27304      ellipse: 'bessel',
27305      datumName: 'S-JTSK (Ferro)'
27306    };
27307
27308    exports$3.beduaram = {
27309      towgs84: '-106,-87,188',
27310      ellipse: 'clrk80',
27311      datumName: 'Beduaram'
27312    };
27313
27314    exports$3.gunung_segara = {
27315      towgs84: '-403,684,41',
27316      ellipse: 'bessel',
27317      datumName: 'Gunung Segara Jakarta'
27318    };
27319
27320    exports$3.rnb72 = {
27321      towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",
27322      ellipse: "intl",
27323      datumName: "Reseau National Belge 1972"
27324    };
27325
27326    function datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {
27327      var out = {};
27328
27329      if (datumCode === undefined || datumCode === 'none') {
27330        out.datum_type = PJD_NODATUM;
27331      } else {
27332        out.datum_type = PJD_WGS84;
27333      }
27334
27335      if (datum_params) {
27336        out.datum_params = datum_params.map(parseFloat);
27337        if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {
27338          out.datum_type = PJD_3PARAM;
27339        }
27340        if (out.datum_params.length > 3) {
27341          if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {
27342            out.datum_type = PJD_7PARAM;
27343            out.datum_params[3] *= SEC_TO_RAD;
27344            out.datum_params[4] *= SEC_TO_RAD;
27345            out.datum_params[5] *= SEC_TO_RAD;
27346            out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;
27347          }
27348        }
27349      }
27350
27351      if (nadgrids) {
27352        out.datum_type = PJD_GRIDSHIFT;
27353        out.grids = nadgr
27353ids;
27354      }
27355      out.a = a; //datum object also uses these values
27356      out.b = b;
27357      out.es = es;
27358      out.ep2 = ep2;
27359      return out;
27360    }
27361
27362    /**
27363     * Resources for details of NTv2 file formats:
27364     * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf
27365     * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm
27366     */
27367
27368    var loadedNadgrids = {};
27369
27370    /**
27371     * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=<key>. Pass the NTv2 file
27372     * as an ArrayBuffer.
27373     */
27374    function nadgrid(key, data) {
27375      var view = new DataView(data);
27376      var isLittleEndian = detectLittleEndian(view);
27377      var header = readHeader(view, isLittleEndian);
27378      var subgrids = readSubgrids(view, header, isLittleEndian);
27379      var nadgrid = {header: header, subgrids: subgrids};
27380      loadedNadgrids[key] = nadgrid;
27381      return nadgrid;
27382    }
27383
27384    /**
27385     * Given a proj4 value for nadgrids, return an array of loaded grids
27386     */
27387    function getNadgrids(nadgrids) {
27388      // Format details: http://proj.maptools.org/gen_parms.html
27389      if (nadgrids === undefined) { return null; }
27390      var grids = nadgrids.split(',');
27391      return grids.map(parseNadgridString);
27392    }
27393
27394    function parseNadgridString(value) {
27395      if (value.length === 0) {
27396        return null;
27397      }
27398      var optional = value[0] === '@';
27399      if (optional) {
27400        value = value.slice(1);
27401      }
27402      if (value === 'null') {
27403        return {name: 'null', mandatory: !optional, grid: null, isNull: true};
27404      }
27405      return {
27406        name: value,
27407        mandatory: !optional,
27408        grid: loadedNadgrids[value] || null,
27409        isNull: false
27410      };
27411    }
27412
27413    function secondsToRadians(seconds) {
27414      return (seconds / 3600) * Math.PI / 180;
27415    }
27416
27417    function detectLittleEndian(view) {
27418      var nFields = view.getInt32(8, false);
27419      if (nFields === 11) {
27420        return false;
27421      }
27422      nFields = view.getInt32(8, true);
27423      if (nFields !== 11) {
27424        console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');
27425      }
27426      return true;
27427    }
27428
27429    function readHeader(view, isLittleEndian) {
27430      return {
27431        nFields: view.getInt32(8, isLittleEndian),
27432        nSubgridFields: view.getInt32(24, isLittleEndian),
27433        nSubgrids: view.getInt32(40, isLittleEndian),
27434        shiftType: decodeString(view, 56, 56 + 8).trim(),
27435        fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),
27436        fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),
27437        toSemiMajorAxis: view.getFloat64(152, isLittleEndian),
27438        toSemiMinorAxis: view.getFloat64(168, isLittleEndian),
27439      };
27440    }
27441
27442    function decodeString(view, start, end) {
27443      return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));
27444    }
27445
27446    function readSubgrids(view, header, isLittleEndian) {
27447      var gridOffset = 176;
27448      var grids = [];
27449      for (var i = 0; i < header.nSubgrids; i++) {
27450        var subHeader = readGridHeader(view, gridOffset, isLittleEndian);
27451        var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian);
27452        var lngColumnCount = Math.round(
27453          1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);
27454        var latColumnCount = Math.round(
27455          1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);
27456        // Proj4 operates on radians whereas the coordinates are in seconds in the grid
27457        grids.push({
27458          ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],
27459          del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],
27460          lim: [lngColumnCount, latColumnCount],
27461          count: subHeader.gridNodeCount,
27462          cvs: mapNodes(nodes)
27463        });
27464        gridOffset += 176 + subHeader.gridNodeCount * 16;
27465      }
27466      return grids;
27467    }
27468
27469    function mapNodes(nodes) {
27470      return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];});
27471    }
27472
27473    function readGridHeader(view, offset, isLittleEndian) {
27474      return {
27475        name: decodeString(view, offset + 8, offset + 16).trim(),
27476        parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),
27477        lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),
27478        upperLatitude: view.getFloat64(offset + 88, isLittleEndian),
27479        lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),
27480        upperLongitude: view.getFloat64(offset + 120, isLittleEndian),
27481        latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),
27482        longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),
27483        gridNodeCount: view.getInt32(offset + 168, isLittleEndian)
27484      };
27485    }
27486
27487    function readGridNodes(view, offset, gridHeader, isLittleEndian) {
27488      var nodesOffset = offset + 176;
27489      var gridRecordLength = 16;
27490      var gridShiftRecords = [];
27491      for (var i = 0; i < gridHeader.gridNodeCount; i++) {
27492        var record = {
27493          latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),
27494          longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian),
27495          latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian),
27496          longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian),
27497        };
27498        gridShiftRecords.push(record);
27499      }
27500      return gridShiftRecords;
27501    }
27502
27503    function Projection(srsCode,callback) {
27504      if (!(this instanceof Projection)) {
27505        return new Projection(srsCode);
27506      }
27507      callback = callback || function(error){
27508        if(error){
27509          throw error;
27510        }
27511      };
27512      var json = parse(srsCode);
27513      if(typeof json !== 'object'){
27514        callback(srsCode);
27515        return;
27516      }
27517      var ourProj = Projection.projections.get(json.projName);
27518      if(!ourProj){
27519        callback(srsCode);
27520        return;
27521      }
27522      if (json.datumCode && json.datumCode !== 'none') {
27523        var datumDef = match(exports$3, json.datumCode);
27524        if (datumDef) {
27525          json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);
27526          json.ellps = datumDef.ellipse;
27527          json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;
27528        }
27529      }
27530      json.k0 = json.k0 || 1.0;
27531      json.axis = json.axis || 'enu';
27532      json.ellps = json.ellps || 'wgs84';
27533      json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this
27534
27535      var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere);
27536      var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);
27537      var nadgrids = getNadgrids(json.nadgrids);
27538      var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,
27539        nadgrids);
27540
27541      extend(this, json); // transfer everything over from the projection because we don't know what we'll need
27542      extend(this, ourProj); // transfer all the methods from the projection
27543
27544      // copy the 4 things over we calculated in deriveConstants.sphere
27545      this.a = sphere_.a;
27546      this.b = sphere_.b;
27547      this.rf = sphere_.rf;
27548      this.sphere = sphere_.sphere;
27549
27550      // copy the 3 things we calculated in deriveConstants.eccentricity
27551      this.es = ecc.es;
27552      this.e = ecc.e;
27553      this.ep2 = ecc.ep2;
27554
27555      // add in the datum object
27556      this.datum = datumObj;
27557
27558      // init the projection
27559      this.init();
27560
27561      // legecy callback from back in the day when it went to spatialreference.org
27562      callback(null, this);
27563
27564    }
27565    Projection.projections = projections;
27566    Projection.projections.start();
27567
27568    'use strict';
27569    function compareDatums(source, dest) {
27570      if (source.datum_type !== dest.datum_type) {
27571        return false; // false, datums are not equal
27572      } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {
27573        // the tolerance for es is to ensure that GRS80 and WGS84
27574        // are considered identical
27575        return false;
27576      } else if (source.datum_type === PJD_3PARAM) {
27577        return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);
27578      } else if (source.datum_type === PJD_7PARAM) {
27579        return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);
27580      } else {
27581        return true; // datums are equal
27582      }
27583    } // cs_compare_datums()
27584
27585    /*
27586     * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
27587     * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
27588     * according to the current ellipsoid parameters.
27589     *
27590     *    Latitude  : Geodetic latitude in radians                     (input)
27591     *    Longitude : Geodetic longitude in radians                    (input)
27592     *    Height    : Geodetic height, in meters                       (input)
27593     *    X         : Calculated Geocentric X coordinate, in meters    (output)
27594     *    Y         : Calculated Geocentric Y coordinate, in meters    (output)
27595     *    Z         : Calculated Geocentric Z coordinate, in meters    (output)
27596     *
27597     */
27598    function geodeticToGeocentric(p, es, a) {
27599      var Longitude = p.x;
27600      var Latitude = p.y;
27601      var Height = p.z ? p.z : 0; //Z value not always supplied
27602
27603      var Rn; /*  Earth radius at location  */
27604      var Sin_Lat; /*  Math.sin(Latitude)  */
27605      var Sin2_Lat; /*  Square of Math.sin(Latitude)  */
27606      var Cos_Lat; /*  Math.cos(Latitude)  */
27607
27608      /*
27609       ** Don't blow up if Latitude is just a little out of the value
27610       ** range as it may just be a rounding issue.  Also removed longitude
27611       ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.
27612       */
27613      if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {
27614        Latitude = -HALF_PI;
27615      } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {
27616        Latitude = HALF_PI;
27617      } else if (Latitude < -HALF_PI) {
27618        /* Latitude out of range */
27619        //..reportError('geocent:lat out of range:' + Latitude);
27620        return { x: -Infinity, y: -Infinity, z: p.z };
27621      } else if (Latitude > HALF_PI) {
27622        /* Latitude out of range */
27623        return { x: Infinity, y: Infinity, z: p.z };
27624      }
27625
27626      if (Longitude > Math.PI) {
27627        Longitude -= (2 * Math.PI);
27628      }
27629      Sin_Lat = Math.sin(Latitude);
27630      Cos_Lat = Math.cos(Latitude);
27631      Sin2_Lat = Sin_Lat * Sin_Lat;
27632      Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));
27633      return {
27634        x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),
27635        y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),
27636        z: ((Rn * (1 - es)) + Height) * Sin_Lat
27637      };
27638    } // cs_geodetic_to_geocentric()
27639
27640    function geocentricToGeodetic(p, es, a, b) {
27641      /* local defintions and variables */
27642      /* end-criterium of loop, accuracy of sin(Latitude) */
27643      var genau = 1e-12;
27644      var genau2 = (genau * genau);
27645      var maxiter = 30;
27646
27647      var P; /* distance between semi-minor axis and location */
27648      var RR; /* distance between center and location */
27649      var CT; /* sin of geocentric latitude */
27650      var ST; /* cos of geocentric latitude */
27651      var RX;
27652      var RK;
27653      var RN; /* Earth radius at location */
27654      var CPHI0; /* cos of start or old geodetic latitude in iterations */
27655      var SPHI0; /* sin of start or old geodetic latitude in iterations */
27656      var CPHI; /* cos of searched geodetic latitude */
27657      var SPHI; /* sin of searched geodetic latitude */
27658      var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */
27659      var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */
27660
27661      var X = p.x;
27662      var Y = p.y;
27663      var Z = p.z ? p.z : 0.0; //Z value not always supplied
27664      var Longitude;
27665      var Latitude;
27666      var Height;
27667
27668      P = Math.sqrt(X * X + Y * Y);
27669      RR = Math.sqrt(X * X + Y * Y + Z * Z);
27670
27671      /*      special cases for latitude and longitude */
27672      if (P / a < genau) {
27673
27674        /*  special case, if P=0. (X=0., Y=0.) */
27675        Longitude = 0.0;
27676
27677        /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis
27678         *  of ellipsoid (=center of mass), Latitude becomes PI/2 */
27679        if (RR / a < genau) {
27680          Latitude = HALF_PI;
27681          Height = -b;
27682          return {
27683            x: p.x,
27684            y: p.y,
27685            z: p.z
27686          };
27687        }
27688      } else {
27689        /*  ellipsoidal (geodetic) longitude
27690         *  interval: -PI < Longitude <= +PI */
27691        Longitude = Math.atan2(Y, X);
27692      }
27693
27694      /* --------------------------------------------------------------
27695       * Following iterative algorithm was developped by
27696       * "Institut for Erdmessung", University of Hannover, July 1988.
27697       * Internet: www.ife.uni-hannover.de
27698       * Iterative computation of CPHI,SPHI and Height.
27699       * Iteration of CPHI and SPHI to 10**-12 radian resp.
27700       * 2*10**-7 arcsec.
27701       * --------------------------------------------------------------
27702       */
27703      CT = Z / RR;
27704      ST = P / RR;
27705      RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);
27706      CPHI0 = ST * (1.0 - es) * RX;
27707      SPHI0 = CT * RX;
27708      iter = 0;
27709
27710      /* loop to find sin(Latitude) resp. Latitude
27711       * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */
27712      do {
27713        iter++;
27714        RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);
27715
27716        /*  ellipsoidal (geodetic) height */
27717        Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);
27718
27719        RK = es * RN / (RN + Height);
27720        RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);
27721        CPHI = ST * (1.0 - RK) * RX;
27722        SPHI = CT * RX;
27723        SDPHI = SPHI * CPHI0 - CPHI * SPHI0;
27724        CPHI0 = CPHI;
27725        SPHI0 = SPHI;
27726      }
27727      while (SDPHI * SDPHI > genau2 && iter < maxiter);
27728
27729      /*      ellipsoidal (geodetic) latitude */
27730      Latitude = Math.atan(SPHI / Math.abs(CPHI));
27731      return {
27732        x: Longitude,
27733        y: Latitude,
27734        z: Height
27735      };
27736    } // cs_geocentric_to_geodetic()
27737
27738    /****************************************************************/
27739    // pj_geocentic_to_wgs84( p )
27740    //  p = point to transform in geocentric coordinates (x,y,z)
27741
27742
27743    /** point object, nothing fancy, just allows values to be
27744        passed back and forth by reference rather than by value.
27745        Other point classes may be used as long as they have
27746        x and y properties, which will get modified in the transform method.
27747    */
27748    function geocentricToWgs84(p, datum_type, datum_params) {
27749
27750      if (datum_type === PJD_3PARAM) {
27751        // if( x[io] === HUGE_VAL )
27752        //    continue;
27753        return {
27754          x: p.x + datum_params[0],
27755          y: p.y + datum_params[1],
27756          z: p.z + datum_params[2],
27757        };
27758      } else if (datum_type === PJD_7PARAM) {
27759        var Dx_BF = datum_params[0];
27760        var Dy_BF = datum_params[1];
27761        var Dz_BF = datum_params[2];
27762        var Rx_BF = datum_params[3];
27763        var Ry_BF = datum_params[4];
27764        var Rz_BF = datum_params[5];
27765        var M_BF = datum_params[6];
27766        // if( x[io] === HUGE_VAL )
27767        //    continue;
27768        return {
27769          x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,
27770          y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,
27771          z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF
27772        };
27773      }
27774    } // cs_geocentric_to_wgs84
27775
27776    /****************************************************************/
27777    // pj_geocentic_from_wgs84()
27778    //  coordinate system definition,
27779    //  point to transform in geocentric coordinates (x,y,z)
27780    function geocentricFromWgs84(p, datum_type, datum_params) {
27781
27782      if (datum_type === PJD_3PARAM) {
27783        //if( x[io] === HUGE_VAL )
27784        //    continue;
27785        return {
27786          x: p.x - datum_params[0],
27787          y: p.y - datum_params[1],
27788          z: p.z - datum_params[2],
27789        };
27790
27791      } else if (datum_type === PJD_7PARAM) {
27792        var Dx_BF = datum_params[0];
27793        var Dy_BF = datum_params[1];
27794        var Dz_BF = datum_params[2];
27795        var Rx_BF = datum_params[3];
27796        var Ry_BF = datum_params[4];
27797        var Rz_BF = datum_params[5];
27798        var M_BF = datum_params[6];
27799        var x_tmp = (p.x - Dx_BF) / M_BF;
27800        var y_tmp = (p.y - Dy_BF) / M_BF;
27801        var z_tmp = (p.z - Dz_BF) / M_BF;
27802        //if( x[io] === HUGE_VAL )
27803        //    continue;
27804
27805        return {
27806          x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,
27807          y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,
27808          z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp
27809        };
27810      } //cs_geocentric_from_wgs84()
27811    }
27812
27813    function checkParams(type) {
27814      return (type === PJD_3PARAM || type === PJD_7PARAM);
27815    }
27816
27817    var datum_transform = function(source, dest, point) {
27818      // Short cut if the datums are identical.
27819      if (compareDatums(source, dest)) {
27820        return point; // in this case, zero is sucess,
27821        // whereas cs_compare_datums returns 1 to indicate TRUE
27822        // confusing, should fix this
27823      }
27824
27825      // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest
27826      if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {
27827        return point;
27828      }
27829
27830      // If this datum requires grid shifts, then apply it to geodetic coordinates.
27831      var source_a = source.a;
27832      var source_es = source.es;
27833      if (source.datum_type === PJD_GRIDSHIFT) {
27834        var gridShiftCode = applyGridShift(source, false, point);
27835        if (gridShiftCode !== 0) {
27836          return undefined;
27837        }
27838        source_a = SRS_WGS84_SEMIMAJOR;
27839        source_es = SRS_WGS84_ESQUARED;
27840      }
27841
27842      var dest_a = dest.a;
27843      var dest_b = dest.b;
27844      var dest_es = dest.es;
27845      if (dest.datum_type === PJD_GRIDSHIFT) {
27846        dest_a = SRS_WGS84_SEMIMAJOR;
27847        dest_b = SRS_WGS84_SEMIMINOR;
27848        dest_es = SRS_WGS84_ESQUARED;
27849      }
27850
27851      // Do we need to go through geocentric coordinates?
27852      if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) &&  !checkParams(dest.datum_type)) {
27853        return point;
27854      }
27855
27856      // Convert to geocentric coordinates.
27857      point = geodeticToGeocentric(point, source_es, source_a);
27858      // Convert between datums
27859      if (checkParams(source.datum_type)) {
27860        point = geocentricToWgs84(point, source.datum_type, source.datum_params);
27861      }
27862      if (checkParams(dest.datum_type)) {
27863        point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);
27864      }
27865      point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);
27866
27867      if (dest.datum_type === PJD_GRIDSHIFT) {
27868        var destGridShiftResult = applyGridShift(dest, true, point);
27869        if (destGridShiftResult !== 0) {
27870          return undefined;
27871        }
27872      }
27873
27874      return point;
27875    };
27876
27877    function applyGridShift(source, inverse, point) {
27878      if (source.grids === null || source.grids.length === 0) {
27879        console.log('Grid shift grids not found');
27880        return -1;
27881      }
27882      var input = {x: -point.x, y: point.y};
27883      var output = {x: Number.NaN, y: Number.NaN};
27884      var attemptedGrids = [];
27885      outer:
27886      for (var i = 0; i < source.grids.length; i++) {
27887        var grid = source.grids[i];
27888        attemptedGrids.push(grid.name);
27889        if (grid.isNull) {
27890          output = input;
27891          break;
27892        }
27893        if (grid.grid === null) {
27894          if (grid.mandatory) {
27895            console.log("Unable to find mandatory grid '" + grid.name + "'");
27896            return -1;
27897          }
27898          continue;
27899        }
27900        var subgrids = grid.grid.subgrids;
27901        for (var j = 0, jj = subgrids.length; j < jj; j++) {
27902          var subgrid = subgrids[j];
27903          // skip tables that don't match our point at all
27904          var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;
27905          var minX = subgrid.ll[0] - epsilon;
27906          var minY = subgrid.ll[1] - epsilon;
27907          var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;
27908          var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;
27909          if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) {
27910            continue;
27911          }
27912          output = applySubgridShift(input, inverse, subgrid);
27913          if (!isNaN(output.x)) {
27914            break outer;
27915          }
27916        }
27917      }
27918      if (isNaN(output.x)) {
27919        console.log("Failed to find a grid shift table for location '"+
27920          -input.x * R2D + " " + input.y * R2D + " tried: '" + attemptedGrids + "'");
27921        return -1;
27922      }
27923      point.x = -output.x;
27924      point.y = output.y;
27925      return 0;
27926    }
27927
27928    function applySubgridShift(pin, inverse, ct) {
27929      var val = {x: Number.NaN, y: Number.NaN};
27930      if (isNaN(pin.x)) { return val; }
27931      var tb = {x: pin.x, y: pin.y};
27932      tb.x -= ct.ll[0];
27933      tb.y -= ct.ll[1];
27934      tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;
27935      var t = nadInterpolate(tb, ct);
27936      if (inverse) {
27937        if (isNaN(t.x)) {
27938          return val;
27939        }
27940        t.x = tb.x - t.x;
27941        t.y = tb.y - t.y;
27942        var i = 9, tol = 1e-12;
27943        var dif, del;
27944        do {
27945          del = nadInterpolate(t, ct);
27946          if (isNaN(del.x)) {
27947            console.log("Inverse grid shift iteration failed, presumably at grid edge.  Using first approximation.");
27948            break;
27949          }
27950          dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)};
27951          t.x += dif.x;
27952          t.y += dif.y;
27953        } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);
27954        if (i < 0) {
27955          console.log("Inverse grid shift iterator failed to converge.");
27956          return val;
27957        }
27958        val.x = adjust_lon(t.x + ct.ll[0]);
27959        val.y = t.y + ct.ll[1];
27960      } else {
27961        if (!isNaN(t.x)) {
27962          val.x = pin.x + t.x;
27963          val.y = pin.y + t.y;
27964        }
27965      }
27966      return val;
27967    }
27968
27969    function nadInterpolate(pin, ct) {
27970      var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]};
27971      var indx = {x: Math.floor(t.x), y: Math.floor(t.y)};
27972      var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y};
27973      var val= {x: Number.NaN, y: Number.NaN};
27974      var inx;
27975      if (indx.x < 0 || indx.x >= ct.lim[0]) {
27976        return val;
27977      }
27978      if (indx.y < 0 || indx.y >= ct.lim[1]) {
27979        return val;
27980      }
27981      inx = (indx.y * ct.lim[0]) + indx.x;
27982      var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};
27983      inx++;
27984      var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};
27985      inx += ct.lim[0];
27986      var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};
27987      inx--;
27988      var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};
27989      var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),
27990        m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;
27991      val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);
27992      val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);
27993      return val;
27994    }
27995
27996    var adjust_axis = function(crs, denorm, point) {
27997      var xin = point.x,
27998        yin = point.y,
27999        zin = point.z || 0.0;
28000      var v, t, i;
28001      var out = {};
28002      for (i = 0; i < 3; i++) {
28003        if (denorm && i === 2 && point.z === undefined) {
28004          continue;
28005        }
28006        if (i === 0) {
28007          v = xin;
28008          if ("ew".indexOf(crs.axis[i]) !== -1) {
28009            t = 'x';
28010          } else {
28011            t = 'y';
28012          }
28013
28014        }
28015        else if (i === 1) {
28016          v = yin;
28017          if ("ns".indexOf(crs.axis[i]) !== -1) {
28018            t = 'y';
28019          } else {
28020            t = 'x';
28021          }
28022        }
28023        else {
28024          v = zin;
28025          t = 'z';
28026        }
28027        switch (crs.axis[i]) {
28028        case 'e':
28029          out[t] = v;
28030          break;
28031        case 'w':
28032          out[t] = -v;
28033          break;
28034        case 'n':
28035          out[t] = v;
28036          break;
28037        case 's':
28038          out[t] = -v;
28039          break;
28040        case 'u':
28041          if (point[t] !== undefined) {
28042            out.z = v;
28043          }
28044          break;
28045        case 'd':
28046          if (point[t] !== undefined) {
28047            out.z = -v;
28048          }
28049          break;
28050        default:
28051          //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName);
28052          return null;
28053        }
28054      }
28055      return out;
28056    };
28057
28058    var toPoint = function (array){
28059      var out = {
28060        x: array[0],
28061        y: array[1]
28062      };
28063      if (array.length>2) {
28064        out.z = array[2];
28065      }
28066      if (array.length>3) {
28067        out.m = array[3];
28068      }
28069      return out;
28070    };
28071
28072    var checkSanity = function (point) {
28073      checkCoord(point.x);
28074      checkCoord(point.y);
28075    };
28076    function checkCoord(num) {
28077      if (typeof Number.isFinite === 'function') {
28078        if (Number.isFinite(num)) {
28079          return;
28080        }
28081        throw new TypeError('coordinates must be finite numbers');
28082      }
28083      if (typeof num !== 'number' || num !== num || !isFinite(num)) {
28084        throw new TypeError('coordinates must be finite numbers');
28085      }
28086    }
28087
28088    function checkNotWGS(source, dest) {
28089      return (
28090        (source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM || source.datum.datum_type === PJD_GRIDSHIFT) && dest.datumCode !== 'WGS84') ||
28091        ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM || dest.datum.datum_type === PJD_GRIDSHIFT) && source.datumCode !== 'WGS84');
28092    }
28093
28094    function transform(source, dest, point, enforceAxis) {
28095      var wgs84;
28096      if (Array.isArray(point)) {
28097        point = toPoint(point);
28098      } else {
28099        // Clone the point object so inputs don't get modified
28100        point = {
28101          x: point.x,
28102          y: point.y,
28103          z: point.z,
28104          m: point.m
28105        };
28106      }
28107      var hasZ = point.z !== undefined;
28108      checkSanity(point);
28109      // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84
28110      if (source.datum && dest.datum && checkNotWGS(source, dest)) {
28111        wgs84 = new Projection('WGS84');
28112        point = transform(source, wgs84, point, enforceAxis);
28113        source = wgs84;
28114      }
28115      // DGR, 2010/11/12
28116      if (enforceAxis && source.axis !== 'enu') {
28117        point = adjust_axis(source, false, point);
28118      }
28119      // Transform source points to long/lat, if they aren't already.
28120      if (source.projName === 'longlat') {
28121        point = {
28122          x: point.x * D2R,
28123          y: point.y * D2R,
28124          z: point.z || 0
28125        };
28126      } else {
28127        if (source.to_meter) {
28128          point = {
28129            x: point.x * source.to_meter,
28130            y: point.y * source.to_meter,
28131            z: point.z || 0
28132          };
28133        }
28134        point = source.inverse(point); // Convert Cartesian to longlat
28135        if (!point) {
28136          return;
28137        }
28138      }
28139      // Adjust for the prime meridian if necessary
28140      if (source.from_greenwich) {
28141        point.x += source.from_greenwich;
28142      }
28143
28144      // Convert datums if needed, and if possible.
28145      point = datum_transform(source.datum, dest.datum, point);
28146      if (!point) {
28147        return;
28148      }
28149
28150      // Adjust for the prime meridian if necessary
28151      if (dest.from_greenwich) {
28152        point = {
28153          x: point.x - dest.from_greenwich,
28154          y: point.y,
28155          z: point.z || 0
28156        };
28157      }
28158
28159      if (dest.projName === 'longlat') {
28160        // convert radians to decimal degrees
28161        point = {
28162          x: point.x * R2D,
28163          y: point.y * R2D,
28164          z: point.z || 0
28165        };
28166      } else { // else project
28167        point = dest.forward(point);
28168        if (dest.to_meter) {
28169          point = {
28170            x: point.x / dest.to_meter,
28171            y: point.y / dest.to_meter,
28172            z: point.z || 0
28173          };
28174        }
28175      }
28176
28177      // DGR, 2010/11/12
28178      if (enforceAxis && dest.axis !== 'enu') {
28179        return adjust_axis(dest, true, point);
28180      }
28181
28182      if (point && !hasZ) {
28183        delete point.z;
28184      }
28185      return point;
28186    }
28187
28188    var wgs84 = Projection('WGS84');
28189
28190    function transformer(from, to, coords, enforceAxis) {
28191      var transformedArray, out, keys;
28192      if (Array.isArray(coords)) {
28193        transformedArray = transform(from, to, coords, enforceAxis) || {x: NaN, y: NaN};
28194        if (coords.length > 2) {
28195          if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {
28196            if (typeof transformedArray.z === 'number') {
28197              return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.splice(3));
28198            } else {
28199              return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.splice(3));
28200            }
28201          } else {
28202            return [transformedArray.x, transformedArray.y].concat(coords.splice(2));
28203          }
28204        } else {
28205          return [transformedArray.x, transformedArray.y];
28206        }
28207      } else {
28208        out = transform(from, to, coords, enforceAxis);
28209        keys = Object.keys(coords);
28210        if (keys.length === 2) {
28211          return out;
28212        }
28213        keys.forEach(function (key) {
28214          if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {
28215            if (key === 'x' || key === 'y' || key === 'z') {
28216              return;
28217            }
28218          } else {
28219            if (key === 'x' || key === 'y') {
28220              return;
28221            }
28222          }
28223          out[key] = coords[key];
28224        });
28225        return out;
28226      }
28227    }
28228
28229    function checkProj(item) {
28230      if (item instanceof Projection) {
28231        return item;
28232      }
28233      if (item.oProj) {
28234        return item.oProj;
28235      }
28236      return Projection(item);
28237    }
28238
28239    function proj4$1(fromProj, toProj, coord) {
28240      fromProj = checkProj(fromProj);
28241      var single = false;
28242      var obj;
28243      if (typeof toProj === 'undefined') {
28244        toProj = fromProj;
28245        fromProj = wgs84;
28246        single = true;
28247      } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {
28248        coord = toProj;
28249        toProj = fromProj;
28250        fromProj = wgs84;
28251        single = true;
28252      }
28253      toProj = checkProj(toProj);
28254      if (coord) {
28255        return transformer(fromProj, toProj, coord);
28256      } else {
28257        obj = {
28258          forward: function (coords, enforceAxis) {
28259            return transformer(fromProj, toProj, coords, enforceAxis);
28260          },
28261          inverse: function (coords, enforceAxis) {
28262            return transformer(toProj, fromProj, coords, enforceAxis);
28263          }
28264        };
28265        if (single) {
28266          obj.oProj = toProj;
28267        }
28268        return obj;
28269      }
28270    }
28271
28272    /**
28273     * UTM zones are grouped, and assigned to one of a group of 6
28274     * sets.
28275     *
28276     * {int} @private
28277     */
28278    var NUM_100K_SETS = 6;
28279
28280    /**
28281     * The column letters (for easting) of the lower left value, per
28282     * set.
28283     *
28284     * {string} @private
28285     */
28286    var SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';
28287
28288    /**
28289     * The row letters (for northing) of the lower left value, per
28290     * set.
28291     *
28292     * {string} @private
28293     */
28294    var SET_ORIGIN_ROW_LETTERS = 'AFAFAF';
28295
28296    var A = 65; // A
28297    var I = 73; // I
28298    var O = 79; // O
28299    var V = 86; // V
28300    var Z = 90; // Z
28301    var mgrs = {
28302      forward: forward$1,
28303      inverse: inverse$1,
28304      toPoint: toPoint$1
28305    };
28306    /**
28307     * Conversion of lat/lon to MGRS.
28308     *
28309     * @param {object} ll Object literal with lat and lon properties on a
28310     *     WGS84 ellipsoid.
28311     * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for
28312     *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.
28313     * @return {string} the MGRS string for the given location and accuracy.
28314     */
28315    function forward$1(ll, accuracy) {
28316      accuracy = accuracy || 5; // default accuracy 1m
28317      return encode(LLtoUTM({
28318        lat: ll[1],
28319        lon: ll[0]
28320      }), accuracy);
28321    }
28322
28323    /**
28324     * Conversion of MGRS to lat/lon.
28325     *
28326     * @param {string} mgrs MGRS string.
28327     * @return {array} An array with left (longitude), bottom (latitude), right
28328     *     (longitude) and top (latitude) values in WGS84, representing the
28329     *     bounding box for the provided MGRS reference.
28330     */
28331    function inverse$1(mgrs) {
28332      var bbox = UTMtoLL(decode(mgrs.toUpperCase()));
28333      if (bbox.lat && bbox.lon) {
28334        return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];
28335      }
28336      return [bbox.left, bbox.bottom, bbox.right, bbox.top];
28337    }
28338
28339    function toPoint$1(mgrs) {
28340      var bbox = UTMtoLL(decode(mgrs.toUpperCase()));
28341      if (bbox.lat && bbox.lon) {
28342        return [bbox.lon, bbox.lat];
28343      }
28344      return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];
28345    }
28346    /**
28347     * Conversion from degrees to radians.
28348     *
28349     * @private
28350     * @param {number} deg the angle in degrees.
28351     * @return {number} the angle in radians.
28352     */
28353    function degToRad(deg) {
28354      return (deg * (Math.PI / 180.0));
28355    }
28356
28357    /**
28358     * Conversion from radians to degrees.
28359     *
28360     * @private
28361     * @param {number} rad the angle in radians.
28362     * @return {number} the angle in degrees.
28363     */
28364    function radToDeg(rad) {
28365      return (180.0 * (rad / Math.PI));
28366    }
28367
28368    /**
28369     * Converts a set of Longitude and Latitude co-ordinates to UTM
28370     * using the WGS84 ellipsoid.
28371     *
28372     * @private
28373     * @param {object} ll Object literal with lat and lon properties
28374     *     representing the WGS84 coordinate to be converted.
28375     * @return {object} Object literal containing the UTM value with easting,
28376     *     northing, zoneNumber and zoneLetter properties, and an optional
28377     *     accuracy property in digits. Returns null if the conversion failed.
28378     */
28379    function LLtoUTM(ll) {
28380      var Lat = ll.lat;
28381      var Long = ll.lon;
28382      var a = 6378137.0; //ellip.radius;
28383      var eccSquared = 0.00669438; //ellip.eccsq;
28384      var k0 = 0.9996;
28385      var LongOrigin;
28386      var eccPrimeSquared;
28387      var N, T, C, A, M;
28388      var LatRad = degToRad(Lat);
28389      var LongRad = degToRad(Long);
28390      var LongOriginRad;
28391      var ZoneNumber;
28392      // (int)
28393      ZoneNumber = Math.floor((Long + 180) / 6) + 1;
28394
28395      //Make sure the longitude 180.00 is in Zone 60
28396      if (Long === 180) {
28397        ZoneNumber = 60;
28398      }
28399
28400      // Special zone for Norway
28401      if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {
28402        ZoneNumber = 32;
28403      }
28404
28405      // Special zones for Svalbard
28406      if (Lat >= 72.0 && Lat < 84.0) {
28407        if (Long >= 0.0 && Long < 9.0) {
28408          ZoneNumber = 31;
28409        }
28410        else if (Long >= 9.0 && Long < 21.0) {
28411          ZoneNumber = 33;
28412        }
28413        else if (Long >= 21.0 && Long < 33.0) {
28414          ZoneNumber = 35;
28415        }
28416        else if (Long >= 33.0 && Long < 42.0) {
28417          ZoneNumber = 37;
28418        }
28419      }
28420
28421      LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin
28422      // in middle of
28423      // zone
28424      LongOriginRad = degToRad(LongOrigin);
28425
28426      eccPrimeSquared = (eccSquared) / (1 - eccSquared);
28427
28428      N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));
28429      T = Math.tan(LatRad) * Math.tan(LatRad);
28430      C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);
28431      A = Math.cos(LatRad) * (LongRad - LongOriginRad);
28432
28433      M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));
28434
28435      var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);
28436
28437      var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));
28438      if (Lat < 0.0) {
28439        UTMNorthing += 10000000.0; //10000000 meter offset for
28440        // southern hemisphere
28441      }
28442
28443      return {
28444        northing: Math.round(UTMNorthing),
28445        easting: Math.round(UTMEasting),
28446        zoneNumber: ZoneNumber,
28447        zoneLetter: getLetterDesignator(Lat)
28448      };
28449    }
28450
28451    /**
28452     * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience
28453     * class where the Zone can be specified as a single string eg."60N" which
28454     * is then broken down into the ZoneNumber and ZoneLetter.
28455     *
28456     * @private
28457     * @param {object} utm An object literal with northing, easting, zoneNumber
28458     *     and zoneLetter properties. If an optional accuracy property is
28459     *     provided (in meters), a bounding box will be returned instead of
28460     *     latitude and longitude.
28461     * @return {object} An object literal containing either lat and lon values
28462     *     (if no accuracy was provided), or top, right, bottom and left values
28463     *     for the bounding box calculated according to the provided accuracy.
28464     *     Returns null if the conversion failed.
28465     */
28466    function UTMtoLL(utm) {
28467
28468      var UTMNorthing = utm.northing;
28469      var UTMEasting = utm.easting;
28470      var zoneLetter = utm.zoneLetter;
28471      var zoneNumber = utm.zoneNumber;
28472      // check the ZoneNummber is valid
28473      if (zoneNumber < 0 || zoneNumber > 60) {
28474        return null;
28475      }
28476
28477      var k0 = 0.9996;
28478      var a = 6378137.0; //ellip.radius;
28479      var eccSquared = 0.00669438; //ellip.eccsq;
28480      var eccPrimeSquared;
28481      var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));
28482      var N1, T1, C1, R1, D, M;
28483      var LongOrigin;
28484      var mu, phi1Rad;
28485
28486      // remove 500,000 meter offset for longitude
28487      var x = UTMEasting - 500000.0;
28488      var y = UTMNorthing;
28489
28490      // We must know somehow if we are in the Northern or Southern
28491      // hemisphere, this is the only time we use the letter So even
28492      // if the Zone letter isn't exactly correct it should indicate
28493      // the hemisphere correctly
28494      if (zoneLetter < 'N') {
28495        y -= 10000000.0; // remove 10,000,000 meter offset used
28496        // for southern hemisphere
28497      }
28498
28499      // There are 60 zones with zone 1 being at West -180 to -174
28500      LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin
28501      // in middle of
28502      // zone
28503
28504      eccPrimeSquared = (eccSquared) / (1 - eccSquared);
28505
28506      M = y / k0;
28507      mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));
28508
28509      phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);
28510      // double phi1 = ProjMath.radToDeg(phi1Rad);
28511
28512      N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));
28513      T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);
28514      C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);
28515      R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);
28516      D = x / (N1 * k0);
28517
28518      var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T
285181 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);
28519      lat = radToDeg(lat);
28520
28521      var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);
28522      lon = LongOrigin + radToDeg(lon);
28523
28524      var result;
28525      if (utm.accuracy) {
28526        var topRight = UTMtoLL({
28527          northing: utm.northing + utm.accuracy,
28528          easting: utm.easting + utm.accuracy,
28529          zoneLetter: utm.zoneLetter,
28530          zoneNumber: utm.zoneNumber
28531        });
28532        result = {
28533          top: topRight.lat,
28534          right: topRight.lon,
28535          bottom: lat,
28536          left: lon
28537        };
28538      }
28539      else {
28540        result = {
28541          lat: lat,
28542          lon: lon
28543        };
28544      }
28545      return result;
28546    }
28547
28548    /**
28549     * Calculates the MGRS letter designator for the given latitude.
28550     *
28551     * @private
28552     * @param {number} lat The latitude in WGS84 to get the letter designator
28553     *     for.
28554     * @return {char} The letter designator.
28555     */
28556    function getLetterDesignator(lat) {
28557      //This is here as an error flag to show that the Latitude is
28558      //outside MGRS limits
28559      var LetterDesignator = 'Z';
28560
28561      if ((84 >= lat) && (lat >= 72)) {
28562        LetterDesignator = 'X';
28563      }
28564      else if ((72 > lat) && (lat >= 64)) {
28565        LetterDesignator = 'W';
28566      }
28567      else if ((64 > lat) && (lat >= 56)) {
28568        LetterDesignator = 'V';
28569      }
28570      else if ((56 > lat) && (lat >= 48)) {
28571        LetterDesignator = 'U';
28572      }
28573      else if ((48 > lat) && (lat >= 40)) {
28574        LetterDesignator = 'T';
28575      }
28576      else if ((40 > lat) && (lat >= 32)) {
28577        LetterDesignator = 'S';
28578      }
28579      else if ((32 > lat) && (lat >= 24)) {
28580        LetterDesignator = 'R';
28581      }
28582      else if ((24 > lat) && (lat >= 16)) {
28583        LetterDesignator = 'Q';
28584      }
28585      else if ((16 > lat) && (lat >= 8)) {
28586        LetterDesignator = 'P';
28587      }
28588      else if ((8 > lat) && (lat >= 0)) {
28589        LetterDesignator = 'N';
28590      }
28591      else if ((0 > lat) && (lat >= -8)) {
28592        LetterDesignator = 'M';
28593      }
28594      else if ((-8 > lat) && (lat >= -16)) {
28595        LetterDesignator = 'L';
28596      }
28597      else if ((-16 > lat) && (lat >= -24)) {
28598        LetterDesignator = 'K';
28599      }
28600      else if ((-24 > lat) && (lat >= -32)) {
28601        LetterDesignator = 'J';
28602      }
28603      else if ((-32 > lat) && (lat >= -40)) {
28604        LetterDesignator = 'H';
28605      }
28606      else if ((-40 > lat) && (lat >= -48)) {
28607        LetterDesignator = 'G';
28608      }
28609      else if ((-48 > lat) && (lat >= -56)) {
28610        LetterDesignator = 'F';
28611      }
28612      else if ((-56 > lat) && (lat >= -64)) {
28613        LetterDesignator = 'E';
28614      }
28615      else if ((-64 > lat) && (lat >= -72)) {
28616        LetterDesignator = 'D';
28617      }
28618      else if ((-72 > lat) && (lat >= -80)) {
28619        LetterDesignator = 'C';
28620      }
28621      return LetterDesignator;
28622    }
28623
28624    /**
28625     * Encodes a UTM location as MGRS string.
28626     *
28627     * @private
28628     * @param {object} utm An object literal with easting, northing,
28629     *     zoneLetter, zoneNumber
28630     * @param {number} accuracy Accuracy in digits (1-5).
28631     * @return {string} MGRS string for the given UTM location.
28632     */
28633    function encode(utm, accuracy) {
28634      // prepend with leading zeroes
28635      var seasting = "00000" + utm.easting,
28636        snorthing = "00000" + utm.northing;
28637
28638      return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);
28639    }
28640
28641    /**
28642     * Get the two letter 100k designator for a given UTM easting,
28643     * northing and zone number value.
28644     *
28645     * @private
28646     * @param {number} easting
28647     * @param {number} northing
28648     * @param {number} zoneNumber
28649     * @return the two letter 100k designator for the given UTM location.
28650     */
28651    function get100kID(easting, northing, zoneNumber) {
28652      var setParm = get100kSetForZone(zoneNumber);
28653      var setColumn = Math.floor(easting / 100000);
28654      var setRow = Math.floor(northing / 100000) % 20;
28655      return getLetter100kID(setColumn, setRow, setParm);
28656    }
28657
28658    /**
28659     * Given a UTM zone number, figure out the MGRS 100K set it is in.
28660     *
28661     * @private
28662     * @param {number} i An UTM zone number.
28663     * @return {number} the 100k set the UTM zone is in.
28664     */
28665    function get100kSetForZone(i) {
28666      var setParm = i % NUM_100K_SETS;
28667      if (setParm === 0) {
28668        setParm = NUM_100K_SETS;
28669      }
28670
28671      return setParm;
28672    }
28673
28674    /**
28675     * Get the two-letter MGRS 100k designator given information
28676     * translated from the UTM northing, easting and zone number.
28677     *
28678     * @private
28679     * @param {number} column the column index as it relates to the MGRS
28680     *        100k set spreadsheet, created from the UTM easting.
28681     *        Values are 1-8.
28682     * @param {number} row the row index as it relates to the MGRS 100k set
28683     *        spreadsheet, created from the UTM northing value. Values
28684     *        are from 0-19.
28685     * @param {number} parm the set block, as it relates to the MGRS 100k set
28686     *        spreadsheet, created from the UTM zone. Values are from
28687     *        1-60.
28688     * @return two letter MGRS 100k code.
28689     */
28690    function getLetter100kID(column, row, parm) {
28691      // colOrigin and rowOrigin are the letters at the origin of the set
28692      var index = parm - 1;
28693      var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);
28694      var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);
28695
28696      // colInt and rowInt are the letters to build to return
28697      var colInt = colOrigin + column - 1;
28698      var rowInt = rowOrigin + row;
28699      var rollover = false;
28700
28701      if (colInt > Z) {
28702        colInt = colInt - Z + A - 1;
28703        rollover = true;
28704      }
28705
28706      if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {
28707        colInt++;
28708      }
28709
28710      if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {
28711        colInt++;
28712
28713        if (colInt === I) {
28714          colInt++;
28715        }
28716      }
28717
28718      if (colInt > Z) {
28719        colInt = colInt - Z + A - 1;
28720      }
28721
28722      if (rowInt > V) {
28723        rowInt = rowInt - V + A - 1;
28724        rollover = true;
28725      }
28726      else {
28727        rollover = false;
28728      }
28729
28730      if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {
28731        rowInt++;
28732      }
28733
28734      if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {
28735        rowInt++;
28736
28737        if (rowInt === I) {
28738          rowInt++;
28739        }
28740      }
28741
28742      if (rowInt > V) {
28743        rowInt = rowInt - V + A - 1;
28744      }
28745
28746      var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);
28747      return twoLetter;
28748    }
28749
28750    /**
28751     * Decode the UTM parameters from a MGRS string.
28752     *
28753     * @private
28754     * @param {string} mgrsString an UPPERCASE coordinate string is expected.
28755     * @return {object} An object literal with easting, northing, zoneLetter,
28756     *     zoneNumber and accuracy (in meters) properties.
28757     */
28758    function decode(mgrsString) {
28759
28760      if (mgrsString && mgrsString.length === 0) {
28761        throw ("MGRSPoint coverting from nothing");
28762      }
28763
28764      var length = mgrsString.length;
28765
28766      var hunK = null;
28767      var sb = "";
28768      var testChar;
28769      var i = 0;
28770
28771      // get Zone number
28772      while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {
28773        if (i >= 2) {
28774          throw ("MGRSPoint bad conversion from: " + mgrsString);
28775        }
28776        sb += testChar;
28777        i++;
28778      }
28779
28780      var zoneNumber = parseInt(sb, 10);
28781
28782      if (i === 0 || i + 3 > length) {
28783        // A good MGRS string has to be 4-5 digits long,
28784        // ##AAA/#AAA at least.
28785        throw ("MGRSPoint bad conversion from: " + mgrsString);
28786      }
28787
28788      var zoneLetter = mgrsString.charAt(i++);
28789
28790      // Should we check the zone letter here? Why not.
28791      if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {
28792        throw ("MGRSPoint zone letter " + zoneLetter + " not handled: " + mgrsString);
28793      }
28794
28795      hunK = mgrsString.substring(i, i += 2);
28796
28797      var set = get100kSetForZone(zoneNumber);
28798
28799      var east100k = getEastingFromChar(hunK.charAt(0), set);
28800      var north100k = getNorthingFromChar(hunK.charAt(1), set);
28801
28802      // We have a bug where the northing may be 2000000 too low.
28803      // How
28804      // do we know when to roll over?
28805
28806      while (north100k < getMinNorthing(zoneLetter)) {
28807        north100k += 2000000;
28808      }
28809
28810      // calculate the char index for easting/northing separator
28811      var remainder = length - i;
28812
28813      if (remainder % 2 !== 0) {
28814        throw ("MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters" + mgrsString);
28815      }
28816
28817      var sep = remainder / 2;
28818
28819      var sepEasting = 0.0;
28820      var sepNorthing = 0.0;
28821      var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;
28822      if (sep > 0) {
28823        accuracyBonus = 100000.0 / Math.pow(10, sep);
28824        sepEastingString = mgrsString.substring(i, i + sep);
28825        sepEasting = parseFloat(sepEastingString) * accuracyBonus;
28826        sepNorthingString = mgrsString.substring(i + sep);
28827        sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;
28828      }
28829
28830      easting = sepEasting + east100k;
28831      northing = sepNorthing + north100k;
28832
28833      return {
28834        easting: easting,
28835        northing: northing,
28836        zoneLetter: zoneLetter,
28837        zoneNumber: zoneNumber,
28838        accuracy: accuracyBonus
28839      };
28840    }
28841
28842    /**
28843     * Given the first letter from a two-letter MGRS 100k zone, and g
28843iven the
28844     * MGRS table set for the zone number, figure out the easting value that
28845     * should be added to the other, secondary easting value.
28846     *
28847     * @private
28848     * @param {char} e The first letter from a two-letter MGRS 100´k zone.
28849     * @param {number} set The MGRS table set for the zone number.
28850     * @return {number} The easting value for the given letter and set.
28851     */
28852    function getEastingFromChar(e, set) {
28853      // colOrigin is the letter at the origin of the set for the
28854      // column
28855      var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);
28856      var eastingValue = 100000.0;
28857      var rewindMarker = false;
28858
28859      while (curCol !== e.charCodeAt(0)) {
28860        curCol++;
28861        if (curCol === I) {
28862          curCol++;
28863        }
28864        if (curCol === O) {
28865          curCol++;
28866        }
28867        if (curCol > Z) {
28868          if (rewindMarker) {
28869            throw ("Bad character: " + e);
28870          }
28871          curCol = A;
28872          rewindMarker = true;
28873        }
28874        eastingValue += 100000.0;
28875      }
28876
28877      return eastingValue;
28878    }
28879
28880    /**
28881     * Given the second letter from a two-letter MGRS 100k zone, and given the
28882     * MGRS table set for the zone number, figure out the northing value that
28883     * should be added to the other, secondary northing value. You have to
28884     * remember that Northings are determined from the equator, and the vertical
28885     * cycle of letters mean a 2000000 additional northing meters. This happens
28886     * approx. every 18 degrees of latitude. This method does *NOT* count any
28887     * additional northings. You have to figure out how many 2000000 meters need
28888     * to be added for the zone letter of the MGRS coordinate.
28889     *
28890     * @private
28891     * @param {char} n Second letter of the MGRS 100k zone
28892     * @param {number} set The MGRS table set number, which is dependent on the
28893     *     UTM zone number.
28894     * @return {number} The northing value for the given letter and set.
28895     */
28896    function getNorthingFromChar(n, set) {
28897
28898      if (n > 'V') {
28899        throw ("MGRSPoint given invalid Northing " + n);
28900      }
28901
28902      // rowOrigin is the letter at the origin of the set for the
28903      // column
28904      var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);
28905      var northingValue = 0.0;
28906      var rewindMarker = false;
28907
28908      while (curRow !== n.charCodeAt(0)) {
28909        curRow++;
28910        if (curRow === I) {
28911          curRow++;
28912        }
28913        if (curRow === O) {
28914          curRow++;
28915        }
28916        // fixing a bug making whole application hang in this loop
28917        // when 'n' is a wrong character
28918        if (curRow > V) {
28919          if (rewindMarker) { // making sure that this loop ends
28920            throw ("Bad character: " + n);
28921          }
28922          curRow = A;
28923          rewindMarker = true;
28924        }
28925        northingValue += 100000.0;
28926      }
28927
28928      return northingValue;
28929    }
28930
28931    /**
28932     * The function getMinNorthing returns the minimum northing value of a MGRS
28933     * zone.
28934     *
28935     * Ported from Geotrans' c Lattitude_Band_Value structure table.
28936     *
28937     * @private
28938     * @param {char} zoneLetter The MGRS zone to get the min northing for.
28939     * @return {number}
28940     */
28941    function getMinNorthing(zoneLetter) {
28942      var northing;
28943      switch (zoneLetter) {
28944      case 'C':
28945        northing = 1100000.0;
28946        break;
28947      case 'D':
28948        northing = 2000000.0;
28949        break;
28950      case 'E':
28951        northing = 2800000.0;
28952        break;
28953      case 'F':
28954        northing = 3700000.0;
28955        break;
28956      case 'G':
28957        northing = 4600000.0;
28958        break;
28959      case 'H':
28960        northing = 5500000.0;
28961        break;
28962      case 'J':
28963        northing = 6400000.0;
28964        break;
28965      case 'K':
28966        northing = 7300000.0;
28967        break;
28968      case 'L':
28969        northing = 8200000.0;
28970        break;
28971      case 'M':
28972        northing = 9100000.0;
28973        break;
28974      case 'N':
28975        northing = 0.0;
28976        break;
28977      case 'P':
28978        northing = 800000.0;
28979        break;
28980      case 'Q':
28981        northing = 1700000.0;
28982        break;
28983      case 'R':
28984        northing = 2600000.0;
28985        break;
28986      case 'S':
28987        northing = 3500000.0;
28988        break;
28989      case 'T':
28990        northing = 4400000.0;
28991        break;
28992      case 'U':
28993        northing = 5300000.0;
28994        break;
28995      case 'V':
28996        northing = 6200000.0;
28997        break;
28998      case 'W':
28999        northing = 7000000.0;
29000        break;
29001      case 'X':
29002        northing = 7900000.0;
29003        break;
29004      default:
29005        northing = -1.0;
29006      }
29007      if (northing >= 0.0) {
29008        return northing;
29009      }
29010      else {
29011        throw ("Invalid zone letter: " + zoneLetter);
29012      }
29013
29014    }
29015
29016    function Point(x, y, z) {
29017      if (!(this instanceof Point)) {
29018        return new Point(x, y, z);
29019      }
29020      if (Array.isArray(x)) {
29021        this.x = x[0];
29022        this.y = x[1];
29023        this.z = x[2] || 0.0;
29024      } else if(typeof x === 'object') {
29025        this.x = x.x;
29026        this.y = x.y;
29027        this.z = x.z || 0.0;
29028      } else if (typeof x === 'string' && typeof y === 'undefined') {
29029        var coords = x.split(',');
29030        this.x = parseFloat(coords[0], 10);
29031        this.y = parseFloat(coords[1], 10);
29032        this.z = parseFloat(coords[2], 10) || 0.0;
29033      } else {
29034        this.x = x;
29035        this.y = y;
29036        this.z = z || 0.0;
29037      }
29038      console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');
29039    }
29040
29041    Point.fromMGRS = function(mgrsStr) {
29042      return new Point(toPoint$1(mgrsStr));
29043    };
29044    Point.prototype.toMGRS = function(accuracy) {
29045      return forward$1([this.x, this.y], accuracy);
29046    };
29047
29048    var C00 = 1;
29049    var C02 = 0.25;
29050    var C04 = 0.046875;
29051    var C06 = 0.01953125;
29052    var C08 = 0.01068115234375;
29053    var C22 = 0.75;
29054    var C44 = 0.46875;
29055    var C46 = 0.01302083333333333333;
29056    var C48 = 0.00712076822916666666;
29057    var C66 = 0.36458333333333333333;
29058    var C68 = 0.00569661458333333333;
29059    var C88 = 0.3076171875;
29060
29061    var pj_enfn = function(es) {
29062      var en = [];
29063      en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));
29064      en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));
29065      var t = es * es;
29066      en[2] = t * (C44 - es * (C46 + es * C48));
29067      t *= es;
29068      en[3] = t * (C66 - es * C68);
29069      en[4] = t * es * C88;
29070      return en;
29071    };
29072
29073    var pj_mlfn = function(phi, sphi, cphi, en) {
29074      cphi *= sphi;
29075      sphi *= sphi;
29076      return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));
29077    };
29078
29079    var MAX_ITER = 20;
29080
29081    var pj_inv_mlfn = function(arg, es, en) {
29082      var k = 1 / (1 - es);
29083      var phi = arg;
29084      for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */
29085        var s = Math.sin(phi);
29086        var t = 1 - es * s * s;
29087        //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;
29088        //phi -= t * (t * Math.sqrt(t)) * k;
29089        t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;
29090        phi -= t;
29091        if (Math.abs(t) < EPSLN) {
29092          return phi;
29093        }
29094      }
29095      //..reportError("cass:pj_inv_mlfn: Convergence error");
29096      return phi;
29097    };
29098
29099    // Heavily based on this tmerc projection implementation
29100    // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js
29101
29102    function init$2() {
29103      this.x0 = this.x0 !== undefined ? this.x0 : 0;
29104      this.y0 = this.y0 !== undefined ? this.y0 : 0;
29105      this.long0 = this.long0 !== undefined ? this.long0 : 0;
29106      this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;
29107
29108      if (this.es) {
29109        this.en = pj_enfn(this.es);
29110        this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);
29111      }
29112    }
29113
29114    /**
29115        Transverse Mercator Forward  - long/lat to x/y
29116        long/lat in radians
29117      */
29118    function forward$2(p) {
29119      var lon = p.x;
29120      var lat = p.y;
29121
29122      var delta_lon = adjust_lon(lon - this.long0);
29123      var con;
29124      var x, y;
29125      var sin_phi = Math.sin(lat);
29126      var cos_phi = Math.cos(lat);
29127
29128      if (!this.es) {
29129        var b = cos_phi * Math.sin(delta_lon);
29130
29131        if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {
29132          return (93);
29133        }
29134        else {
29135          x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;
29136          y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));
29137          b = Math.abs(y);
29138
29139          if (b >= 1) {
29140            if ((b - 1) > EPSLN) {
29141              return (93);
29142            }
29143            else {
29144              y = 0;
29145            }
29146          }
29147          else {
29148            y = Math.acos(y);
29149          }
29150
29151          if (lat < 0) {
29152            y = -y;
29153          }
29154
29155          y = this.a * this.k0 * (y - this.lat0) + this.y0;
29156        }
29157      }
29158      else {
29159        var al = cos_phi * delta_lon;
29160        var als = Math.pow(al, 2);
29161        var c = this.ep2 * Math.pow(cos_phi, 2);
29162        var cs = Math.pow(c, 2);
29163        var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;
29164        var t = Math.pow(tq, 2);
29165        var ts = Math.pow(t, 2);
29166        con = 1 - this.es * Math.pow(sin_phi, 2);
29167        al = al / Math.sqrt(con);
29168        var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);
29169
29170        x = this.a * (this.k0 * al * (1 +
29171          als / 6 * (1 - t + c +
29172          als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +
29173          als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +
29174          this.x0;
29175
29176        y = this.a * (this.k0 * (ml - this.ml0 +
29177          sin_phi * delta_lon * al / 2 * (1 +
29178          als / 12 * (5 - t + 9 * c + 4 * cs +
29179          als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +
29180          als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +
29181          this.y0;
29182      }
29183
29184      p.x = x;
29185      p.y = y;
29186
29187      return p;
29188    }
29189
29190    /**
29191        Transverse Mercator Inverse  -  x/y to long/lat
29192      */
29193    function inverse$2(p) {
29194      var con, phi;
29195      var lat, lon;
29196      var x = (p.x - this.x0) * (1 / this.a);
29197      var y = (p.y - this.y0) * (1 / this.a);
29198
29199      if (!this.es) {
29200        var f = Math.exp(x / this.k0);
29201        var g = 0.5 * (f - 1 / f);
29202        var temp = this.lat0 + y / this.k0;
29203        var h = Math.cos(temp);
29204        con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));
29205        lat = Math.asin(con);
29206
29207        if (y < 0) {
29208          lat = -lat;
29209        }
29210
29211        if ((g === 0) && (h === 0)) {
29212          lon = 0;
29213        }
29214        else {
29215          lon = adjust_lon(Math.atan2(g, h) + this.long0);
29216        }
29217      }
29218      else { // ellipsoidal form
29219        con = this.ml0 + y / this.k0;
29220        phi = pj_inv_mlfn(con, this.es, this.en);
29221
29222        if (Math.abs(phi) < HALF_PI) {
29223          var sin_phi = Math.sin(phi);
29224          var cos_phi = Math.cos(phi);
29225          var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;
29226          var c = this.ep2 * Math.pow(cos_phi, 2);
29227          var cs = Math.pow(c, 2);
29228          var t = Math.pow(tan_phi, 2);
29229          var ts = Math.pow(t, 2);
29230          con = 1 - this.es * Math.pow(sin_phi, 2);
29231          var d = x * Math.sqrt(con) / this.k0;
29232          var ds = Math.pow(d, 2);
29233          con = con * tan_phi;
29234
29235          lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -
29236            ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -
29237            ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -
29238            ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));
29239
29240          lon = adjust_lon(this.long0 + (d * (1 -
29241            ds / 6 * (1 + 2 * t + c -
29242            ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -
29243            ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));
29244        }
29245        else {
29246          lat = HALF_PI * sign(y);
29247          lon = 0;
29248        }
29249      }
29250
29251      p.x = lon;
29252      p.y = lat;
29253
29254      return p;
29255    }
29256
29257    var names$3 = ["Fast_Transverse_Mercator", "Fast Transverse Mercator"];
29258    var tmerc = {
29259      init: init$2,
29260      forward: forward$2,
29261      inverse: inverse$2,
29262      names: names$3
29263    };
29264
29265    var sinh = function(x) {
29266      var r = Math.exp(x);
29267      r = (r - 1 / r) / 2;
29268      return r;
29269    };
29270
29271    var hypot = function(x, y) {
29272      x = Math.abs(x);
29273      y = Math.abs(y);
29274      var a = Math.max(x, y);
29275      var b = Math.min(x, y) / (a ? a : 1);
29276
29277      return a * Math.sqrt(1 + Math.pow(b, 2));
29278    };
29279
29280    var log1py = function(x) {
29281      var y = 1 + x;
29282      var z = y - 1;
29283
29284      return z === 0 ? x : x * Math.log(y) / z;
29285    };
29286
29287    var asinhy = function(x) {
29288      var y = Math.abs(x);
29289      y = log1py(y * (1 + y / (hypot(1, y) + 1)));
29290
29291      return x < 0 ? -y : y;
29292    };
29293
29294    var gatg = function(pp, B) {
29295      var cos_2B = 2 * Math.cos(2 * B);
29296      var i = pp.length - 1;
29297      var h1 = pp[i];
29298      var h2 = 0;
29299      var h;
29300
29301      while (--i >= 0) {
29302        h = -h2 + cos_2B * h1 + pp[i];
29303        h2 = h1;
29304        h1 = h;
29305      }
29306
29307      return (B + h * Math.sin(2 * B));
29308    };
29309
29310    var clens = function(pp, arg_r) {
29311      var r = 2 * Math.cos(arg_r);
29312      var i = pp.length - 1;
29313      var hr1 = pp[i];
29314      var hr2 = 0;
29315      var hr;
29316
29317      while (--i >= 0) {
29318        hr = -hr2 + r * hr1 + pp[i];
29319        hr2 = hr1;
29320        hr1 = hr;
29321      }
29322
29323      return Math.sin(arg_r) * hr;
29324    };
29325
29326    var cosh = function(x) {
29327      var r = Math.exp(x);
29328      r = (r + 1 / r) / 2;
29329      return r;
29330    };
29331
29332    var clens_cmplx = function(pp, arg_r, arg_i) {
29333      var sin_arg_r = Math.sin(arg_r);
29334      var cos_arg_r = Math.cos(arg_r);
29335      var sinh_arg_i = sinh(arg_i);
29336      var cosh_arg_i = cosh(arg_i);
29337      var r = 2 * cos_arg_r * cosh_arg_i;
29338      var i = -2 * sin_arg_r * sinh_arg_i;
29339      var j = pp.length - 1;
29340      var hr = pp[j];
29341      var hi1 = 0;
29342      var hr1 = 0;
29343      var hi = 0;
29344      var hr2;
29345      var hi2;
29346
29347      while (--j >= 0) {
29348        hr2 = hr1;
29349        hi2 = hi1;
29350        hr1 = hr;
29351        hi1 = hi;
29352        hr = -hr2 + r * hr1 - i * hi1 + pp[j];
29353        hi = -hi2 + i * hr1 + r * hi1;
29354      }
29355
29356      r = sin_arg_r * cosh_arg_i;
29357      i = cos_arg_r * sinh_arg_i;
29358
29359      return [r * hr - i * hi, r * hi + i * hr];
29360    };
29361
29362    // Heavily based on this etmerc projection implementation
29363    // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js
29364
29365    function init$3() {
29366      if (!this.approx && (isNaN(this.es) || this.es <= 0)) {
29367        throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');
29368      }
29369      if (this.approx) {
29370        // When '+approx' is set, use tmerc instead
29371        tmerc.init.apply(this);
29372        this.forward = tmerc.forward;
29373        this.inverse = tmerc.inverse;
29374      }
29375
29376      this.x0 = this.x0 !== undefined ? this.x0 : 0;
29377      this.y0 = this.y0 !== undefined ? this.y0 : 0;
29378      this.long0 = this.long0 !== undefined ? this.long0 : 0;
29379      this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;
29380
29381      this.cgb = [];
29382      this.cbg = [];
29383      this.utg = [];
29384      this.gtu = [];
29385
29386      var f = this.es / (1 + Math.sqrt(1 - this.es));
29387      var n = f / (2 - f);
29388      var np = n;
29389
29390      this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));
29391      this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));
29392
29393      np = np * n;
29394      this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));
29395      this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));
29396
29397      np = np * n;
29398      this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));
29399      this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));
29400
29401      np = np * n;
29402      this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));
29403      this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));
29404
29405      np = np * n;
29406      this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));
29407      this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));
29408
29409      np = np * n;
29410      this.cgb[5] = np * (601676 / 22275);
29411      this.cbg[5] = np * (444337 / 155925);
29412
29413      np = Math.pow(n, 2);
29414      this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));
29415
29416      this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));
29417      this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));
29418
29419      this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));
29420      this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));
29421
29422      np = np * n;
29423      this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));
29424      this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));
29425
29426      np = np * n;
29427      this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));
29428      this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));
29429
29430      np = np * n;
29431      this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));
29432      this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));
29433
29434      np = np * n;
29435      this.utg[5] = np * (-20648693 / 638668800);
29436      this.gtu[5] = np * (212378941 / 319334400);
29437
29438      var Z = gatg(this.cbg, this.lat0);
29439      this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));
29440    }
29441
29442    function forward$3(p) {
29443      var Ce = adjust_lon(p.x - this.long0);
29444      var Cn = p.y;
29445
29446      Cn = gatg(this.cbg, Cn);
29447      var sin_Cn = Math.sin(Cn);
29448      var cos_Cn = Math.cos(Cn);
29449      var sin_Ce = Math.sin(Ce);
29450      var cos_Ce = Math.cos(Ce);
29451
29452      Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);
29453      Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));
29454      Ce = asinhy(Math.tan(Ce));
29455
29456      var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);
29457
29458      Cn = Cn + tmp[0];
29459      Ce = Ce + tmp[1];
29460
29461      var x;
29462      var y;
29463
29464      if (Math.abs(Ce) <= 2.623395162778) {
29465        x = this.a * (this.Qn * Ce) + this.x0;
29466        y = this.a * (this.Qn * Cn + this.Zb) + this.y0;
29467      }
29468      else {
29469        x = Infinity;
29470        y = Infinity;
29471      }
29472
29473      p.x = x;
29474      p.y = y;
29475
29476      return p;
29477    }
29478
29479    function inverse$3(p) {
29480      var Ce = (p.x - this.x0) * (1 / this.a);
29481      var Cn = (p.y - this.y0) * (1 / this.a);
29482
29483      Cn = (Cn - this.Zb) / this.Qn;
29484      Ce = Ce / this.Qn;
29485
29486      var lon;
29487      var lat;
29488
29489      if (Math.abs(Ce) <= 2.623395162778) {
29490        var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);
29491
29492        Cn = Cn + tmp[0];
29493        Ce = Ce + tmp[1];
29494        Ce = Math.atan(sinh(Ce));
29495
29496        var sin_Cn = Math.sin(Cn);
29497        var cos_Cn = Math.cos(Cn);
29498        var sin_Ce = Math.sin(Ce);
29499        var cos_Ce = Math.cos(Ce);
29500
29501        Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));
29502        Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);
29503
29504        lon = adjust_lon(Ce + this.long0);
29505        lat = gatg(this.cgb, Cn);
29506      }
29507      else {
29508        lon = Infinity;
29509        lat = Infinity;
29510      }
29511
29512      p.x = lon;
29513      p.y = lat;
29514
29515      return p;
29516    }
29517
29518    var names$4 = ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc", "Transverse_Mercator", "Transverse Mercator", "Gauss Kruger", "Gauss_Kruger", "tmerc"];
29519    var etmerc = {
29520      init: init$3,
29521      forward: forward$3,
29522      inverse: inverse$3,
29523      names: names$4
29524    };
29525
29526    var adjust_zone = function(zone, lon) {
29527      if (zone === undefined) {
29528        zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;
29529
29530        if (zone < 0) {
29531          return 0;
29532        } else if (zone > 60) {
29533          return 60;
29534        }
29535      }
29536      return zone;
29537    };
29538
29539    var dependsOn = 'etmerc';
29540    function init$4() {
29541      var zone = adjust_zone(this.zone, this.long0);
29542      if (zone === undefined) {
29543        throw new Error('unknown utm zone');
29544      }
29545      this.lat0 = 0;
29546      this.long0 =  ((6 * Math.abs(zone)) - 183) * D2R;
29547      this.x0 = 500000;
29548      this.y0 = this.utmSouth ? 10000000 : 0;
29549      this.k0 = 0.9996;
29550
29551      etmerc.init.apply(this);
29552      this.forward = etmerc.forward;
29553      this.inverse = etmerc.inverse;
29554    }
29555
29556    var names$5 = ["Universal Transverse Mercator System", "utm"];
29557    var utm = {
29558      init: init$4,
29559      names: names$5,
29560      dependsOn: dependsOn
29561    };
29562
29563    var srat = function(esinp, exp) {
29564      return (Math.pow((1 - esinp) / (1 + esinp), exp));
29565    };
29566
29567    var MAX_ITER$1 = 20;
29568    function init$6() {
29569      var sphi = Math.sin(this.lat0);
29570      var cphi = Math.cos(this.lat0);
29571      cphi *= cphi;
29572      this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);
29573      this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));
29574      this.phic0 = Math.asin(sphi / this.C);
29575      this.ratexp = 0.5 * this.C * this.e;
29576      this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));
29577    }
29578
29579    function forward$5(p) {
29580      var lon = p.x;
29581      var lat = p.y;
29582
29583      p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;
29584      p.x = this.C * lon;
29585      return p;
29586    }
29587
29588    function inverse$5(p) {
29589      var DEL_TOL = 1e-14;
29590      var lon = p.x / this.C;
29591      var lat = p.y;
29592      var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);
29593      for (var i = MAX_ITER$1; i > 0; --i) {
29594        lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;
29595        if (Math.abs(lat - p.y) < DEL_TOL) {
29596          break;
29597        }
29598        p.y = lat;
29599      }
29600      /* convergence failed */
29601      if (!i) {
29602        return null;
29603      }
29604      p.x = lon;
29605      p.y = lat;
29606      return p;
29607    }
29608
29609    var names$7 = ["gauss"];
29610    var gauss = {
29611      init: init$6,
29612      forward: forward$5,
29613      inverse: inverse$5,
29614      names: names$7
29615    };
29616
29617    function init$5() {
29618      gauss.init.apply(this);
29619      if (!this.rc) {
29620        return;
29621      }
29622      this.sinc0 = Math.sin(this.phic0);
29623      this.cosc0 = Math.cos(this.phic0);
29624      this.R2 = 2 * this.rc;
29625      if (!this.title) {
29626        this.title = "Oblique Stereographic Alternative";
29627      }
29628    }
29629
29630    function forward$4(p) {
29631      var sinc, cosc, cosl, k;
29632      p.x = adjust_lon(p.x - this.long0);
29633      gauss.forward.apply(this, [p]);
29634      sinc = Math.sin(p.y);
29635      cosc = Math.cos(p.y);
29636      cosl = Math.cos(p.x);
29637      k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);
29638      p.x = k * cosc * Math.sin(p.x);
29639      p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);
29640      p.x = this.a * p.x + this.x0;
29641      p.y = this.a * p.y + this.y0;
29642      return p;
29643    }
29644
29645    function inverse$4(p) {
29646      var sinc, cosc, lon, lat, rho;
29647      p.x = (p.x - this.x0) / this.a;
29648      p.y = (p.y - this.y0) / this.a;
29649
29650      p.x /= this.k0;
29651      p.y /= this.k0;
29652      if ((rho = hypot(p.x, p.y))) {
29653        var c = 2 * Math.atan2(rho, this.R2);
29654        sinc = Math.sin(c);
29655        cosc = Math.cos(c);
29656        lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);
29657        lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);
29658      }
29659      else {
29660        lat = this.phic0;
29661        lon = 0;
29662      }
29663
29664      p.x = lon;
29665      p.y = lat;
29666      gauss.inverse.apply(this, [p]);
29667      p.x = adjust_lon(p.x + this.long0);
29668      return p;
29669    }
29670
29671    var names$6 = ["Stereographic_North_Pole", "Oblique_Stereographic", "sterea","Oblique Stereographic Alternative","Double_Stereographic"];
29672    var sterea = {
29673      init: init$5,
29674      forward: forward$4,
29675      inverse: inverse$4,
29676      names: names$6
29677    };
29678
29679    function ssfn_(phit, sinphi, eccen) {
29680      sinphi *= eccen;
29681      return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));
29682    }
29683
29684    function init$7() {
29685
29686      // setting default parameters
29687      this.x0 = this.x0 || 0;
29688      this.y0 = this.y0 || 0;
29689      this.lat0 = this.lat0 || 0;
29690      this.long0 = this.long0 || 0;
29691
29692      this.coslat0 = Math.cos(this.lat0);
29693      this.sinlat0 = Math.sin(this.lat0);
29694      if (this.sphere) {
29695        if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {
29696          this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));
29697        }
29698      }
29699      else {
29700        if (Math.abs(this.coslat0) <= EPSLN) {
29701          if (this.lat0 > 0) {
29702            //North pole
29703            //trace('stere:north pole');
29704            this.con = 1;
29705          }
29706          else {
29707            //South pole
29708            //trace('stere:south pole');
29709            this.con = -1;
29710          }
29711        }
29712        this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));
29713        if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN && Math.abs(Math.cos(this.lat_ts)) > EPSLN) {
29714          // When k0 is 1 (default value) and lat_ts is a vaild number and lat0 is at a pole and lat_ts is not at a pole
29715          // Recalculate k0 using formula 21-35 from p161 of Snyder, 1987
29716          this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));
29717        }
29718        this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);
29719        this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;
29720        this.cosX0 = Math.cos(this.X0);
29721        this.sinX0 = Math.sin(this.X0);
29722      }
29723    }
29724
29725    // Stereographic forward equations--mapping lat,long to x,y
29726    function forward$6(p) {
29727      var lon = p.x;
29728      var lat = p.y;
29729      var sinlat = Math.sin(lat);
29730      var coslat = Math.cos(lat);
29731      var A, X, sinX, cosX, ts, rh;
29732      var dlon = adjust_lon(lon - this.long0);
29733
29734      if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {
29735        //case of the origine point
29736        //trace('stere:this is the origin point');
29737        p.x = NaN;
29738        p.y = NaN;
29739        return p;
29740      }
29741      if (this.sphere) {
29742        //trace('stere:sphere case');
29743        A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));
29744        p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;
29745        p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;
29746        return p;
29747      }
29748      else {
29749        X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;
29750        cosX = Math.cos(X);
29751        sinX = Math.sin(X);
29752        if (Math.abs(this.coslat0) <= EPSLN) {
29753          ts = tsfnz(this.e, lat * this.con, this.con * sinlat);
29754          rh = 2 * this.a * this.k0 * ts / this.cons;
29755          p.x = this.x0 + rh * Math.sin(lon - this.long0);
29756          p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);
29757          //trace(p.toString());
29758          return p;
29759        }
29760        else if (Math.abs(this.sinlat0) < EPSLN) {
29761          //Eq
29762          //trace('stere:equateur');
29763          A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));
29764          p.y = A * sinX;
29765        }
29766        else {
29767          //other case
29768          //trace('stere:normal case');
29769          A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));
29770          p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;
29771        }
29772        p.x = A * cosX * Math.sin(dlon) + this.x0;
29773      }
29774      //trace(p.toString());
29775      return p;
29776    }
29777
29778    //* Stereographic inverse equations--mapping x,y to lat/long
29779    function inverse$6(p) {
29780      p.x -= this.x0;
29781      p.y -= this.y0;
29782      var lon, lat, ts, ce, Chi;
29783      var rh = Math.sqrt(p.x * p.x + p.y * p.y);
29784      if (this.sphere) {
29785        var c = 2 * Math.atan(rh / (2 * this.a * this.k0));
29786        lon = this.long0;
29787        lat = this.lat0;
29788        if (rh <= EPSLN) {
29789          p.x = lon;
29790          p.y = lat;
29791          return p;
29792        }
29793        lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);
29794        if (Math.abs(this.coslat0) < EPSLN) {
29795          if (this.lat0 > 0) {
29796            lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));
29797          }
29798          else {
29799            lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));
29800          }
29801        }
29802        else {
29803          lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));
29804        }
29805        p.x = lon;
29806        p.y = lat;
29807        return p;
29808      }
29809      else {
29810        if (Math.abs(this.coslat0) <= EPSLN) {
29811          if (rh <= EPSLN) {
29812            lat = this.lat0;
29813            lon = this.long0;
29814            p.x = lon;
29815            p.y = lat;
29816            //trace(p.toString());
29817            return p;
29818          }
29819          p.x *= this.con;
29820          p.y *= this.con;
29821          ts = rh * this.cons / (2 * this.a * this.k0);
29822          lat = this.con * phi2z(this.e, ts);
29823          lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));
29824        }
29825        else {
29826          ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));
29827          lon = this.long0;
29828          if (rh <= EPSLN) {
29829            Chi = this.X0;
29830          }
29831          else {
29832            Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);
29833            lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));
29834          }
29835          lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));
29836        }
29837      }
29838      p.x = lon;
29839      p.y = lat;
29840
29841      //trace(p.toString());
29842      return p;
29843
29844    }
29845
29846    var names$8 = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)", "Polar_Stereographic"];
29847    var stere = {
29848      init: init$7,
29849      forward: forward$6,
29850      inverse: inverse$6,
29851      names: names$8,
29852      ssfn_: ssfn_
29853    };
29854
29855    /*
29856      references:
29857        Formules et constantes pour le Calcul pour la
29858        projection cylindrique conforme à axe oblique et pour la transformation entre
29859        des systèmes de référence.
29860        http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf
29861      */
29862
29863    function init$8() {
29864      var phy0 = this.lat0;
29865      this.lambda0 = this.long0;
29866      var sinPhy0 = Math.sin(phy0);
29867      var semiMajorAxis = this.a;
29868      var invF = this.rf;
29869      var flattening = 1 / invF;
29870      var e2 = 2 * flattening - Math.pow(flattening, 2);
29871      var e = this.e = Math.sqrt(e2);
29872      this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));
29873      this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));
29874      this.b0 = Math.asin(sinPhy0 / this.alpha);
29875      var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));
29876      var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));
29877      var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));
29878      this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;
29879    }
29880
29881    function forward$7(p) {
29882      var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));
29883      var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));
29884      var S = -this.alpha * (Sa1 + Sa2) + this.K;
29885
29886      // spheric latitude
29887      var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);
29888
29889      // spheric longitude
29890      var I = this.alpha * (p.x - this.lambda0);
29891
29892      // psoeudo equatorial rotation
29893      var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.
29893cos(this.b0) * Math.cos(I)));
29894
29895      var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));
29896
29897      p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;
29898      p.x = this.R * rotI + this.x0;
29899      return p;
29900    }
29901
29902    function inverse$7(p) {
29903      var Y = p.x - this.x0;
29904      var X = p.y - this.y0;
29905
29906      var rotI = Y / this.R;
29907      var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);
29908
29909      var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));
29910      var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));
29911
29912      var lambda = this.lambda0 + I / this.alpha;
29913
29914      var S = 0;
29915      var phy = b;
29916      var prevPhy = -1000;
29917      var iteration = 0;
29918      while (Math.abs(phy - prevPhy) > 0.0000001) {
29919        if (++iteration > 20) {
29920          //...reportError("omercFwdInfinity");
29921          return;
29922        }
29923        //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));
29924        S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));
29925        prevPhy = phy;
29926        phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;
29927      }
29928
29929      p.x = lambda;
29930      p.y = phy;
29931      return p;
29932    }
29933
29934    var names$9 = ["somerc"];
29935    var somerc = {
29936      init: init$8,
29937      forward: forward$7,
29938      inverse: inverse$7,
29939      names: names$9
29940    };
29941
29942    var TOL = 1e-7;
29943
29944    function isTypeA(P) {
29945      var typeAProjections = ['Hotine_Oblique_Mercator','Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];
29946      var projectionName = typeof P.PROJECTION === "object" ? Object.keys(P.PROJECTION)[0] : P.PROJECTION;
29947      
29948      return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1;
29949    }
29950
29951
29952    /* Initialize the Oblique Mercator  projection
29953        ------------------------------------------*/
29954    function init$9() {  
29955      var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,
29956        gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0;
29957      
29958      // only Type A uses the no_off or no_uoff property
29959      // https://github.com/OSGeo/proj.4/issues/104
29960      this.no_off = isTypeA(this);
29961      this.no_rot = 'no_rot' in this;
29962      
29963      var alp = false;
29964      if ("alpha" in this) {
29965        alp = true;
29966      }
29967
29968      var gam = false;
29969      if ("rectified_grid_angle" in this) {
29970        gam = true;
29971      }
29972
29973      if (alp) {
29974        alpha_c = this.alpha;
29975      }
29976      
29977      if (gam) {
29978        gamma = (this.rectified_grid_angle * D2R);
29979      }
29980      
29981      if (alp || gam) {
29982        lamc = this.longc;
29983      } else {
29984        lam1 = this.long1;
29985        phi1 = this.lat1;
29986        lam2 = this.long2;
29987        phi2 = this.lat2;
29988        
29989        if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL ||
29990            Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL ||
29991            Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {
29992          throw new Error();
29993        }
29994      }
29995      
29996      var one_es = 1.0 - this.es;
29997      com = Math.sqrt(one_es);
29998      
29999      if (Math.abs(this.lat0) > EPSLN) {
30000        sinph0 = Math.sin(this.lat0);
30001        cosph0 = Math.cos(this.lat0);
30002        con = 1 - this.es * sinph0 * sinph0;
30003        this.B = cosph0 * cosph0;
30004        this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);
30005        this.A = this.B * this.k0 * com / con;
30006        D = this.B * com / (cosph0 * Math.sqrt(con));
30007        F = D * D -1;
30008        
30009        if (F <= 0) {
30010          F = 0;
30011        } else {
30012          F = Math.sqrt(F);
30013          if (this.lat0 < 0) {
30014            F = -F;
30015          }
30016        }
30017        
30018        this.E = F += D;
30019        this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);
30020      } else {
30021        this.B = 1 / com;
30022        this.A = this.k0;
30023        this.E = D = F = 1;
30024      }
30025      
30026      if (alp || gam) {
30027        if (alp) {
30028          gamma0 = Math.asin(Math.sin(alpha_c) / D);
30029          if (!gam) {
30030            gamma = alpha_c;
30031          }
30032        } else {
30033          gamma0 = gamma;
30034          alpha_c = Math.asin(D * Math.sin(gamma0));
30035        }
30036        this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;
30037      } else {
30038        H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);
30039        L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);
30040        F = this.E / H;
30041        p = (L - H) / (L + H);
30042        J = this.E * this.E;
30043        J = (J - L * H) / (J + L * H);
30044        con = lam1 - lam2;
30045        
30046        if (con < -Math.pi) {
30047          lam2 -=TWO_PI;
30048        } else if (con > Math.pi) {
30049          lam2 += TWO_PI;
30050        }
30051        
30052        this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B);
30053        gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0)) / (F - 1 / F));
30054        gamma = alpha_c = Math.asin(D * Math.sin(gamma0));
30055      }
30056      
30057      this.singam = Math.sin(gamma0);
30058      this.cosgam = Math.cos(gamma0);
30059      this.sinrot = Math.sin(gamma);
30060      this.cosrot = Math.cos(gamma);
30061      
30062      this.rB = 1 / this.B;
30063      this.ArB = this.A * this.rB;
30064      this.BrA = 1 / this.ArB;
30065      if (this.no_off) {
30066        this.u_0 = 0;
30067      } else {
30068        this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));
30069        
30070        if (this.lat0 < 0) {
30071          this.u_0 = - this.u_0;
30072        }  
30073      }
30074        
30075      F = 0.5 * gamma0;
30076      this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));
30077      this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));
30078    }
30079
30080
30081    /* Oblique Mercator forward equations--mapping lat,long to x,y
30082        ----------------------------------------------------------*/
30083    function forward$8(p) {
30084      var coords = {};
30085      var S, T, U, V, W, temp, u, v;
30086      p.x = p.x - this.lam0;
30087      
30088      if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {
30089        W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);
30090        
30091        temp = 1 / W;
30092        S = 0.5 * (W - temp);
30093        T = 0.5 * (W + temp);
30094        V = Math.sin(this.B * p.x);
30095        U = (S * this.singam - V * this.cosgam) / T;
30096            
30097        if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {
30098          throw new Error();
30099        }
30100        
30101        v = 0.5 * this.ArB * Math.log((1 - U)/(1 + U));
30102        temp = Math.cos(this.B * p.x);
30103        
30104        if (Math.abs(temp) < TOL) {
30105          u = this.A * p.x;
30106        } else {
30107          u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);
30108        }    
30109      } else {
30110        v = p.y > 0 ? this.v_pole_n : this.v_pole_s;
30111        u = this.ArB * p.y;
30112      }
30113         
30114      if (this.no_rot) {
30115        coords.x = u;
30116        coords.y = v;
30117      } else {
30118        u -= this.u_0;
30119        coords.x = v * this.cosrot + u * this.sinrot;
30120        coords.y = u * this.cosrot - v * this.sinrot;
30121      }
30122      
30123      coords.x = (this.a * coords.x + this.x0);
30124      coords.y = (this.a * coords.y + this.y0);
30125      
30126      return coords;
30127    }
30128
30129    function inverse$8(p) {
30130      var u, v, Qp, Sp, Tp, Vp, Up;
30131      var coords = {};
30132      
30133      p.x = (p.x - this.x0) * (1.0 / this.a);
30134      p.y = (p.y - this.y0) * (1.0 / this.a);
30135
30136      if (this.no_rot) {
30137        v = p.y;
30138        u = p.x;
30139      } else {
30140        v = p.x * this.cosrot - p.y * this.sinrot;
30141        u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;
30142      }
30143      
30144      Qp = Math.exp(-this.BrA * v);
30145      Sp = 0.5 * (Qp - 1 / Qp);
30146      Tp = 0.5 * (Qp + 1 / Qp);
30147      Vp = Math.sin(this.BrA * u);
30148      Up = (Vp * this.cosgam + Sp * this.singam) / Tp;
30149      
30150      if (Math.abs(Math.abs(Up) - 1) < EPSLN) {
30151        coords.x = 0;
30152        coords.y = Up < 0 ? -HALF_PI : HALF_PI;
30153      } else {
30154        coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));
30155        coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));
30156        
30157        if (coords.y === Infinity) {
30158          throw new Error();
30159        }
30160            
30161        coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));
30162      }
30163      
30164      coords.x += this.lam0;
30165      
30166      return coords;
30167    }
30168
30169    var names$10 = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "Hotine_Oblique_Mercator_Two_Point_Natural_Origin", "Hotine_Oblique_Mercator_Azimuth_Center", "Oblique_Mercator", "omerc"];
30170    var omerc = {
30171      init: init$9,
30172      forward: forward$8,
30173      inverse: inverse$8,
30174      names: names$10
30175    };
30176
30177    function init$10() {
30178      
30179      //double lat0;                    /* the reference latitude               */
30180      //double long0;                   /* the reference longitude              */
30181      //double lat1;                    /* first standard parallel              */
30182      //double lat2;                    /* second standard parallel             */
30183      //double r_maj;                   /* major axis                           */
30184      //double r_min;                   /* minor axis                           */
30185      //double false_east;              /* x offset in meters                   */
30186      //double false_north;             /* y offset in meters                   */
30187      
30188      //the above value can be set with proj4.defs
30189      //example: proj4.defs("EPSG:2154","+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
30190
30191      if (!this.lat2) {
30192        this.lat2 = this.lat1;
30193      } //if lat2 is not defined
30194      if (!this.k0) {
30195        this.k0 = 1;
30196      }
30197      this.x0 = this.x0 || 0;
30198      this.y0 = this.y0 || 0;
30199      // Standard Parallels cannot be equal and on opposite sides of the equator
30200      if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
30201        return;
30202      }
30203
30204      var temp = this.b / this.a;
30205      this.e = Math.sqrt(1 - temp * temp);
30206
30207      var sin1 = Math.sin(this.lat1);
30208      var cos1 = Math.cos(this.lat1);
30209      var ms1 = msfnz(this.e, sin1, cos1);
30210      var ts1 = tsfnz(this.e, this.lat1, sin1);
30211
30212      var sin2 = Math.sin(this.lat2);
30213      var cos2 = Math.cos(this.lat2);
30214      var ms2 = msfnz(this.e, sin2, cos2);
30215      var ts2 = tsfnz(this.e, this.lat2, sin2);
30216
30217      var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));
30218
30219      if (Math.abs(this.lat1 - this.lat2) > EPSLN) {
30220        this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);
30221      }
30222      else {
30223        this.ns = sin1;
30224      }
30225      if (isNaN(this.ns)) {
30226        this.ns = sin1;
30227      }
30228      this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));
30229      this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);
30230      if (!this.title) {
30231        this.title = "Lambert Conformal Conic";
30232      }
30233    }
30234
30235    // Lambert Conformal conic forward equations--mapping lat,long to x,y
30236    // -----------------------------------------------------------------
30237    function forward$9(p) {
30238
30239      var lon = p.x;
30240      var lat = p.y;
30241
30242      // singular cases :
30243      if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {
30244        lat = sign(lat) * (HALF_PI - 2 * EPSLN);
30245      }
30246
30247      var con = Math.abs(Math.abs(lat) - HALF_PI);
30248      var ts, rh1;
30249      if (con > EPSLN) {
30250        ts = tsfnz(this.e, lat, Math.sin(lat));
30251        rh1 = this.a * this.f0 * Math.pow(ts, this.ns);
30252      }
30253      else {
30254        con = lat * this.ns;
30255        if (con <= 0) {
30256          return null;
30257        }
30258        rh1 = 0;
30259      }
30260      var theta = this.ns * adjust_lon(lon - this.long0);
30261      p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;
30262      p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;
30263
30264      return p;
30265    }
30266
30267    // Lambert Conformal Conic inverse equations--mapping x,y to lat/long
30268    // -----------------------------------------------------------------
30269    function inverse$9(p) {
30270
30271      var rh1, con, ts;
30272      var lat, lon;
30273      var x = (p.x - this.x0) / this.k0;
30274      var y = (this.rh - (p.y - this.y0) / this.k0);
30275      if (this.ns > 0) {
30276        rh1 = Math.sqrt(x * x + y * y);
30277        con = 1;
30278      }
30279      else {
30280        rh1 = -Math.sqrt(x * x + y * y);
30281        con = -1;
30282      }
30283      var theta = 0;
30284      if (rh1 !== 0) {
30285        theta = Math.atan2((con * x), (con * y));
30286      }
30287      if ((rh1 !== 0) || (this.ns > 0)) {
30288        con = 1 / this.ns;
30289        ts = Math.pow((rh1 / (this.a * this.f0)), con);
30290        lat = phi2z(this.e, ts);
30291        if (lat === -9999) {
30292          return null;
30293        }
30294      }
30295      else {
30296        lat = -HALF_PI;
30297      }
30298      lon = adjust_lon(theta / this.ns + this.long0);
30299
30300      p.x = lon;
30301      p.y = lat;
30302      return p;
30303    }
30304
30305    var names$11 = [
30306      "Lambert Tangential Conformal Conic Projection",
30307      "Lambert_Conformal_Conic",
30308      "Lambert_Conformal_Conic_1SP",
30309      "Lambert_Conformal_Conic_2SP",
30310      "lcc",
30311      "Lambert Conic Conformal (1SP)",
30312      "Lambert Conic Conformal (2SP)"
30313    ];
30314
30315    var lcc = {
30316      init: init$10,
30317      forward: forward$9,
30318      inverse: inverse$9,
30319      names: names$11
30320    };
30321
30322    function init$11() {
30323      this.a = 6377397.155;
30324      this.es = 0.006674372230614;
30325      this.e = Math.sqrt(this.es);
30326      if (!this.lat0) {
30327        this.lat0 = 0.863937979737193;
30328      }
30329      if (!this.long0) {
30330        this.long0 = 0.7417649320975901 - 0.308341501185665;
30331      }
30332      /* if scale not set default to 0.9999 */
30333      if (!this.k0) {
30334        this.k0 = 0.9999;
30335      }
30336      this.s45 = 0.785398163397448; /* 45 */
30337      this.s90 = 2 * this.s45;
30338      this.fi0 = this.lat0;
30339      this.e2 = this.es;
30340      this.e = Math.sqrt(this.e2);
30341      this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));
30342      this.uq = 1.04216856380474;
30343      this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);
30344      this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);
30345      this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;
30346      this.k1 = this.k0;
30347      this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));
30348      this.s0 = 1.37008346281555;
30349      this.n = Math.sin(this.s0);
30350      this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);
30351      this.ad = this.s90 - this.uq;
30352    }
30353
30354    /* ellipsoid */
30355    /* calculate xy from lat/lon */
30356    /* Constants, identical to inverse transform function */
30357    function forward$10(p) {
30358      var gfi, u, deltav, s, d, eps, ro;
30359      var lon = p.x;
30360      var lat = p.y;
30361      var delta_lon = adjust_lon(lon - this.long0);
30362      /* Transformation */
30363      gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));
30364      u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);
30365      deltav = -delta_lon * this.alfa;
30366      s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));
30367      d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));
30368      eps = this.n * d;
30369      ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);
30370      p.y = ro * Math.cos(eps) / 1;
30371      p.x = ro * Math.sin(eps) / 1;
30372
30373      if (!this.czech) {
30374        p.y *= -1;
30375        p.x *= -1;
30376      }
30377      return (p);
30378    }
30379
30380    /* calculate lat/lon from xy */
30381    function inverse$10(p) {
30382      var u, deltav, s, d, eps, ro, fi1;
30383      var ok;
30384
30385      /* Transformation */
30386      /* revert y, x*/
30387      var tmp = p.x;
30388      p.x = p.y;
30389      p.y = tmp;
30390      if (!this.czech) {
30391        p.y *= -1;
30392        p.x *= -1;
30393      }
30394      ro = Math.sqrt(p.x * p.x + p.y * p.y);
30395      eps = Math.atan2(p.y, p.x);
30396      d = eps / Math.sin(this.s0);
30397      s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);
30398      u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));
30399      deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));
30400      p.x = this.long0 - deltav / this.alfa;
30401      fi1 = u;
30402      ok = 0;
30403      var iter = 0;
30404      do {
30405        p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);
30406        if (Math.abs(fi1 - p.y) < 0.0000000001) {
30407          ok = 1;
30408        }
30409        fi1 = p.y;
30410        iter += 1;
30411      } while (ok === 0 && iter < 15);
30412      if (iter >= 15) {
30413        return null;
30414      }
30415
30416      return (p);
30417    }
30418
30419    var names$12 = ["Krovak", "krovak"];
30420    var krovak = {
30421      init: init$11,
30422      forward: forward$10,
30423      inverse: inverse$10,
30424      names: names$12
30425    };
30426
30427    var mlfn = function(e0, e1, e2, e3, phi) {
30428      return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));
30429    };
30430
30431    var e0fn = function(x) {
30432      return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));
30433    };
30434
30435    var e1fn = function(x) {
30436      return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));
30437    };
30438
30439    var e2fn = function(x) {
30440      return (0.05859375 * x * x * (1 + 0.75 * x));
30441    };
30442
30443    var e3fn = function(x) {
30444      return (x * x * x * (35 / 3072));
30445    };
30446
30447    var gN = function(a, e, sinphi) {
30448      var temp = e * sinphi;
30449      return a / Math.sqrt(1 - temp * temp);
30450    };
30451
30452    var adjust_lat = function(x) {
30453      return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));
30454    };
30455
30456    var imlfn = function(ml, e0, e1, e2, e3) {
30457      var phi;
30458      var dphi;
30459
30460      phi = ml / e0;
30461      for (var i = 0; i < 15; i++) {
30462        dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));
30463        phi += dphi;
30464        if (Math.abs(dphi) <= 0.0000000001) {
30465          return phi;
30466        }
30467      }
30468
30469      //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations");
30470      return NaN;
30471    };
30472
30473    function init$12() {
30474      if (!this.sphere) {
30475        this.e0 = e0fn(this.es);
30476        this.e1 = e1fn(this.es);
30477        this.e2 = e2fn(this.es);
30478        this.e3 = e3fn(this.es);
30479        this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);
30480      }
30481    }
30482
30483    /* Cassini forward equations--mapping lat,long to x,y
30484      -----------------------------------------------------------------------*/
30485    function forward$11(p) {
30486
30487      /* Forward equations
30488          -----------------*/
30489      var x, y;
30490      var lam = p.x;
30491      var phi = p.y;
30492      lam = adjust_lon(lam - this.long0);
30493
30494      if (this.sphere) {
30495        x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));
30496        y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);
30497      }
30498      else {
30499        //ellipsoid
30500        var sinphi = Math.sin(phi);
30501        var cosphi = Math.cos(phi);
30502        var nl = gN(this.a, this.e, sinphi);
30503        var tl = Math.tan(phi) * Math.tan(phi);
30504        var al = lam * Math.cos(phi);
30505        var asq = al * al;
30506        var cl = this.es * cosphi * cosphi / (1 - this.es);
30507        var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);
30508
30509        x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));
30510        y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);
30511
30512
30513      }
30514
30515      p.x = x + this.x0;
30516      p.y = y + this.y0;
30517      return p;
30518    }
30519
30520    /* Inverse equations
30521      -----------------*/
30522    function inverse$11(p) {
30523      p.x -= this.x0;
30524      p.y -= this.y0;
30525      var x = p.x / this.a;
30526      var y = p.y / this.a;
30527      var phi, lam;
30528
30529      if (this.sphere) {
30530        var dd = y + this.lat0;
30531        phi = Math.asin(Math.sin(dd) * Math.cos(x));
30532        lam = Math.atan2(Math.tan(x), Math.cos(dd));
30533      }
30534      else {
30535        /* ellipsoid */
30536        var ml1 = this.ml0 / this.a + y;
30537        var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);
30538        if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {
30539          p.x = this.long0;
30540          p.y = HALF_PI;
30541          if (y < 0) {
30542            p.y *= -1;
30543          }
30544          return p;
30545        }
30546        var nl1 = gN(this.a, this.e, Math.sin(phi1));
30547
30548        var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);
30549        var tl1 = Math.pow(Math.tan(phi1), 2);
30550        var dl = x * this.a / nl1;
30551        var dsq = dl * dl;
30552        phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);
30553        lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);
30554
30555      }
30556
30557      p.x = adjust_lon(lam + this.long0);
30558      p.y = adjust_lat(phi);
30559      return p;
30560
30561    }
30562
30563    var names$13 = ["Cassini", "Cassini_Soldner", "cass"];
30564    var cass = {
30565      init: init$12,
30566      forward: forward$11,
30567      inverse: inverse$11,
30568      names: names$13
30569    };
30570
30571    var qsfnz = function(eccent, sinphi) {
30572      var con;
30573      if (eccent > 1.0e-7) {
30574        con = eccent * sinphi;
30575        return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));
30576      }
30577      else {
30578        return (2 * sinphi);
30579      }
30580    };
30581
30582    /*
30583      reference
30584        "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
30585        The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
30586      */
30587
30588    var S_POLE = 1;
30589
30590    var N_POLE = 2;
30591    var EQUIT = 3;
30592    var OBLIQ = 4;
30593
30594    /* Initialize the Lambert Azimuthal Equal Area projection
30595      ------------------------------------------------------*/
30596    function init$13() {
30597      var t = Math.abs(this.lat0);
30598      if (Math.abs(t - HALF_PI) < EPSLN) {
30599        this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;
30600      }
30601      else if (Math.abs(t) < EPSLN) {
30602        this.mode = this.EQUIT;
30603      }
30604      else {
30605        this.mode = this.OBLIQ;
30606      }
30607      if (this.es > 0) {
30608        var sinphi;
30609
30610        this.qp = qsfnz(this.e, 1);
30611        this.mmf = 0.5 / (1 - this.es);
30612        this.apa = authset(this.es);
30613        switch (this.mode) {
30614        case this.N_POLE:
30615          this.dd = 1;
30616          break;
30617        case this.S_POLE:
30618          this.dd = 1;
30619          break;
30620        case this.EQUIT:
30621          this.rq = Math.sqrt(0.5 * this.qp);
30622          this.dd = 1 / this.rq;
30623          this.xmf = 1;
30624          this.ymf = 0.5 * this.qp;
30625          break;
30626        case this.OBLIQ:
30627          this.rq = Math.sqrt(0.5 * this.qp);
30628          sinphi = Math.sin(this.lat0);
30629          this.sinb1 = qsfnz(this.e, sinphi) / this.qp;
30630          this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);
30631          this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);
30632          this.ymf = (this.xmf = this.rq) / this.dd;
30633          this.xmf *= this.dd;
30634          break;
30635        }
30636      }
30637      else {
30638        if (this.mode === this.OBLIQ) {
30639          this.sinph0 = Math.sin(this.lat0);
30640          this.cosph0 = Math.cos(this.lat0);
30641        }
30642      }
30643    }
30644
30645    /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y
30646      -----------------------------------------------------------------------*/
30647    function forward$12(p) {
30648
30649      /* Forward equations
30650          -----------------*/
30651      var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;
30652      var lam = p.x;
30653      var phi = p.y;
30654
30655      lam = adjust_lon(lam - this.long0);
30656      if (this.sphere) {
30657        sinphi = Math.sin(phi);
30658        cosphi = Math.cos(phi);
30659        coslam = Math.cos(lam);
30660        if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
30661          y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;
30662          if (y <= EPSLN) {
30663            return null;
30664          }
30665          y = Math.sqrt(2 / y);
30666          x = y * cosphi * Math.sin(lam);
30667          y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;
30668        }
30669        else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
30670          if (this.mode === this.N_POLE) {
30671            coslam = -coslam;
30672          }
30673          if (Math.abs(phi + this.lat0) < EPSLN) {
30674            return null;
30675          }
30676          y = FORTPI - phi * 0.5;
30677          y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));
30678          x = y * Math.sin(lam);
30679          y *= coslam;
30680        }
30681      }
30682      else {
30683        sinb = 0;
30684        cosb = 0;
30685        b = 0;
30686        coslam = Math.cos(lam);
30687        sinlam = Math.sin(lam);
30688        sinphi = Math.sin(phi);
30689        q = qsfnz(this.e, sinphi);
30690        if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
30691          sinb = q / this.qp;
30692          cosb = Math.sqrt(1 - sinb * sinb);
30693        }
30694        switch (this.mode) {
30695        case this.OBLIQ:
30696          b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;
30697          break;
30698        case this.EQUIT:
30699          b = 1 + cosb * coslam;
30700          break;
30701        case this.N_POLE:
30702          b = HALF_PI + phi;
30703          q = this.qp - q;
30704          break;
30705        case this.S_POLE:
30706          b = phi - HALF_PI;
30707          q = this.qp + q;
30708          break;
30709        }
30710        if (Math.abs(b) < EPSLN) {
30711          return null;
30712        }
30713        switch (this.mode) {
30714        case this.OBLIQ:
30715        case this.EQUIT:
30716          b = Math.sqrt(2 / b);
30717          if (this.mode === this.OBLIQ) {
30718            y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);
30719          }
30720          else {
30721            y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;
30722          }
30723          x = this.xmf * b * cosb * sinlam;
30724          break;
30725        case this.N_POLE:
30726        case this.S_POLE:
30727          if (q >= 0) {
30728            x = (b = Math.sqrt(q)) * sinlam;
30729            y = coslam * ((this.mode === this.S_POLE) ? b : -b);
30730          }
30731          else {
30732            x = y = 0;
30733          }
30734          break;
30735        }
30736      }
30737
30738      p.x = this.a * x + this.x0;
30739      p.y = this.a * y + this.y0;
30740      return p;
30741    }
30742
30743    /* Inverse equations
30744      -----------------*/
30745    function inverse$12(p) {
30746      p.x -= this.x0;
30747      p.y -= this.y0;
30748      var x = p.x / this.a;
30749      var y = p.y / this.a;
30750      var lam, phi, cCe, sCe, q, rho, ab;
30751      if (this.sphere) {
30752        var cosz = 0,
30753          rh, sinz = 0;
30754
30755        rh = Math.sqrt(x * x + y * y);
30756        phi = rh * 0.5;
30757        if (phi > 1) {
30758          return null;
30759        }
30760        phi = 2 * Math.asin(phi);
30761        if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
30762          sinz = Math.sin(phi);
30763          cosz = Math.cos(phi);
30764        }
30765        switch (this.mode) {
30766        case this.EQUIT:
30767          phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);
30768          x *= sinz;
30769          y = cosz * rh;
30770          break;
30771        case this.OBLIQ:
30772          phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);
30773          x *= sinz * this.cosph0;
30774          y = (cosz - Math.sin(phi) * this.sinph0) * rh;
30775          break;
30776        case this.N_POLE:
30777          y = -y;
30778          phi = HALF_PI - phi;
30779          break;
30780        case this.S_POLE:
30781          phi -= HALF_PI;
30782          break;
30783        }
30784        lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);
30785      }
30786      else {
30787        ab = 0;
30788        if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
30789          x /= this.dd;
30790          y *= this.dd;
30791          rho = Math.sqrt(x * x + y * y);
30792          if (rho < EPSLN) {
30793            p.x = this.long0;
30794            p.y = this.lat0;
30795            return p;
30796          }
30797          sCe = 2 * Math.asin(0.5 * rho / this.rq);
30798          cCe = Math.cos(sCe);
30799          x *= (sCe = Math.sin(sCe));
30800          if (this.mode === this.OBLIQ) {
30801            ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;
30802            q = this.qp * ab;
30803            y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;
30804          }
30805          else {
30806            ab = y * sCe / rho;
30807            q = this.qp * ab;
30808            y = rho * cCe;
30809          }
30810        }
30811        else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
30812          if (this.mode === this.N_POLE) {
30813            y = -y;
30814          }
30815          q = (x * x + y * y);
30816          if (!q) {
30817            p.x = this.long0;
30818            p.y = this.lat0;
30819            return p;
30820          }
30821          ab = 1 - q / this.qp;
30822          if (this.mode === this.S_POLE) {
30823            ab = -ab;
30824          }
30825        }
30826        lam = Math.atan2(x, y);
30827        phi = authlat(Math.asin(ab), this.apa);
30828      }
30829
30830      p.x = adjust_lon(this.long0 + lam);
30831      p.y = phi;
30832      return p;
30833    }
30834
30835    /* determine latitude from authalic latitude */
30836    var P00 = 0.33333333333333333333;
30837
30838    var P01 = 0.17222222222222222222;
30839    var P02 = 0.10257936507936507936;
30840    var P10 = 0.06388888888888888888;
30841    var P11 = 0.06640211640211640211;
30842    var P20 = 0.01641501294219154443;
30843
30844    function authset(es) {
30845      var t;
30846      var APA = [];
30847      APA[0] = es * P00;
30848      t = es * es;
30849      APA[0] += t * P01;
30850      APA[1] = t * P10;
30851      t *= es;
30852      APA[0] += t * P02;
30853      APA[1] += t * P11;
30854      APA[2] = t * P20;
30855      return APA;
30856    }
30857
30858    function authlat(beta, APA) {
30859      var t = beta + beta;
30860      return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));
30861    }
30862
30863    var names$14 = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"];
30864    var laea = {
30865      init: init$13,
30866      forward: forward$12,
30867      inverse: inverse$12,
30868      names: names$14,
30869      S_POLE: S_POLE,
30870      N_POLE: N_POLE,
30871      EQUIT: EQUIT,
30872      OBLIQ: OBLIQ
30873    };
30874
30875    var asinz = function(x) {
30876      if (Math.abs(x) > 1) {
30877        x = (x > 1) ? 1 : -1;
30878      }
30879      return Math.asin(x);
30880    };
30881
30882    function init$14() {
30883
30884      if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
30885        return;
30886      }
30887      this.temp = this.b / this.a;
30888      this.es = 1 - Math.pow(this.temp, 2);
30889      this.e3 = Math.sqrt(this.es);
30890
30891      this.sin_po = Math.sin(this.lat1);
30892      this.cos_po = Math.cos(this.lat1);
30893      this.t1 = this.sin_po;
30894      this.con = this.sin_po;
30895      this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);
30896      this.qs1 = qsfnz(this.e3, this.sin_po);
30897
30898      this.sin_po = Math.sin(this.lat2);
30899      this.cos_po = Math.cos(this.lat2);
30900      this.t2 = this.sin_po;
30901      this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);
30902      this.qs2 = qsfnz(this.e3, this.sin_po);
30903
30904      this.sin_po = Math.sin(this.lat0);
30905      this.cos_po = Math.cos(this.lat0);
30906      this.t3 = this.sin_po;
30907      this.qs0 = qsfnz(this.e3, this.sin_po);
30908
30909      if (Math.abs(this.lat1 - this.lat2) > EPSLN) {
30910        this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);
30911      }
30912      else {
30913        this.ns0 = this.con;
30914      }
30915      this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;
30916      this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;
30917    }
30918
30919    /* Albers Conical Equal Area forward equations--mapping lat,long to x,y
30920      -------------------------------------------------------------------*/
30921    function forward$13(p) {
30922
30923      var lon = p.x;
30924      var lat = p.y;
30925
30926      this.sin_phi = Math.sin(lat);
30927      this.cos_phi = Math.cos(lat);
30928
30929      var qs = qsfnz(this.e3, this.sin_phi);
30930      var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;
30931      var theta = this.ns0 * adjust_lon(lon - this.long0);
30932      var x = rh1 * Math.sin(theta) + this.x0;
30933      var y = this.rh - rh1 * Math.cos(theta) + this.y0;
30934
30935      p.x = x;
30936      p.y = y;
30937      return p;
30938    }
30939
30940    function inverse$13(p) {
30941      var rh1, qs, con, theta, lon, lat;
30942
30943      p.x -= this.x0;
30944      p.y = this.rh - p.y + this.y0;
30945      if (this.ns0 >= 0) {
30946        rh1 = Math.sqrt(p.x * p.x + p.y * p.y);
30947        con = 1;
30948      }
30949      else {
30950        rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);
30951        con = -1;
30952      }
30953      theta = 0;
30954      if (rh1 !== 0) {
30955        theta = Math.atan2(con * p.x, con * p.y);
30956      }
30957      con = rh1 * this.ns0 / this.a;
30958      if (this.sphere) {
30959        lat = Math.asin((this.c - con * con) / (2 * this.ns0));
30960      }
30961      else {
30962        qs = (this.c - con * con) / this.ns0;
30963        lat = this.phi1z(this.e3, qs);
30964      }
30965
30966      lon = adjust_lon(theta / this.ns0 + this.long0);
30967      p.x = lon;
30968      p.y = lat;
30969      return p;
30970    }
30971
30972    /* Function to compute phi1, the latitude for the inverse of the
30973       Albers Conical Equal-Area projection.
30974    -------------------------------------------*/
30975    function phi1z(eccent, qs) {
30976      var sinphi, cosphi, con, com, dphi;
30977      var phi = asinz(0.5 * qs);
30978      if (eccent < EPSLN) {
30979        return phi;
30980      }
30981
30982      var eccnts = eccent * eccent;
30983      for (var i = 1; i <= 25; i++) {
30984        sinphi = Math.sin(phi);
30985        cosphi = Math.cos(phi);
30986        con = eccent * sinphi;
30987        com = 1 - con * con;
30988        dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
30989        phi = phi + dphi;
30990        if (Math.abs(dphi) <= 1e-7) {
30991          return phi;
30992        }
30993      }
30994      return null;
30995    }
30996
30997    var names$15 = ["Albers_Conic_Equal_Area", "Albers", "aea"];
30998    var aea = {
30999      init: init$14,
31000      forward: forward$13,
31001      inverse: inverse$13,
31002      names: names$15,
31003      phi1z: phi1z
31004    };
31005
31006    /*
31007      reference:
31008        Wolfram Mathworld "Gnomonic Projection"
31009        http://mathworld.wolfram.com/GnomonicProjection.html
31010        Accessed: 12th November 2009
31011      */
31012    function init$15() {
31013
31014      /* Place parameters in static storage for common use
31015          -------------------------------------------------*/
31016      this.sin_p14 = Math.sin(this.lat0);
31017      this.cos_p14 = Math.cos(this.lat0);
31018      // Approximation for projecting points to the horizon (infinity)
31019      this.infinity_dist = 1000 * this.a;
31020      this.rc = 1;
31021    }
31022
31023    /* Gnomonic forward equations--mapping lat,long to x,y
31024        ---------------------------------------------------*/
31025    function forward$14(p) {
31026      var sinphi, cosphi; /* sin and cos value        */
31027      var dlon; /* delta longitude value      */
31028      var coslon; /* cos of longitude        */
31029      var ksp; /* scale factor          */
31030      var g;
31031      var x, y;
31032      var lon = p.x;
31033      var lat = p.y;
31034      /* Forward equations
31035          -----------------*/
31036      dlon = adjust_lon(lon - this.long0);
31037
31038      sinphi = Math.sin(lat);
31039      cosphi = Math.cos(lat);
31040
31041      coslon = Math.cos(dlon);
31042      g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;
31043      ksp = 1;
31044      if ((g > 0) || (Math.abs(g) <= EPSLN)) {
31045        x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;
31046        y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;
31047      }
31048      else {
31049
31050        // Point is in the opposing hemisphere and is unprojectable
31051        // We still need to return a reasonable point, so we project
31052        // to infinity, on a bearing
31053        // equivalent to the northern hemisphere equivalent
31054        // This is a reasonable approximation for short shapes and lines that
31055        // straddle the horizon.
31056
31057        x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);
31058        y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);
31059
31060      }
31061      p.x = x;
31062      p.y = y;
31063      return p;
31064    }
31065
31066    function inverse$14(p) {
31067      var rh; /* Rho */
31068      var sinc, cosc;
31069      var c;
31070      var lon, lat;
31071
31072      /* Inverse equations
31073          -----------------*/
31074      p.x = (p.x - this.x0) / this.a;
31075      p.y = (p.y - this.y0) / this.a;
31076
31077      p.x /= this.k0;
31078      p.y /= this.k0;
31079
31080      if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {
31081        c = Math.atan2(rh, this.rc);
31082        sinc = Math.sin(c);
31083        cosc = Math.cos(c);
31084
31085        lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);
31086        lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);
31087        lon = adjust_lon(this.long0 + lon);
31088      }
31089      else {
31090        lat = this.phic0;
31091        lon = 0;
31092      }
31093
31094      p.x = lon;
31095      p.y = lat;
31096      return p;
31097    }
31098
31099    var names$16 = ["gnom"];
31100    var gnom = {
31101      init: init$15,
31102      forward: forward$14,
31103      inverse: inverse$14,
31104      names: names$16
31105    };
31106
31107    var iqsfnz = function(eccent, q) {
31108      var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + ecce
31108nt));
31109      if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {
31110        if (q < 0) {
31111          return (-1 * HALF_PI);
31112        }
31113        else {
31114          return HALF_PI;
31115        }
31116      }
31117      //var phi = 0.5* q/(1-eccent*eccent);
31118      var phi = Math.asin(0.5 * q);
31119      var dphi;
31120      var sin_phi;
31121      var cos_phi;
31122      var con;
31123      for (var i = 0; i < 30; i++) {
31124        sin_phi = Math.sin(phi);
31125        cos_phi = Math.cos(phi);
31126        con = eccent * sin_phi;
31127        dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
31128        phi += dphi;
31129        if (Math.abs(dphi) <= 0.0000000001) {
31130          return phi;
31131        }
31132      }
31133
31134      //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations");
31135      return NaN;
31136    };
31137
31138    /*
31139      reference:
31140        "Cartographic Projection Procedures for the UNIX Environment-
31141        A User's Manual" by Gerald I. Evenden,
31142        USGS Open File Report 90-284and Release 4 Interim Reports (2003)
31143    */
31144    function init$16() {
31145      //no-op
31146      if (!this.sphere) {
31147        this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));
31148      }
31149    }
31150
31151    /* Cylindrical Equal Area forward equations--mapping lat,long to x,y
31152        ------------------------------------------------------------*/
31153    function forward$15(p) {
31154      var lon = p.x;
31155      var lat = p.y;
31156      var x, y;
31157      /* Forward equations
31158          -----------------*/
31159      var dlon = adjust_lon(lon - this.long0);
31160      if (this.sphere) {
31161        x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);
31162        y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);
31163      }
31164      else {
31165        var qs = qsfnz(this.e, Math.sin(lat));
31166        x = this.x0 + this.a * this.k0 * dlon;
31167        y = this.y0 + this.a * qs * 0.5 / this.k0;
31168      }
31169
31170      p.x = x;
31171      p.y = y;
31172      return p;
31173    }
31174
31175    /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long
31176        ------------------------------------------------------------*/
31177    function inverse$15(p) {
31178      p.x -= this.x0;
31179      p.y -= this.y0;
31180      var lon, lat;
31181
31182      if (this.sphere) {
31183        lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));
31184        lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));
31185      }
31186      else {
31187        lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);
31188        lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));
31189      }
31190
31191      p.x = lon;
31192      p.y = lat;
31193      return p;
31194    }
31195
31196    var names$17 = ["cea"];
31197    var cea = {
31198      init: init$16,
31199      forward: forward$15,
31200      inverse: inverse$15,
31201      names: names$17
31202    };
31203
31204    function init$17() {
31205
31206      this.x0 = this.x0 || 0;
31207      this.y0 = this.y0 || 0;
31208      this.lat0 = this.lat0 || 0;
31209      this.long0 = this.long0 || 0;
31210      this.lat_ts = this.lat_ts || 0;
31211      this.title = this.title || "Equidistant Cylindrical (Plate Carre)";
31212
31213      this.rc = Math.cos(this.lat_ts);
31214    }
31215
31216    // forward equations--mapping lat,long to x,y
31217    // -----------------------------------------------------------------
31218    function forward$16(p) {
31219
31220      var lon = p.x;
31221      var lat = p.y;
31222
31223      var dlon = adjust_lon(lon - this.long0);
31224      var dlat = adjust_lat(lat - this.lat0);
31225      p.x = this.x0 + (this.a * dlon * this.rc);
31226      p.y = this.y0 + (this.a * dlat);
31227      return p;
31228    }
31229
31230    // inverse equations--mapping x,y to lat/long
31231    // -----------------------------------------------------------------
31232    function inverse$16(p) {
31233
31234      var x = p.x;
31235      var y = p.y;
31236
31237      p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));
31238      p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));
31239      return p;
31240    }
31241
31242    var names$18 = ["Equirectangular", "Equidistant_Cylindrical", "eqc"];
31243    var eqc = {
31244      init: init$17,
31245      forward: forward$16,
31246      inverse: inverse$16,
31247      names: names$18
31248    };
31249
31250    var MAX_ITER$2 = 20;
31251
31252    function init$18() {
31253      /* Place parameters in static storage for common use
31254          -------------------------------------------------*/
31255      this.temp = this.b / this.a;
31256      this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles
31257      this.e = Math.sqrt(this.es);
31258      this.e0 = e0fn(this.es);
31259      this.e1 = e1fn(this.es);
31260      this.e2 = e2fn(this.es);
31261      this.e3 = e3fn(this.es);
31262      this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas
31263    }
31264
31265    /* Polyconic forward equations--mapping lat,long to x,y
31266        ---------------------------------------------------*/
31267    function forward$17(p) {
31268      var lon = p.x;
31269      var lat = p.y;
31270      var x, y, el;
31271      var dlon = adjust_lon(lon - this.long0);
31272      el = dlon * Math.sin(lat);
31273      if (this.sphere) {
31274        if (Math.abs(lat) <= EPSLN) {
31275          x = this.a * dlon;
31276          y = -1 * this.a * this.lat0;
31277        }
31278        else {
31279          x = this.a * Math.sin(el) / Math.tan(lat);
31280          y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));
31281        }
31282      }
31283      else {
31284        if (Math.abs(lat) <= EPSLN) {
31285          x = this.a * dlon;
31286          y = -1 * this.ml0;
31287        }
31288        else {
31289          var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);
31290          x = nl * Math.sin(el);
31291          y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));
31292        }
31293
31294      }
31295      p.x = x + this.x0;
31296      p.y = y + this.y0;
31297      return p;
31298    }
31299
31300    /* Inverse equations
31301      -----------------*/
31302    function inverse$17(p) {
31303      var lon, lat, x, y, i;
31304      var al, bl;
31305      var phi, dphi;
31306      x = p.x - this.x0;
31307      y = p.y - this.y0;
31308
31309      if (this.sphere) {
31310        if (Math.abs(y + this.a * this.lat0) <= EPSLN) {
31311          lon = adjust_lon(x / this.a + this.long0);
31312          lat = 0;
31313        }
31314        else {
31315          al = this.lat0 + y / this.a;
31316          bl = x * x / this.a / this.a + al * al;
31317          phi = al;
31318          var tanphi;
31319          for (i = MAX_ITER$2; i; --i) {
31320            tanphi = Math.tan(phi);
31321            dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tan
31321phi - 1);
31322            phi += dphi;
31323            if (Math.abs(dphi) <= EPSLN) {
31324              lat = phi;
31325              break;
31326            }
31327          }
31328          lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));
31329        }
31330      }
31331      else {
31332        if (Math.abs(y + this.ml0) <= EPSLN) {
31333          lat = 0;
31334          lon = adjust_lon(this.long0 + x / this.a);
31335        }
31336        else {
31337
31338          al = (this.ml0 + y) / this.a;
31339          bl = x * x / this.a / this.a + al * al;
31340          phi = al;
31341          var cl, mln, mlnp, ma;
31342          var con;
31343          for (i = MAX_ITER$2; i; --i) {
31344            con = this.e * Math.sin(phi);
31345            cl = Math.sqrt(1 - con * con) * Math.tan(phi);
31346            mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);
31347            mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);
31348            ma = mln / this.a;
31349            dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);
31350            phi -= dphi;
31351            if (Math.abs(dphi) <= EPSLN) {
31352              lat = phi;
31353              break;
31354            }
31355          }
31356
31357          //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);
31358          cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);
31359          lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));
31360        }
31361      }
31362
31363      p.x = lon;
31364      p.y = lat;
31365      return p;
31366    }
31367
31368    var names$19 = ["Polyconic", "poly"];
31369    var poly = {
31370      init: init$18,
31371      forward: forward$17,
31372      inverse: inverse$17,
31373      names: names$19
31374    };
31375
31376    /*
31377      reference
31378        Department of Land and Survey Technical Circular 1973/32
31379          http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf
31380        OSG Technical Report 4.1
31381          http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf
31382      */
31383
31384    /**
31385     * iterations: Number of iterations to refine inverse transform.
31386     *     0 -> km accuracy
31387     *     1 -> m accuracy -- suitable for most mapping applications
31388     *     2 -> mm accuracy
31389     */
31390
31391
31392    function init$19() {
31393      this.A = [];
31394      this.A[1] = 0.6399175073;
31395      this.A[2] = -0.1358797613;
31396      this.A[3] = 0.063294409;
31397      this.A[4] = -0.02526853;
31398      this.A[5] = 0.0117879;
31399      this.A[6] = -0.0055161;
31400      this.A[7] = 0.0026906;
31401      this.A[8] = -0.001333;
31402      this.A[9] = 0.00067;
31403      this.A[10] = -0.00034;
31404
31405      this.B_re = [];
31406      this.B_im = [];
31407      this.B_re[1] = 0.7557853228;
31408      this.B_im[1] = 0;
31409      this.B_re[2] = 0.249204646;
31410      this.B_im[2] = 0.003371507;
31411      this.B_re[3] = -0.001541739;
31412      this.B_im[3] = 0.041058560;
31413      this.B_re[4] = -0.10162907;
31414      this.B_im[4] = 0.01727609;
31415      this.B_re[5] = -0.26623489;
31416      this.B_im[5] = -0.36249218;
31417      this.B_re[6] = -0.6870983;
31418      this.B_im[6] = -1.1651967;
31419
31420      this.C_re = [];
31421      this.C_im = [];
31422      this.C_re[1] = 1.3231270439;
31423      this.C_im[1] = 0;
31424      this.C_re[2] = -0.577245789;
31425      this.C_im[2] = -0.007809598;
31426      this.C_re[3] = 0.508307513;
31427      this.C_im[3] = -0.112208952;
31428      this.C_re[4] = -0.15094762;
31429      this.C_im[4] = 0.18200602;
31430      this.C_re[5] = 1.01418179;
31431      this.C_im[5] = 1.64497696;
31432      this.C_re[6] = 1.9660549;
31433      this.C_im[6] = 2.5127645;
31434
31435      this.D = [];
31436      this.D[1] = 1.5627014243;
31437      this.D[2] = 0.5185406398;
31438      this.D[3] = -0.03333098;
31439      this.D[4] = -0.1052906;
31440      this.D[5] = -0.0368594;
31441      this.D[6] = 0.007317;
31442      this.D[7] = 0.01220;
31443      this.D[8] = 0.00394;
31444      this.D[9] = -0.0013;
31445    }
31446
31447    /**
31448        New Zealand Map Grid Forward  - long/lat to x/y
31449        long/lat in radians
31450      */
31451    function forward$18(p) {
31452      var n;
31453      var lon = p.x;
31454      var lat = p.y;
31455
31456      var delta_lat = lat - this.lat0;
31457      var delta_lon = lon - this.long0;
31458
31459      // 1. Calculate d_phi and d_psi    ...                          // and d_lambda
31460      // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.
31461      var d_phi = delta_lat / SEC_TO_RAD * 1E-5;
31462      var d_lambda = delta_lon;
31463      var d_phi_n = 1; // d_phi^0
31464
31465      var d_psi = 0;
31466      for (n = 1; n <= 10; n++) {
31467        d_phi_n = d_phi_n * d_phi;
31468        d_psi = d_psi + this.A[n] * d_phi_n;
31469      }
31470
31471      // 2. Calculate theta
31472      var th_re = d_psi;
31473      var th_im = d_lambda;
31474
31475      // 3. Calculate z
31476      var th_n_re = 1;
31477      var th_n_im = 0; // theta^0
31478      var th_n_re1;
31479      var th_n_im1;
31480
31481      var z_re = 0;
31482      var z_im = 0;
31483      for (n = 1; n <= 6; n++) {
31484        th_n_re1 = th_n_re * th_re - th_n_im * th_im;
31485        th_n_im1 = th_n_im * th_re + th_n_re * th_im;
31486        th_n_re = th_n_re1;
31487        th_n_im = th_n_im1;
31488        z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;
31489        z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;
31490      }
31491
31492      // 4. Calculate easting and northing
31493      p.x = (z_im * this.a) + this.x0;
31494      p.y = (z_re * this.a) + this.y0;
31495
31496      return p;
31497    }
31498
31499    /**
31500        New Zealand Map Grid Inverse  -  x/y to long/lat
31501      */
31502    function inverse$18(p) {
31503      var n;
31504      var x = p.x;
31505      var y = p.y;
31506
31507      var delta_x = x - this.x0;
31508      var delta_y = y - this.y0;
31509
31510      // 1. Calculate z
31511      var z_re = delta_y / this.a;
31512      var z_im = delta_x / this.a;
31513
31514      // 2a. Calculate theta - first approximation gives km accuracy
31515      var z_n_re = 1;
31516      var z_n_im = 0; // z^0
31517      var z_n_re1;
31518      var z_n_im1;
31519
31520      var th_re = 0;
31521      var th_im = 0;
31522      for (n = 1; n <= 6; n++) {
31523        z_n_re1 = z_n_re * z_re - z_n_im * z_im;
31524        z_n_im1 = z_n_im * z_re + z_n_re * z_im;
31525        z_n_re = z_n_re1;
31526        z_n_im = z_n_im1;
31527        th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;
31528        th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;
31529      }
31530
31531      // 2b. Iterate to refine the accuracy of the calculation
31532      //        0 iterations gives km accuracy
31533      //        1 iteration gives m accuracy -- good enough for most mapping applications
31534      //        2 iterations bives mm accuracy
31535      for (var i = 0; i < this.iterations; i++) {
31536        var th_n_re = th_re;
31537        var th_n_im = th_im;
31538        var th_n_re1;
31539        var th_n_im1;
31540
31541        var num_re = z_re;
31542        var num_im = z_im;
31543        for (n = 2; n <= 6; n++) {
31544          th_n_re1 = th_n_re * th_re - th_n_im * th_im;
31545          th_n_im1 = th_n_im * th_re + th_n_re * th_im;
31546          th_n_re = th_n_re1;
31547          th_n_im = th_n_im1;
31548          num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);
31549          num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);
31550        }
31551
31552        th_n_re = 1;
31553        th_n_im = 0;
31554        var den_re = this.B_re[1];
31555        var den_im = this.B_im[1];
31556        for (n = 2; n <= 6; n++) {
31557          th_n_re1 = th_n_re * th_re - th_n_im * th_im;
31558          th_n_im1 = th_n_im * th_re + th_n_re * th_im;
31559          th_n_re = th_n_re1;
31560          th_n_im = th_n_im1;
31561          den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);
31562          den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);
31563        }
31564
31565        // Complex division
31566        var den2 = den_re * den_re + den_im * den_im;
31567        th_re = (num_re * den_re + num_im * den_im) / den2;
31568        th_im = (num_im * den_re - num_re * den_im) / den2;
31569      }
31570
31571      // 3. Calculate d_phi              ...                                    // and d_lambda
31572      var d_psi = th_re;
31573      var d_lambda = th_im;
31574      var d_psi_n = 1; // d_psi^0
31575
31576      var d_phi = 0;
31577      for (n = 1; n <= 9; n++) {
31578        d_psi_n = d_psi_n * d_psi;
31579        d_phi = d_phi + this.D[n] * d_psi_n;
31580      }
31581
31582      // 4. Calculate latitude and longitude
31583      // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.
31584      var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);
31585      var lon = this.long0 + d_lambda;
31586
31587      p.x = lon;
31588      p.y = lat;
31589
31590      return p;
31591    }
31592
31593    var names$20 = ["New_Zealand_Map_Grid", "nzmg"];
31594    var nzmg = {
31595      init: init$19,
31596      forward: forward$18,
31597      inverse: inverse$18,
31598      names: names$20
31599    };
31600
31601    /*
31602      reference
31603        "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
31604        The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
31605      */
31606
31607
31608    /* Initialize the Miller Cylindrical projection
31609      -------------------------------------------*/
31610    function init$20() {
31611      //no-op
31612    }
31613
31614    /* Miller Cylindrical forward equations--mapping lat,long to x,y
31615        ------------------------------------------------------------*/
31616    function forward$19(p) {
31617      var lon = p.x;
31618      var lat = p.y;
31619      /* Forward equations
31620          -----------------*/
31621      var dlon = adjust_lon(lon - this.long0);
31622      var x = this.x0 + this.a * dlon;
31623      var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;
31624
31625      p.x = x;
31626      p.y = y;
31627      return p;
31628    }
31629
31630    /* Miller Cylindrical inverse equations--mapping x,y to lat/long
31631        ------------------------------------------------------------*/
31632    function inverse$19(p) {
31633      p.x -= this.x0;
31634      p.y -= this.y0;
31635
31636      var lon = adjust_lon(this.long0 + p.x / this.a);
31637      var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);
31638
31639      p.x = lon;
31640      p.y = lat;
31641      return p;
31642    }
31643
31644    var names$21 = ["Miller_Cylindrical", "mill"];
31645    var mill = {
31646      init: init$20,
31647      forward: forward$19,
31648      inverse: inverse$19,
31649      names: names$21
31650    };
31651
31652    var MAX_ITER$3 = 20;
31653    function init$21() {
31654      /* Place parameters in static storage for common use
31655        -------------------------------------------------*/
31656
31657
31658      if (!this.sphere) {
31659        this.en = pj_enfn(this.es);
31660      }
31661      else {
31662        this.n = 1;
31663        this.m = 0;
31664        this.es = 0;
31665        this.C_y = Math.sqrt((this.m + 1) / this.n);
31666        this.C_x = this.C_y / (this.m + 1);
31667      }
31668
31669    }
31670
31671    /* Sinusoidal forward equations--mapping lat,long to x,y
31672      -----------------------------------------------------*/
31673    function forward$20(p) {
31674      var x, y;
31675      var lon = p.x;
31676      var lat = p.y;
31677      /* Forward equations
31678        -----------------*/
31679      lon = adjust_lon(lon - this.long0);
31680
31681      if (this.sphere) {
31682        if (!this.m) {
31683          lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;
31684        }
31685        else {
31686          var k = this.n * Math.sin(lat);
31687          for (var i = MAX_ITER$3; i; --i) {
31688            var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));
31689            lat -= V;
31690            if (Math.abs(V) < EPSLN) {
31691              break;
31692            }
31693          }
31694        }
31695        x = this.a * this.C_x * lon * (this.m + Math.cos(lat));
31696        y = this.a * this.C_y * lat;
31697
31698      }
31699      else {
31700
31701        var s = Math.sin(lat);
31702        var c = Math.cos(lat);
31703        y = this.a * pj_mlfn(lat, s, c, this.en);
31704        x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);
31705      }
31706
31707      p.x = x;
31708      p.y = y;
31709      return p;
31710    }
31711
31712    function inverse$20(p) {
31713      var lat, temp, lon, s;
31714
31715      p.x -= this.x0;
31716      lon = p.x / this.a;
31717      p.y -= this.y0;
31718      lat = p.y / this.a;
31719
31720      if (this.sphere) {
31721        lat /= this.C_y;
31722        lon = lon / (this.C_x * (this.m + Math.cos(lat)));
31723        if (this.m) {
31724          lat = asinz((this.m * lat + Math.sin(lat)) / this.n);
31725        }
31726        else if (this.n !== 1) {
31727          lat = asinz(Math.sin(lat) / this.n);
31728        }
31729        lon = adjust_lon(lon + this.long0);
31730        lat = adjust_lat(lat);
31731      }
31732      else {
31733        lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);
31734        s = Math.abs(lat);
31735        if (s < HALF_PI) {
31736          s = Math.sin(lat);
31737          temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));
31738          //temp = this.long0 + p.x / (this.a * Math.cos(lat));
31739          lon = adjust_lon(temp);
31740        }
31741        else if ((s - EPSLN) < HALF_PI) {
31742          lon = this.long0;
31743        }
31744      }
31745      p.x = lon;
31746      p.y = lat;
31747      return p;
31748    }
31749
31750    var names$22 = ["Sinusoidal", "sinu"];
31751    var sinu = {
31752      init: init$21,
31753      forward: forward$20,
31754      inverse: inverse$20,
31755      names: names$22
31756    };
31757
31758    function init$22() {}
31759    /* Mollweide forward equations--mapping lat,long to x,y
31760        ----------------------------------------------------*/
31761    function forward$21(p) {
31762
31763      /* Forward equations
31764          -----------------*/
31765      var lon = p.x;
31766      var lat = p.y;
31767
31768      var delta_lon = adjust_lon(lon - this.long0);
31769      var theta = lat;
31770      var con = Math.PI * Math.sin(lat);
31771
31772      /* Iterate using the Newton-Raphson method to find theta
31773          -----------------------------------------------------*/
31774      while (true) {
31775        var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.
31775cos(theta));
31776        theta += delta_theta;
31777        if (Math.abs(delta_theta) < EPSLN) {
31778          break;
31779        }
31780      }
31781      theta /= 2;
31782
31783      /* If the latitude is 90 deg, force the x coordinate to be "0 + false easting"
31784           this is done here because of precision problems with "cos(theta)"
31785           --------------------------------------------------------------------------*/
31786      if (Math.PI / 2 - Math.abs(lat) < EPSLN) {
31787        delta_lon = 0;
31788      }
31789      var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;
31790      var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;
31791
31792      p.x = x;
31793      p.y = y;
31794      return p;
31795    }
31796
31797    function inverse$21(p) {
31798      var theta;
31799      var arg;
31800
31801      /* Inverse equations
31802          -----------------*/
31803      p.x -= this.x0;
31804      p.y -= this.y0;
31805      arg = p.y / (1.4142135623731 * this.a);
31806
31807      /* Because of division by zero problems, 'arg' can not be 1.  Therefore
31808           a number very close to one is used instead.
31809           -------------------------------------------------------------------*/
31810      if (Math.abs(arg) > 0.999999999999) {
31811        arg = 0.999999999999;
31812      }
31813      theta = Math.asin(arg);
31814      var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));
31815      if (lon < (-Math.PI)) {
31816        lon = -Math.PI;
31817      }
31818      if (lon > Math.PI) {
31819        lon = Math.PI;
31820      }
31821      arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;
31822      if (Math.abs(arg) > 1) {
31823        arg = 1;
31824      }
31825      var lat = Math.asin(arg);
31826
31827      p.x = lon;
31828      p.y = lat;
31829      return p;
31830    }
31831
31832    var names$23 = ["Mollweide", "moll"];
31833    var moll = {
31834      init: init$22,
31835      forward: forward$21,
31836      inverse: inverse$21,
31837      names: names$23
31838    };
31839
31840    function init$23() {
31841
31842      /* Place parameters in static storage for common use
31843          -------------------------------------------------*/
31844      // Standard Parallels cannot be equal and on opposite sides of the equator
31845      if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
31846        return;
31847      }
31848      this.lat2 = this.lat2 || this.lat1;
31849      this.temp = this.b / this.a;
31850      this.es = 1 - Math.pow(this.temp, 2);
31851      this.e = Math.sqrt(this.es);
31852      this.e0 = e0fn(this.es);
31853      this.e1 = e1fn(this.es);
31854      this.e2 = e2fn(this.es);
31855      this.e3 = e3fn(this.es);
31856
31857      this.sinphi = Math.sin(this.lat1);
31858      this.cosphi = Math.cos(this.lat1);
31859
31860      this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);
31861      this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);
31862
31863      if (Math.abs(this.lat1 - this.lat2) < EPSLN) {
31864        this.ns = this.sinphi;
31865      }
31866      else {
31867        this.sinphi = Math.sin(this.lat2);
31868        this.cosphi = Math.cos(this.lat2);
31869        this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);
31870        this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);
31871        this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);
31872      }
31873      this.g = this.ml1 + this.ms1 / this.ns;
31874      this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);
31875      this.rh = this.a * (this.g - this.ml0);
31876    }
31877
31878    /* Equidistant Conic forward equations--mapping lat,long to x,y
31879      -----------------------------------------------------------*/
31880    function forward$22(p) {
31881      var lon = p.x;
31882      var lat = p.y;
31883      var rh1;
31884
31885      /* Forward equations
31886          -----------------*/
31887      if (this.sphere) {
31888        rh1 = this.a * (this.g - lat);
31889      }
31890      else {
31891        var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);
31892        rh1 = this.a * (this.g - ml);
31893      }
31894      var theta = this.ns * adjust_lon(lon - this.long0);
31895      var x = this.x0 + rh1 * Math.sin(theta);
31896      var y = this.y0 + this.rh - rh1 * Math.cos(theta);
31897      p.x = x;
31898      p.y = y;
31899      return p;
31900    }
31901
31902    /* Inverse equations
31903      -----------------*/
31904    function inverse$22(p) {
31905      p.x -= this.x0;
31906      p.y = this.rh - p.y + this.y0;
31907      var con, rh1, lat, lon;
31908      if (this.ns >= 0) {
31909        rh1 = Math.sqrt(p.x * p.x + p.y * p.y);
31910        con = 1;
31911      }
31912      else {
31913        rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);
31914        con = -1;
31915      }
31916      var theta = 0;
31917      if (rh1 !== 0) {
31918        theta = Math.atan2(con * p.x, con * p.y);
31919      }
31920
31921      if (this.sphere) {
31922        lon = adjust_lon(this.long0 + theta / this.ns);
31923        lat = adjust_lat(this.g - rh1 / this.a);
31924        p.x = lon;
31925        p.y = lat;
31926        return p;
31927      }
31928      else {
31929        var ml = this.g - rh1 / this.a;
31930        lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);
31931        lon = adjust_lon(this.long0 + theta / this.ns);
31932        p.x = lon;
31933        p.y = lat;
31934        return p;
31935      }
31936
31937    }
31938
31939    var names$24 = ["Equidistant_Conic", "eqdc"];
31940    var eqdc = {
31941      init: init$23,
31942      forward: forward$22,
31943      inverse: inverse$22,
31944      names: names$24
31945    };
31946
31947    /* Initialize the Van Der Grinten projection
31948      ----------------------------------------*/
31949    function init$24() {
31950      //this.R = 6370997; //Radius of earth
31951      this.R = this.a;
31952    }
31953
31954    function forward$23(p) {
31955
31956      var lon = p.x;
31957      var lat = p.y;
31958
31959      /* Forward equations
31960        -----------------*/
31961      var dlon = adjust_lon(lon - this.long0);
31962      var x, y;
31963
31964      if (Math.abs(lat) <= EPSLN) {
31965        x = this.x0 + this.R * dlon;
31966        y = this.y0;
31967      }
31968      var theta = asinz(2 * Math.abs(lat / Math.PI));
31969      if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {
31970        x = this.x0;
31971        if (lat >= 0) {
31972          y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);
31973        }
31974        else {
31975          y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);
31976        }
31977        //  return(OK);
31978      }
31979      var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));
31980      var asq = al * al;
31981      var sinth = Math.sin(theta);
31982      var costh = Math.cos(theta);
31983
31984      var g = costh / (sinth + costh - 1);
31985      var gsq = g * g;
31986      var m = g * (2 / sinth - 1);
31987      var msq = m * m;
31988      var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);
31989      if (dlon < 0) {
31990        con = -con;
31991      }
31992      x = this.x0 + con;
31993      //con = Math.abs(con / (Math.PI * this.R));
31994      var q = asq + g;
31995      con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);
31996      if (lat >= 0) {
31997        //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);
31998        y = this.y0 + con;
31999      }
32000      else {
32001        //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);
32002        y = this.y0 - con;
32003      }
32004      p.x = x;
32005      p.y = y;
32006      return p;
32007    }
32008
32009    /* Van Der Grinten inverse equations--mapping x,y to lat/long
32010      ---------------------------------------------------------*/
32011    function inverse$23(p) {
32012      var lon, lat;
32013      var xx, yy, xys, c1, c2, c3;
32014      var a1;
32015      var m1;
32016      var con;
32017      var th1;
32018      var d;
32019
32020      /* inverse equations
32021        -----------------*/
32022      p.x -= this.x0;
32023      p.y -= this.y0;
32024      con = Math.PI * this.R;
32025      xx = p.x / con;
32026      yy = p.y / con;
32027      xys = xx * xx + yy * yy;
32028      c1 = -Math.abs(yy) * (1 + xys);
32029      c2 = c1 - 2 * yy * yy + xx * xx;
32030      c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;
32031      d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;
32032      a1 = (c1 - c2 * c2 / 3 / c3) / c3;
32033      m1 = 2 * Math.sqrt(-a1 / 3);
32034      con = ((3 * d) / a1) / m1;
32035      if (Math.abs(con) > 1) {
32036        if (con >= 0) {
32037          con = 1;
32038        }
32039        else {
32040          con = -1;
32041        }
32042      }
32043      th1 = Math.acos(con) / 3;
32044      if (p.y >= 0) {
32045        lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;
32046      }
32047      else {
32048        lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;
32049      }
32050
32051      if (Math.abs(xx) < EPSLN) {
32052        lon = this.long0;
32053      }
32054      else {
32055        lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);
32056      }
32057
32058      p.x = lon;
32059      p.y = lat;
32060      return p;
32061    }
32062
32063    var names$25 = ["Van_der_Grinten_I", "VanDerGrinten", "vandg"];
32064    var vandg = {
32065      init: init$24,
32066      forward: forward$23,
32067      inverse: inverse$23,
32068      names: names$25
32069    };
32070
32071    function init$25() {
32072      this.sin_p12 = Math.sin(this.lat0);
32073      this.cos_p12 = Math.cos(this.lat0);
32074    }
32075
32076    function forward$24(p) {
32077      var lon = p.x;
32078      var lat = p.y;
32079      var sinphi = Math.sin(p.y);
32080      var cosphi = Math.cos(p.y);
32081      var dlon = adjust_lon(lon - this.long0);
32082      var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;
32083      if (this.sphere) {
32084        if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
32085          //North Pole case
32086          p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);
32087          p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);
32088          return p;
32089        }
32090        else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
32091          //South Pole case
32092          p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);
32093          p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);
32094          return p;
32095        }
32096        else {
32097          //default case
32098          cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);
32099          c = Math.acos(cos_c);
32100          kp = c ? c / Math.sin(c) : 1;
32101          p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);
32102          p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));
32103          return p;
32104        }
32105      }
32106      else {
32107        e0 = e0fn(this.es);
32108        e1 = e1fn(this.es);
32109        e2 = e2fn(this.es);
32110        e3 = e3fn(this.es);
32111        if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
32112          //North Pole case
32113          Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
32114          Ml = this.a * mlfn(e0, e1, e2, e3, lat);
32115          p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);
32116          p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);
32117          return p;
32118        }
32119        else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
32120          //South Pole case
32121          Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
32122          Ml = this.a * mlfn(e0, e1, e2, e3, lat);
32123          p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);
32124          p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);
32125          return p;
32126        }
32127        else {
32128          //Default case
32129          tanphi = sinphi / cosphi;
32130          Nl1 = gN(this.a, this.e, this.sin_p12);
32131          Nl = gN(this.a, this.e, sinphi);
32132          psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));
32133          Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));
32134          if (Az === 0) {
32135            s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));
32136          }
32137          else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {
32138            s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));
32139          }
32140          else {
32141            s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));
32142          }
32143          G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);
32144          H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);
32145          GH = G * H;
32146          Hs = H * H;
32147          s2 = s * s;
32148          s3 = s2 * s;
32149          s4 = s3 * s;
32150          s5 = s4 * s;
32151          c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);
32152          p.x = this.x0 + c * Math.sin(Az);
32153          p.y = this.y0 + c * Math.cos(Az);
32154          return p;
32155        }
32156      }
32157
32158
32159    }
32160
32161    function inverse$24(p) {
32162      p.x -= this.x0;
32163      p.y -= this.y0;
32164      var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;
32165      if (this.sphere) {
32166        rh = Math.sqrt(p.x * p.x + p.y * p.y);
32167        if (rh > (2 * HALF_PI * this.a)) {
32168          return;
32169        }
32170        z = rh / this.a;
32171
32172        sinz = Math.sin(z);
32173        cosz = Math.cos(z);
32174
32175        lon = this.long0;
32176        if (Math.abs(rh) <= EPSLN) {
32177          lat = this.lat0;
32178        }
32179        else {
32180          lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);
32181          con = Math.abs(this.lat0) - HALF_PI;
32182          if (Math.abs(con) <= EPSLN) {
32183            if (this.lat0 >= 0) {
32184              lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));
32185            }
32186            else {
32187              lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));
32188            }
32189          }
32190          else {
32191            /*con = cosz - this.sin_p12 * Math.sin(lat);
32192            if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {
32193              //no-op, just keep the lon value as is
32194            } else {
32195              var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));
32196              lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));
32197            }*/
32198            lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));
32199          }
32200        }
32201
32202        p.x = lon;
32203        p.y = lat;
32204        return p;
32205      }
32206      else {
32207        e0 = e0fn(this.es);
32208        e1 = e1fn(this.es);
32209        e2 = e2fn(this.es);
32210        e3 = e3fn(this.es);
32211        if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
32212          //North pole case
32213          Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
32214          rh = Math.sqrt(p.x * p.x + p.y * p.y);
32215          M = Mlp - rh;
32216          lat = imlfn(M / this.a, e0, e1, e2, e3);
32217          lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));
32218          p.x = lon;
32219          p.y = lat;
32220          return p;
32221        }
32222        else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
32223          //South pole case
32224          Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
32225          rh = Math.sqrt(p.x * p.x + p.y * p.y);
32226          M = rh - Mlp;
32227
32228          lat = imlfn(M / this.a, e0, e1, e2, e3);
32229          lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));
32230          p.x = lon;
32231          p.y = lat;
32232          return p;
32233        }
32234        else {
32235          //default case
32236          rh = Math.sqrt(p.x * p.x + p.y * p.y);
32237          Az = Math.atan2(p.x, p.y);
32238          N1 = gN(this.a, this.e, this.sin_p12);
32239          cosAz = Math.cos(Az);
32240          tmp = this.e * this.cos_p12 * cosAz;
32241          A = -tmp * tmp / (1 - this.es);
32242          B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);
32243          D = rh / N1;
32244          Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;
32245          F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;
32246          psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);
32247          lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));
32248          sinpsi = Math.sin(psi);
32249          lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));
32250          p.x = lon;
32251          p.y = lat;
32252          return p;
32253        }
32254      }
32255
32256    }
32257
32258    var names$26 = ["Azimuthal_Equidistant", "aeqd"];
32259    var aeqd = {
32260      init: init$25,
32261      forward: forward$24,
32262      inverse: inverse$24,
32263      names: names$26
32264    };
32265
32266    function init$26() {
32267      //double temp;      /* temporary variable    */
32268
32269      /* Place parameters in static storage for common use
32270          -------------------------------------------------*/
32271      this.sin_p14 = Math.sin(this.lat0);
32272      this.cos_p14 = Math.cos(this.lat0);
32273    }
32274
32275    /* Orthographic forward equations--mapping lat,long to x,y
32276        ---------------------------------------------------*/
32277    function forward$25(p) {
32278      var sinphi, cosphi; /* sin and cos value        */
32279      var dlon; /* delta longitude value      */
32280      var coslon; /* cos of longitude        */
32281      var ksp; /* scale factor          */
32282      var g, x, y;
32283      var lon = p.x;
32284      var lat = p.y;
32285      /* Forward equations
32286          -----------------*/
32287      dlon = adjust_lon(lon - this.long0);
32288
32289      sinphi = Math.sin(lat);
32290      cosphi = Math.cos(lat);
32291
32292      coslon = Math.cos(dlon);
32293      g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;
32294      ksp = 1;
32295      if ((g > 0) || (Math.abs(g) <= EPSLN)) {
32296        x = this.a * ksp * cosphi * Math.sin(dlon);
32297        y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);
32298      }
32299      p.x = x;
32300      p.y = y;
32301      return p;
32302    }
32303
32304    function inverse$25(p) {
32305      var rh; /* height above ellipsoid      */
32306      var z; /* angle          */
32307      var sinz, cosz; /* sin of z and cos of z      */
32308      var con;
32309      var lon, lat;
32310      /* Inverse equations
32311          -----------------*/
32312      p.x -= this.x0;
32313      p.y -= this.y0;
32314      rh = Math.sqrt(p.x * p.x + p.y * p.y);
32315      z = asinz(rh / this.a);
32316
32317      sinz = Math.sin(z);
32318      cosz = Math.cos(z);
32319
32320      lon = this.long0;
32321      if (Math.abs(rh) <= EPSLN) {
32322        lat = this.lat0;
32323        p.x = lon;
32324        p.y = lat;
32325        return p;
32326      }
32327      lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);
32328      con = Math.abs(this.lat0) - HALF_PI;
32329      if (Math.abs(con) <= EPSLN) {
32330        if (this.lat0 >= 0) {
32331          lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));
32332        }
32333        else {
32334          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));
32335        }
32336        p.x = lon;
32337        p.y = lat;
32338        return p;
32339      }
32340      lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));
32341      p.x = lon;
32342      p.y = lat;
32343      return p;
32344    }
32345
32346    var names$27 = ["ortho"];
32347    var ortho = {
32348      init: init$26,
32349      forward: forward$25,
32350      inverse: inverse$25,
32351      names: names$27
32352    };
32353
32354    // QSC projection rewritten from the original PROJ4
32355    // https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c
32356
32357    /* constants */
32358    var FACE_ENUM = {
32359        FRONT: 1,
32360        RIGHT: 2,
32361        BACK: 3,
32362        LEFT: 4,
32363        TOP: 5,
32364        BOTTOM: 6
32365    };
32366
32367    var AREA_ENUM = {
32368        AREA_0: 1,
32369        AREA_1: 2,
32370        AREA_2: 3,
32371        AREA_3: 4
32372    };
32373
32374    function init$27() {
32375
32376      this.x0 = this.x0 || 0;
32377      this.y0 = this.y0 || 0;
32378      this.lat0 = this.lat0 || 0;
32379      this.long0 = this.long0 || 0;
32380      this.lat_ts = this.lat_ts || 0;
32381      this.title = this.title || "Quadrilateralized Spherical Cube";
32382
32383      /* Determine the cube face from the center of projection. */
32384      if (this.lat0 >= HALF_PI - FORTPI / 2.0) {
32385        this.face = FACE_ENUM.TOP;
32386      } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {
32387        this.face = FACE_ENUM.BOTTOM;
32388      } else if (Math.abs(this.long0) <= FORTPI) {
32389        this.face = FACE_ENUM.FRONT;
32390      } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {
32391        this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;
32392      } else {
32393        this.face = FACE_ENUM.BACK;
32394      }
32395
32396      /* Fill in useful values for the ellipsoid <-> sphere shift
32397       * described in [LK12]. */
32398      if (this.es !== 0) {
32399        this.one_minus_f = 1 - (this.a - this.b) / this.a;
32400        this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;
32401      }
32402    }
32403
32404    // QSC forward equations--mapping lat,long to x,y
32405    // -----------------------------------------------------------------
32406    function forward$26(p) {
32407      var xy = {x: 0, y: 0};
32408      var lat, lon;
32409      var theta, phi;
32410      var t, mu;
32411      /* nu; */
32412      var area = {value: 0};
32413
32414      // move lon according to projection's lon
32415      p.x -= this.long0;
32416
32417      /* Convert the geodetic latitude to a geocentric latitude.
32418       * This corresponds to the shift from the ellipsoid to the sphere
32419       * described in [LK12]. */
32420      if (this.es !== 0) {//if (P->es != 0) {
32421        lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));
32422      } else {
32423        lat = p.y;
32424      }
32425
32426      /* Convert the input lat, lon into theta, phi as used by QSC.
32427       * This depends on the cube face and the area on it.
32428       * For the top and bottom face, we can compute theta and phi
32429       * directly from phi, lam. For the other faces, we must use
32430       * unit sphere cartesian coordinates as an intermediate step. */
32431      lon = p.x; //lon = lp.lam;
32432      if (this.face === FACE_ENUM.TOP) {
32433        phi = HALF_PI - lat;
32434        if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {
32435          area.value = AREA_ENUM.AREA_0;
32436          theta = lon - HALF_PI;
32437        } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {
32438          area.value = AREA_ENUM.AREA_1;
32439          theta = (lon > 0.0 ? lon - SPI : lon + SPI);
32440        } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {
32441          area.value = AREA_ENUM.AREA_2;
32442          theta = lon + HALF_PI;
32443        } else {
32444          area.value = AREA_ENUM.AREA_3;
32445          theta = lon;
32446        }
32447      } else if (this.face === FACE_ENUM.BOTTOM) {
32448        phi = HALF_PI + lat;
32449        if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {
32450          area.value = AREA_ENUM.AREA_0;
32451          theta = -lon + HALF_PI;
32452        } else if (lon < FORTPI && lon >= -FORTPI) {
32453          area.value = AREA_ENUM.AREA_1;
32454          theta = -lon;
32455        } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {
32456          area.value = AREA_ENUM.AREA_2;
32457          theta = -lon - HALF_PI;
32458        } else {
32459          area.value = AREA_ENUM.AREA_3;
32460          theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);
32461        }
32462      } else {
32463        var q, r, s;
32464        var sinlat, coslat;
32465        var sinlon, coslon;
32466
32467        if (this.face === FACE_ENUM.RIGHT) {
32468          lon = qsc_shift_lon_origin(lon, +HALF_PI);
32469        } else if (this.face === FACE_ENUM.BACK) {
32470          lon = qsc_shift_lon_origin(lon, +SPI);
32471        } else if (this.face === FACE_ENUM.LEFT) {
32472          lon = qsc_shift_lon_origin(lon, -HALF_PI);
32473        }
32474        sinlat = Math.sin(lat);
32475        coslat = Math.cos(lat);
32476        sinlon = Math.sin(lon);
32477        coslon = Math.cos(lon);
32478        q = coslat * coslon;
32479        r = coslat * sinlon;
32480        s = sinlat;
32481
32482        if (this.face === FACE_ENUM.FRONT) {
32483          phi = Math.acos(q);
32484          theta = qsc_fwd_equat_face_theta(phi, s, r, area);
32485        } else if (this.face === FACE_ENUM.RIGHT) {
32486          phi = Math.acos(r);
32487          theta = qsc_fwd_equat_face_theta(phi, s, -q, area);
32488        } else if (this.face === FACE_ENUM.BACK) {
32489          phi = Math.acos(-q);
32490          theta = qsc_fwd_equat_face_theta(phi, s, -r, area);
32491        } else if (this.face === FACE_ENUM.LEFT) {
32492          phi = Math.acos(-r);
32493          theta = qsc_fwd_equat_face_theta(phi, s, q, area);
32494        } else {
32495          /* Impossible */
32496          phi = theta = 0;
32497          area.value = AREA_ENUM.AREA_0;
32498        }
32499      }
32500
32501      /* Compute mu and nu for the area of definition.
32502       * For mu, see Eq. (3-21) in [OL76], but note the typos:
32503       * compare with Eq. (3-14). For nu, see Eq. (3-38). */
32504      mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));
32505      t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));
32506
32507      /* Apply the result to the real area. */
32508      if (area.value === AREA_ENUM.AREA_1) {
32509        mu += HALF_PI;
32510      } else if (area.value === AREA_ENUM.AREA_2) {
32511        mu += SPI;
32512      } else if (area.value === AREA_ENUM.AREA_3) {
32513        mu += 1.5 * SPI;
32514      }
32515
32516      /* Now compute x, y from mu and nu */
32517      xy.x = t * Math.cos(mu);
32518      xy.y = t * Math.sin(mu);
32519      xy.x = xy.x * this.a + this.x0;
32520      xy.y = xy.y * this.a + this.y0;
32521
32522      p.x = xy.x;
32523      p.y = xy.y;
32524      return p;
32525    }
32526
32527    // QSC inverse equations--mapping x,y to lat/long
32528    // -----------------------------------------------------------------
32529    function inverse$26(p) {
32530      var lp = {lam: 0, phi: 0};
32531      var mu, nu, cosmu, tannu;
32532      var tantheta, theta, cosphi, phi;
32533      var t;
32534      var area = {value: 0};
32535
32536      /* de-offset */
32537      p.x = (p.x - this.x0) / this.a;
32538      p.y = (p.y - this.y0) / this.a;
32539
32540      /* Convert the input x, y to the mu and nu angles as used by QSC.
32541       * This depends on the area of the cube face. */
32542      nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));
32543      mu = Math.atan2(p.y, p.x);
32544      if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {
32545        area.value = AREA_ENUM.AREA_0;
32546      } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {
32547        area.value = AREA_ENUM.AREA_1;
32548        mu -= HALF_PI;
32549      } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {
32550        area.value = AREA_ENUM.AREA_2;
32551        mu = (mu < 0.0 ? mu + SPI : mu - SPI);
32552      } else {
32553        area.value = AREA_ENUM.AREA_3;
32554        mu += HALF_PI;
32555      }
32556
32557      /* Compute phi and theta for the area of definition.
32558       * The inverse projection is not described in the original paper, but some
32559       * good hints can be found here (as of 2011-12-14):
32560       * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302
32561       * (search for "Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>") */
32562      t = (SPI / 12) * Math.tan(mu);
32563      tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));
32564      theta = Math.atan(tantheta);
32565      cosmu = Math.cos(mu);
32566      tannu = Math.tan(nu);
32567      cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));
32568      if (cosphi < -1) {
32569        cosphi = -1;
32570      } else if (cosphi > +1) {
32571        cosphi = +1;
32572      }
32573
32574      /* Apply the result to the real area on the cube face.
32575       * For the top and bottom face, we can compute phi and lam directly.
32576       * For the other faces, we must use unit sphere cartesian coordinates
32577       * as an intermediate step. */
32578      if (this.face === FACE_ENUM.TOP) {
32579        phi = Math.acos(cosphi);
32580        lp.phi = HALF_PI - phi;
32581        if (area.value === AREA_ENUM.AREA_0) {
32582          lp.lam = theta + HALF_PI;
32583        } else if (area.value === AREA_ENUM.AREA_1) {
32584          lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);
32585        } else if (area.value === AREA_ENUM.AREA_2) {
32586          lp.lam = theta - HALF_PI;
32587        } else /* area.value == AREA_ENUM.AREA_3 */ {
32588          lp.lam = theta;
32589        }
32590      } else if (this.face === FACE_ENUM.BOTTOM) {
32591        phi = Math.acos(cosphi);
32592        lp.phi = phi - HALF_PI;
32593        if (area.value === AREA_ENUM.AREA_0) {
32594          lp.lam = -theta + HALF_PI;
32595        } else if (area.value === AREA_ENUM.AREA_1) {
32596          lp.lam = -theta;
32597        } else if (area.value === AREA_ENUM.AREA_2) {
32598          lp.lam = -theta - HALF_PI;
32599        } else /* area.value == AREA_ENUM.AREA_3 */ {
32600          lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);
32601        }
32602      } else {
32603        /* Compute phi and lam via cartesian unit sphere coordinates. */
32604        var q, r, s;
32605        q = cosphi;
32606        t = q * q;
32607        if (t >= 1) {
32608          s = 0;
32609        } else {
32610          s = Math.sqrt(1 - t) * Math.sin(theta);
32611        }
32612        t += s * s;
32613        if (t >= 1) {
32614          r = 0;
32615        } else {
32616          r = Math.sqrt(1 - t);
32617        }
32618        /* Rotate q,r,s into the correct area. */
32619        if (area.value === AREA_ENUM.AREA_1) {
32620          t = r;
32621          r = -s;
32622          s = t;
32623        } else if (area.value === AREA_ENUM.AREA_2) {
32624          r = -r;
32625          s = -s;
32626        } else if (area.value === AREA_ENUM.AREA_3) {
32627          t = r;
32628          r = s;
32629          s = -t;
32630        }
32631        /* Rotate q,r,s into the correct cube face. */
32632        if (this.face === FACE_ENUM.RIGHT) {
32633          t = q;
32634          q = -r;
32635          r = t;
32636        } else if (this.face === FACE_ENUM.BACK) {
32637          q = -q;
32638          r = -r;
32639        } else if (this.face === FACE_ENUM.LEFT) {
32640          t = q;
32641          q = r;
32642          r = -t;
32643        }
32644        /* Now compute phi and lam from the unit sphere coordinates. */
32645        lp.phi = Math.acos(-s) - HALF_PI;
32646        lp.lam = Math.atan2(r, q);
32647        if (this.face === FACE_ENUM.RIGHT) {
32648          lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);
32649        } else if (this.face === FACE_ENUM.BACK) {
32650          lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);
32651        } else if (this.face === FACE_ENUM.LEFT) {
32652          lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);
32653        }
32654      }
32655
32656      /* Apply the shift from the sphere to the ellipsoid as described
32657       * in [LK12]. */
32658      if (this.es !== 0) {
32659        var invert_sign;
32660        var tanphi, xa;
32661        invert_sign = (lp.phi < 0 ? 1 : 0);
32662        tanphi = Math.tan(lp.phi);
32663        xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);
32664        lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));
32665        if (invert_sign) {
32666          lp.phi = -lp.phi;
32667        }
32668      }
32669
32670      lp.lam += this.long0;
32671      p.x = lp.lam;
32672      p.y = lp.phi;
32673      return p;
32674    }
32675
32676    /* Helper function for forward projection: compute the theta angle
32677     * and determine the area number. */
32678    function qsc_fwd_equat_face_theta(phi, y, x, area) {
32679      var theta;
32680      if (phi < EPSLN) {
32681        area.value = AREA_ENUM.AREA_0;
32682        theta = 0.0;
32683      } else {
32684        theta = Math.atan2(y, x);
32685        if (Math.abs(theta) <= FORTPI) {
32686          area.value = AREA_ENUM.AREA_0;
32687        } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {
32688          area.value = AREA_ENUM.AREA_1;
32689          theta -= HALF_PI;
32690        } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {
32691          area.value = AREA_ENUM.AREA_2;
32692          theta = (theta >= 0.0 ? theta - SPI : theta + SPI);
32693        } else {
32694          area.value = AREA_ENUM.AREA_3;
32695          theta += HALF_PI;
32696        }
32697      }
32698      return theta;
32699    }
32700
32701    /* Helper function: shift the longitude. */
32702    function qsc_shift_lon_origin(lon, offset) {
32703      var slon = lon + offset;
32704      if (slon < -SPI) {
32705        slon += TWO_PI;
32706      } else if (slon > +SPI) {
32707        slon -= TWO_PI;
32708      }
32709      return slon;
32710    }
32711
32712    var names$28 = ["Quadrilateralized Spherical Cube", "Quadrilateralized_Spherical_Cube", "qsc"];
32713    var qsc = {
32714      init: init$27,
32715      forward: forward$26,
32716      inverse: inverse$26,
32717      names: names$28
32718    };
32719
32720    // Robinson projection
32721    // Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c
32722    // Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039
32723
32724    var COEFS_X = [
32725        [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],
32726        [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],
32727        [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],
32728        [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],
32729        [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],
32730        [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],
32731        [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],
32732        [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],
32733        [0.9216, -0.00467746, -0.00010457, 4.81243e-06],
32734        [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],
32735        [0.8679, -0.00609363, -0.000113898, 3.32484e-06],
32736        [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],
32737        [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],
32738        [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],
32739        [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],
32740        [0.6732, -0.00986209, -0.000199569, 1.91974e-05],
32741        [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],
32742        [0.5722, -0.00906601, 0.000182, 6.24051e-06],
32743        [0.5322, -0.00677797, 0.000275608, 6.24051e-06]
32744    ];
32745
32746    var COEFS_Y = [
32747        [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],
32748        [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],
32749        [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],
32750        [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],
32751        [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],
32752        [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],
32753        [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],
32754        [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],
32755        [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],
32756        [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],
32757        [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],
32758        [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],
32759        [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],
32760        [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],
32761        [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],
32762        [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],
32763        [0.9394, 0.00840947, -0.000192841, -4.2106e-06],
32764        [0.9761, 0.00616527, -0.000256, -4.2106e-06],
32765        [1.0000, 0.00328947, -0.000319159, -4.2106e-06]
32766    ];
32767
32768    var FXC = 0.8487;
32769    var FYC = 1.3523;
32770    var C1 = R2D/5; // rad to 5-degree interval
32771    var RC1 = 1/C1;
32772    var NODES = 18;
32773
32774    var poly3_val = function(coefs, x) {
32775        return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));
32776    };
32777
32778    var poly3_der = function(coefs, x) {
32779        return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);
32780    };
32781
32782    function newton_rapshon(f_df, start, max_err, iters) {
32783        var x = start;
32784        for (; iters; --iters) {
32785            var upd = f_df(x);
32786            x -= upd;
32787            if (Math.abs(upd) < max_err) {
32788                break;
32789            }
32790        }
32791        return x;
32792    }
32793
32794    function init$28() {
32795        this.x0 = this.x0 || 0;
32796        this.y0 = this.y0 || 0;
32797        this.long0 = this.long0 || 0;
32798        this.es = 0;
32799        this.title = this.title || "Robinson";
32800    }
32801
32802    function forward$27(ll) {
32803        var lon = adjust_lon(ll.x - this.long0);
32804
32805        var dphi = Math.abs(ll.y);
32806        var i = Math.floor(dphi * C1);
32807        if (i < 0) {
32808            i = 0;
32809        } else if (i >= NODES) {
32810            i = NODES - 1;
32811        }
32812        dphi = R2D * (dphi - RC1 * i);
32813        var xy = {
32814            x: poly3_val(COEFS_X[i], dphi) * lon,
32815            y: poly3_val(COEFS_Y[i], dphi)
32816        };
32817        if (ll.y < 0) {
32818            xy.y = -xy.y;
32819        }
32820
32821        xy.x = xy.x * this.a * FXC + this.x0;
32822        xy.y = xy.y * this.a * FYC + this.y0;
32823        return xy;
32824    }
32825
32826    function inverse$27(xy) {
32827        var ll = {
32828            x: (xy.x - this.x0) / (this.a * FXC),
32829            y: Math.abs(xy.y - this.y0) / (this.a * FYC)
32830        };
32831
32832        if (ll.y >= 1) { // pathologic case
32833            ll.x /= COEFS_X[NODES][0];
32834            ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;
32835        } else {
32836            // find table interval
32837            var i = Math.floor(ll.y * NODES);
32838            if (i < 0) {
32839                i = 0;
32840            } else if (i >= NODES) {
32841                i = NODES - 1;
32842            }
32843            for (;;) {
32844                if (COEFS_Y[i][0] > ll.y) {
32845                    --i;
32846                } else if (COEFS_Y[i+1][0] <= ll.y) {
32847                    ++i;
32848                } else {
32849                    break;
32850                }
32851            }
32852            // linear interpolation in 5 degree interval
32853            var coefs = COEFS_Y[i];
32854            var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);
32855            // find t so that poly3_val(coefs, t) = ll.y
32856            t = newton_rapshon(function(x) {
32857                return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);
32858            }, t, EPSLN, 100);
32859
32860            ll.x /= poly3_val(COEFS_X[i], t);
32861            ll.y = (5 * i + t) * D2R;
32862            if (xy.y < 0) {
32863                ll.y = -ll.y;
32864            }
32865        }
32866
32867        ll.x = adjust_lon(ll.x + this.long0);
32868        return ll;
32869    }
32870
32871    var names$29 = ["Robinson", "robin"];
32872    var robin = {
32873      init: init$28,
32874      forward: forward$27,
32875      inverse: inverse$27,
32876      names: names$29
32877    };
32878
32879    function init$29() {
32880        this.name = 'geocent';
32881
32882    }
32883
32884    function forward$28(p) {
32885        var point = geodeticToGeocentric(p, this.es, this.a);
32886        return point;
32887    }
32888
32889    function inverse$28(p) {
32890        var point = geocentricToGeodetic(p, this.es, this.a, this.b);
32891        return point;
32892    }
32893
32894    var names$30 = ["Geocentric", 'geocentric', "geocent", "Geocent"];
32895    var geocent = {
32896        init: init$29,
32897        forward: forward$28,
32898        inverse: inverse$28,
32899        names: names$30
32900    };
32901
32902    var mode = {
32903      N_POLE: 0,
32904      S_POLE: 1,
32905      EQUIT: 2,
32906      OBLIQ: 3
32907    };
32908
32909    var params = {
32910      h:     { def: 100000, num: true },           // default is Karman line, no default in PROJ.7
32911      azi:   { def: 0, num: true, degrees: true }, // default is North
32912      tilt:  { def: 0, num: true, degrees: true }, // default is Nadir
32913      long0: { def: 0, num: true },                // default is Greenwich, conversion to rad is automatic
32914      lat0:  { def: 0, num: true }                 // default is Equator, conversion to rad is automatic
32915    };
32916
32917    function init$30() {
32918      Object.keys(params).forEach(function (p) {
32919        if (typeof this[p] === "undefined") {
32920          this[p] = params[p].def;
32921        } else if (params[p].num && isNaN(this[p])) {
32922          throw new Error("Invalid parameter value, must be numeric " + p + " = " + this[p]);
32923        } else if (params[p].num) {
32924          this[p] = parseFloat(this[p]);
32925        }
32926        if (params[p].degrees) {
32927          this[p] = this[p] * D2R;
32928        }
32929      }.bind(this));
32930
32931      if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {
32932        this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;
32933      } else if (Math.abs(this.lat0) < EPSLN) {
32934        this.mode = mode.EQUIT;
32935      } else {
32936        this.mode = mode.OBLIQ;
32937        this.sinph0 = Math.sin(this.lat0);
32938        this.cosph0 = Math.cos(this.lat0);
32939      }
32940
32941      this.pn1 = this.h / this.a;  // Normalize relative to the Earth's radius
32942
32943      if (this.pn1 <= 0 || this.pn1 > 1e10) {
32944        throw new Error("Invalid height");
32945      }
32946      
32947      this.p = 1 + this.pn1;
32948      this.rp = 1 / this.p;
32949      this.h1 = 1 / this.pn1;
32950      this.pfact = (this.p + 1) * this.h1;
32951      this.es = 0;
32952
32953      var omega = this.tilt;
32954      var gamma = this.azi;
32955      this.cg = Math.cos(gamma);
32956      this.sg = Math.sin(gamma);
32957      this.cw = Math.cos(omega);
32958      this.sw = Math.sin(omega);
32959    }
32960
32961    function forward$29(p) {
32962      p.x -= this.long0;
32963      var sinphi = Math.sin(p.y);
32964      var cosphi = Math.cos(p.y);
32965      var coslam = Math.cos(p.x);
32966      var x, y;
32967      switch (this.mode) {
32968        case mode.OBLIQ:
32969          y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;
32970          break;
32971        case mode.EQUIT:
32972          y = cosphi * coslam;
32973          break;
32974        case mode.S_POLE:
32975          y = -sinphi;
32976          break;
32977        case mode.N_POLE:
32978          y = sinphi;
32979          break;
32980      }
32981      y = this.pn1 / (this.p - y);
32982      x = y * cosphi * Math.sin(p.x);
32983
32984      switch (this.mode) {
32985        case mode.OBLIQ:
32986          y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;
32987          break;
32988        case mode.EQUIT:
32989          y *= sinphi;
32990          break;
32991        case mode.N_POLE:
32992          y *= -(cosphi * coslam);
32993          break;
32994        case mode.S_POLE:
32995          y *= cosphi * coslam;
32996          break;
32997      }
32998
32999      // Tilt 
33000      var yt, ba;
33001      yt = y * this.cg + x * this.sg;
33002      ba = 1 / (yt * this.sw * this.h1 + this.cw);
33003      x = (x * this.cg - y * this.sg) * this.cw * ba;
33004      y = yt * ba;
33005
33006      p.x = x * this.a;
33007      p.y = y * this.a;
33008      return p;
33009    }
33010
33011    function inverse$29(p) {
33012      p.x /= this.a;
33013      p.y /= this.a;
33014      var r = { x: p.x, y: p.y };
33015
33016      // Un-Tilt
33017      var bm, bq, yt;
33018      yt = 1 / (this.pn1 - p.y * this.sw);
33019      bm = this.pn1 * p.x * yt;
33020      bq = this.pn1 * p.y * this.cw * yt;
33021      p.x = bm * this.cg + bq * this.sg;
33022      p.y = bq * this.cg - bm * this.sg;
33023
33024      var rh = hypot(p.x, p.y);
33025      if (Math.abs(rh) < EPSLN) {
33026        r.x = 0;
33027        r.y = p.y;
33028      } else {
33029        var cosz, sinz;
33030        sinz = 1 - rh * rh * this.pfact;
33031        sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);
33032        cosz = Math.sqrt(1 - sinz * sinz);
33033        switch (this.mode) {
33034          case mode.OBLIQ:
33035            r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);
33036            p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;
33037            p.x *= sinz * this.cosph0;
33038            break;
33039          case mode.EQUIT:
33040            r.y = Math.asin(p.y * sinz / rh);
33041            p.y = cosz * rh;
33042            p.x *= sinz;
33043            break;
33044          case mode.N_POLE:
33045            r.y = Math.asin(cosz);
33046            p.y = -p.y;
33047            break;
33048          case mode.S_POLE:
33049            r.y = -Math.asin(cosz);
33050            break;
33051        }
33052        r.x = Math.atan2(p.x, p.y);
33053      }
33054
33055      p.x = r.x + this.long0;
33056      p.y = r.y;
33057      return p;
33058    }
33059
33060    var names$31 = ["Tilted_Perspective", "tpers"];
33061    var tpers = {
33062      init: init$30,
33063      forward: forward$29,
33064      inverse: inverse$29,
33065      names: names$31
33066    };
33067
33068    function init$31() {
33069        this.flip_axis = (this.sweep === 'x' ? 1 : 0);
33070        this.h = Number(this.h);
33071        this.radius_g_1 = this.h / this.a;
33072
33073        if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {
33074            throw new Error();
33075        }
33076
33077        this.radius_g = 1.0 + this.radius_g_1;
33078        this.C = this.radius_g * this.radius_g - 1.0;
33079
33080        if (this.es !== 0.0) {
33081            var one_es = 1.0 - this.es;
33082            var rone_es = 1 / one_es;
33083
33084            this.radius_p = Math.sqrt(one_es);
33085            this.radius_p2 = one_es;
33086            this.radius_p_inv2 = rone_es;
33087
33088            this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.
33089        } else {
33090            this.radius_p = 1.0;
33091            this.radius_p2 = 1.0;
33092            this.radius_p_inv2 = 1.0;
33093
33094            this.shape = 'sphere';  // Use as a condition in the forward and inverse functions.
33095        }
33096
33097        if (!this.title) {
33098            this.title = "Geostationary Satellite View";
33099        }
33100    }
33101
33102    function forward$30(p) {
33103        var lon = p.x;
33104        var lat = p.y;
33105        var tmp, v_x, v_y, v_z;
33106        lon = lon - this.long0;
33107
33108        if (this.shape === 'ellipse') {
33109            lat = Math.atan(this.radius_p2 * Math.tan(lat));
33110            var r = this.radius_p / hypot(this.radius_p * Math.cos(lat), Math.sin(lat));
33111
33112            v_x = r * Math.cos(lon) * Math.cos(lat);
33113            v_y = r * Math.sin(lon) * Math.cos(lat);
33114            v_z = r * Math.sin(lat);
33115
33116            if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {
33117                p.x = Number.NaN;
33118                p.y = Number.NaN;
33119                return p;
33120            }
33121
33122            tmp = this.radius_g - v_x;
33123            if (this.flip_axis) {
33124                p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));
33125                p.y = this.radius_g_1 * Math.atan(v_z / tmp);
33126            } else {
33127                p.x = this.radius_g_1 * Math.atan(v_y / tmp);
33128                p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));
33129            }
33130        } else if (this.shape === 'sphere') {
33131            tmp = Math.cos(lat);
33132            v_x = Math.cos(lon) * tmp;
33133            v_y = Math.sin(lon) * tmp;
33134            v_z = Math.sin(lat);
33135            tmp = this.radius_g - v_x;
33136
33137            if (this.flip_axis) {
33138                p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));
33139                p.y = this.radius_g_1 * Math.atan(v_z / tmp);
33140            } else {
33141                p.x = this.radius_g_1 * Math.atan(v_y / tmp);
33142                p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));
33143            }
33144        }
33145        p.x = p.x * this.a;
33146        p.y = p.y * this.a;
33147        return p;
33148    }
33149
33150    function inverse$30(p) {
33151        var v_x = -1.0;
33152        var v_y = 0.0;
33153        var v_z = 0.0;
33154        var a, b, det, k;
33155
33156        p.x = p.x / this.a;
33157        p.y = p.y / this.a;
33158
33159        if (this.shape === 'ellipse') {
33160            if (this.flip_axis) {
33161                v_z = Math.tan(p.y / this.radius_g_1);
33162                v_y = Math.tan(p.x / this.radius_g_1) * hypot(1.0, v_z);
33163            } else {
33164                v_y = Math.tan(p.x / this.radius_g_1);
33165                v_z = Math.tan(p.y / this.radius_g_1) * hypot(1.0, v_y);
33166            }
33167
33168            var v_zp = v_z / this.radius_p;
33169            a = v_y * v_y + v_zp * v_zp + v_x * v_x;
33170            b = 2 * this.radius_g * v_x;
33171            det = (b * b) - 4 * a * this.C;
33172
33173            if (det < 0.0) {
33174                p.x = Number.NaN;
33175                p.y = Number.NaN;
33176                return p;
33177            }
33178
33179            k = (-b - Math.sqrt(det)) / (2.0 * a);
33180            v_x = this.radius_g + k * v_x;
33181            v_y *= k;
33182            v_z *= k;
33183
33184            p.x = Math.atan2(v_y, v_x);
33185            p.y = Math.atan(v_z * Math.cos(p.x) / v_x);
33186            p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));
33187        } else if (this.shape === 'sphere') {
33188            if (this.flip_axis) {
33189                v_z = Math.tan(p.y / this.radius_g_1);
33190                v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);
33191            } else {
33192                v_y = Math.tan(p.x / this.radius_g_1);
33193                v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);
33194            }
33195
33196            a = v_y * v_y + v_z * v_z + v_x * v_x;
33197            b = 2 * this.radius_g * v_x;
33198            det = (b * b) - 4 * a * this.C;
33199            if (det < 0.0) {
33200                p.x = Number.NaN;
33201                p.y = Number.NaN;
33202                return p;
33203            }
33204
33205            k = (-b - Math.sqrt(det)) / (2.0 * a);
33206            v_x = this.radius_g + k * v_x;
33207            v_y *= k;
33208            v_z *= k;
33209
33210            p.x = Math.atan2(v_y, v_x);
33211            p.y = Math.atan(v_z * Math.cos(p.x) / v_x);
33212        }
33213        p.x = p.x + this.long0;
33214        return p;
33215    }
33216
33217    var names$32 = ["Geostationary Satellite View", "Geostationary_Satellite", "geos"];
33218    var geos = {
33219        init: init$31,
33220        forward: forward$30,
33221        inverse: inverse$30,
33222        names: names$32,
33223    };
33224
33225    /**
33226     * Copyright 2018 Bernie Jenny, Monash University, Melbourne, Australia.
33227     *
33228     * Licensed under the Apache License, Version 2.0 (the "License");
33229     * you may not use this file except in compliance with the License.
33230     * You may obtain a copy of the License at
33231     *
33232     * http://www.apache.org/licenses/LICENSE-2.0
33233     *
33234     * Unless required by applicable law or agreed to in writing, software
33235     * distributed under the License is distributed on an "AS IS" BASIS,
33236     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
33237     * See the License for the specific language governing permissions and
33238     * limitations under the License.
33239     *
33240     * Equal Earth is a projection inspired by the Robinson projection, but unlike
33241     * the Robinson projection retains the relative size of areas. The projection
33242     * was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny.
33243     *
33244     * Publication:
33245     * Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map
33246     * projection, International Journal of Geographical Information Science,
33247     * DOI: 10.1080/13658816.2018.1504949
33248     *
33249     * Code released August 2018
33250     * Ported to JavaScript and adapted for mapshaper-proj by Matthew Bloch August 2018
33251     * Modified for proj4js by Andreas Hocevar by Andreas Hocevar March 2024
33252     */
33253
33254    var A1 = 1.340264;
33255    var A2 = -0.081106;
33256    var A3 = 0.000893;
33257    var A4 = 0.003796;
33258    var M = Math.sqrt(3) / 2.0;
33259
33260    function init$32() {
33261      this.es = 0;
33262      this.long0 = this.long0 !== undefined ? this.long0 : 0;
33263    }
33264
33265    function forward$31(p) {
33266      var lam = adjust_lon(p.x - this.long0);
33267      var phi = p.y;
33268      var paramLat = Math.asin(M * Math.sin(phi)),
33269      paramLatSq = paramLat * paramLat,
33270      paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;
33271      p.x = lam * Math.cos(paramLat) /
33272      (M * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)));
33273      p.y = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq));
33274
33275      p.x = this.a * p.x + this.x0;
33276      p.y = this.a * p.y + this.y0;
33277      return p;
33278    }
33279
33280    function inverse$31(p) {
33281      p.x = (p.x - this.x0) / this.a;
33282      p.y = (p.y - this.y0) / this.a;
33283
33284      var EPS = 1e-9,
33285          NITER = 12,
33286          paramLat = p.y,
33287          paramLatSq, paramLatPow6, fy, fpy, dlat, i;
33288
33289      for (i = 0; i < NITER; ++i) {
33290        paramLatSq = paramLat * paramLat;
33291        paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;
33292        fy = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq)) - p.y;
33293        fpy = A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq);
33294        paramLat -= dlat = fy / fpy;
33295        if (Math.abs(dlat) < EPS) {
33296            break;
33297        }
33298      }
33299      paramLatSq = paramLat * paramLat;
33300      paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;
33301      p.x = M * p.x * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)) /
33302              Math.cos(paramLat);
33303      p.y = Math.asin(Math.sin(paramLat) / M);
33304
33305      p.x = adjust_lon(p.x + this.long0);
33306      return p;
33307    }
33308
33309    var names$33 = ["eqearth", "Equal Earth", "Equal_Earth"];
33310    var eqearth = {
33311      init: init$32,
33312      forward: forward$31,
33313      inverse: inverse$31,
33314      names: names$33
33315    };
33316
33317    var includedProjections = function(proj4){
33318      proj4.Proj.projections.add(tmerc);
33319      proj4.Proj.projections.add(etmerc);
33320      proj4.Proj.projections.add(utm);
33321      proj4.Proj.projections.add(sterea);
33322      proj4.Proj.projections.add(stere);
33323      proj4.Proj.projections.add(somerc);
33324      proj4.Proj.projections.add(omerc);
33325      proj4.Proj.projections.add(lcc);
33326      proj4.Proj.projections.add(krovak);
33327      proj4.Proj.projections.add(cass);
33328      proj4.Proj.projections.add(laea);
33329      proj4.Proj.projections.add(aea);
33330      proj4.Proj.projections.add(gnom);
33331      proj4.Proj.projections.add(cea);
33332      proj4.Proj.projections.add(eqc);
33333      proj4.Proj.projections.add(poly);
33334      proj4.Proj.projections.add(nzmg);
33335      proj4.Proj.projections.add(mill);
33336      proj4.Proj.projections.add(sinu);
33337      proj4.Proj.projections.add(moll);
33338      proj4.Proj.projections.add(eqdc);
33339      proj4.Proj.projections.add(vandg);
33340      proj4.Proj.projections.add(aeqd);
33341      proj4.Proj.projections.add(ortho);
33342      proj4.Proj.projections.add(qsc);
33343      proj4.Proj.projections.add(robin);
33344      proj4.Proj.projections.add(geocent);
33345      proj4.Proj.projections.add(tpers);
33346      proj4.Proj.projections.add(geos);
33347      proj4.Proj.projections.add(eqearth);
33348    };
33349
33350    proj4$1.defaultDatum = 'WGS84'; //default datum
33351    proj4$1.Proj = Projection;
33352    proj4$1.WGS84 = new proj4$1.Proj('WGS84');
33353    proj4$1.Point = Point;
33354    proj4$1.toPoint = toPoint;
33355    proj4$1.defs = defs;
33356    proj4$1.nadgrid = nadgrid;
33357    proj4$1.transform = transform;
33358    proj4$1.mgrs = mgrs;
33359    proj4$1.version = '2.11.0';
33360    includedProjections(proj4$1);
33361
33362    return proj4$1;
33363
33364})));
33365
33366},{}],139:[function(require,module,exports){
33367'use strict';
33368
33369var GetIntrinsic = require('get-intrinsic');
33370var $concat = GetIntrinsic('%Array.prototype.concat%');
33371
33372var callBind = require('call-bind');
33373
33374var callBound = require('call-bind/callBound');
33375var $slice = callBound('Array.prototype.slice');
33376
33377var hasSymbols = require('has-symbols/shams')();
33378var isConcatSpreadable = hasSymbols && Symbol.isConcatSpreadable;
33379
33380/** @type {never[]} */ var empty = [];
33381var $concatApply = isConcatSpreadable ? callBind.apply($concat, empty) : null;
33382
33383// eslint-disable-next-line no-extra-parens
33384var isArray = isConcatSpreadable ? /** @type {(value: unknown) => value is unknown[]} */ (require('isarray')) : null;
33385
33386/** @type {import('.')} */
33387module.exports = isConcatSpreadable
33388	// eslint-disable-next-line no-unused-vars
33389	? function safeArrayConcat(item) {
33390		for (var i = 0; i < arguments.length; i += 1) {
33391			/** @type {typeof item} */ var arg = arguments[i];
33392			// @ts-expect-error ts(2538) see https://github.com/microsoft/TypeScript/issues/9998#issuecomment-1890787975; works if `const`
33393			if (arg && typeof arg === 'object' && typeof arg[isConcatSpreadable] === 'boolean') {
33394				// @ts-expect-error ts(7015) TS doesn't yet support Symbol indexing
33395				if (!empty[isConcatSpreadable]) {
33396					// @ts-expect-error ts(7015) TS doesn't yet support Symbol indexing
33397					empty[isConcatSpreadable] = true;
33398				}
33399				// @ts-expect-error ts(2721) ts(18047) not sure why TS can't figure out this can't be null
33400				var arr = isArray(arg) ? $slice(arg) : [arg];
33401				// @ts-expect-error ts(7015) TS can't handle expandos on an array
33402				arr[isConcatSpreadable] = true; // shadow the property. TODO: use [[Define]]
33403				arguments[i] = arr;
33404			}
33405		}
33406		// @ts-expect-error ts(2345) https://github.com/microsoft/TypeScript/issues/57164 TS doesn't understand that apply can take an arguments object
33407		return $concatApply(arguments);
33408	}
33409	: callBind($concat, empty);
33410
33411},{"call-bind":14,"call-bind/callBound":13,"get-intrinsic":101,"has-symbols/shams":106,"isarray":140}],140:[function(require,module,exports){
33412var toString = {}.toString;
33413
33414module.exports = Array.isArray || function (arr) {
33415  return toString.call(arr) == '[object Array]';
33416};
33417
33418},{}],141:[function(require,module,exports){
33419'use strict';
33420
33421var callBound = require('call-bind/callBound');
33422var isRegex = require('is-regex');
33423
33424var $exec = callBound('RegExp.prototype.exec');
33425var $TypeError = require('es-errors/type');
33426
33427module.exports = function regexTester(regex) {
33428	if (!isRegex(regex)) {
33429		throw new $TypeError('`regex` must be a RegExp');
33430	}
33431	return function test(s) {
33432		return $exec(regex, s) !== null;
33433	};
33434};
33435
33436},{"call-bind/callBound":13,"es-errors/type":77,"is-regex":117}],142:[function(require,module,exports){
33437'use strict';
33438
33439var GetIntrinsic = require('get-intrinsic');
33440var define = require('define-data-property');
33441var hasDescriptors = require('has-property-descriptors')();
33442var gOPD = require('gopd');
33443
33444var $TypeError = require('es-errors/type');
33445var $floor = GetIntrinsic('%Math.floor%');
33446
33447/** @type {import('.')} */
33448module.exports = function setFunctionLength(fn, length) {
33449	if (typeof fn !== 'function') {
33450		throw new $TypeError('`fn` is not a function');
33451	}
33452	if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {
33453		throw new $TypeError('`length` must be a positive 32-bit integer');
33454	}
33455
33456	var loose = arguments.length > 2 && !!arguments[2];
33457
33458	var functionLengthIsConfigurable = true;
33459	var functionLengthIsWritable = true;
33460	if ('length' in fn && gOPD) {
33461		var desc = gOPD(fn, 'length');
33462		if (desc && !desc.configurable) {
33463			functionLengthIsConfigurable = false;
33464		}
33465		if (desc && !desc.writable) {
33466			functionLengthIsWritable = false;
33467		}
33468	}
33469
33470	if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {
33471		if (hasDescriptors) {
33472			define(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);
33473		} else {
33474			define(/** @type {Parameters<define>[0]} */ (fn), 'length', length);
33475		}
33476	}
33477	return fn;
33478};
33479
33480},{"define-data-property":15,"es-errors/type":77,"get-intrinsic":101,"gopd":102,"has-property-descriptors":103}],143:[function(require,module,exports){
33481'use strict';
33482
33483var define = require('define-properties');
33484var ToInteger = require('es-abstract/2019/ToInteger');
33485var ToObject = require('es-abstract/2019/ToObject');
33486var ToString = require('es-abstract/2019/ToString');
33487var callBind = require('es-abstract/helpers/callBind');
33488
33489var atShim = function at(pos) {
33490	var O = ToObject(this);
33491	var S = ToString(O);
33492	var position = ToInteger(pos);
33493	var size = S.length;
33494	if (position < 0 || position >= size) {
33495		return '';
33496	}
33497	// Get the first code unit and code unit value
33498	var cuFirst = S.charCodeAt(position);
33499	var cuSecond;
33500	var nextIndex = position + 1;
33501	var len = 1;
33502	// Check if it’s the start of a surrogate pair.
33503	var isHighSurrogate = cuFirst >= 0xD800 && cuFirst <= 0xDBFF;
33504	if (isHighSurrogate && size > nextIndex /* there is a next code unit */) {
33505		cuSecond = S.charCodeAt(nextIndex);
33506		if (cuSecond >= 0xDC00 && cuSecond <= 0xDFFF) { // low surrogate
33507			len = 2;
33508		}
33509	}
33510	return S.slice(position, position + len);
33511};
33512
33513var boundAt = callBind(atShim);
33514define(boundAt, {
33515	method: atShim,
33516	shim: function shimStringPrototypeAt() {
33517		define(String.prototype, { at: atShim });
33518		return String.prototype.at;
33519	}
33520});
33521
33522module.exports = boundAt;
33523
33524},{"define-properties":16,"es-abstract/2019/ToInteger":19,"es-abstract/2019/ToObject":21,"es-abstract/2019/ToString":23,"es-abstract/helpers/callBind":61}],144:[function(require,module,exports){
33525'use strict';
33526
33527var ToLength = require('es-abstract/2024/ToLength');
33528var ToString = require('es-abstract/2024/ToString');
33529var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
33530var callBound = require('call-bind/callBound');
33531
33532var $slice = callBound('String.prototype.slice');
33533
33534module.exports = function padEnd(maxLength) {
33535	var O = RequireObjectCoercible(this);
33536	var S = ToString(O);
33537	var stringLength = ToLength(S.length);
33538	var fillString;
33539	if (arguments.length > 1) {
33540		fillString = arguments[1];
33541	}
33542	var filler = typeof fillString === 'undefined' ? '' : ToString(fillString);
33543	if (filler === '') {
33544		filler = ' ';
33545	}
33546	var intMaxLength = ToLength(maxLength);
33547	if (intMaxLength <= stringLength) {
33548		return S;
33549	}
33550	var fillLen = intMaxLength - stringLength;
33551	while (filler.length < fillLen) {
33552		var fLen = filler.length;
33553		var remainingCodeUnits = fillLen - fLen;
33554		filler += fLen > remainingCodeUnits ? $slice(filler, 0, remainingCodeUnits) : filler;
33555	}
33556
33557	var truncatedStringFiller = filler.length > fillLen ? $slice(filler, 0, fillLen) : filler;
33558	return S + truncatedStringFiller;
33559};
33560
33561},{"call-bind/callBound":13,"es-abstract/2024/ToLength":44,"es-abstract/2024/ToString":48,"es-object-atoms/RequireObjectCoercible":79}],145:[function(require,module,exports){
33562'use strict';
33563
33564var define = require('define-properties');
33565var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
33566var callBind = require('call-bind');
33567
33568var implementation = require('./implementation');
33569var getPolyfill = require('./polyfill');
33570var shim = require('./shim');
33571
33572var bound = callBind.apply(getPolyfill());
33573
33574var boundPadEnd = function padEnd(str, maxLength) {
33575	RequireObjectCoercible(str);
33576	var args = arguments.length > 2 ? [maxLength, arguments[2]] : [maxLength];
33577	return bound(str, args);
33578};
33579
33580define(boundPadEnd, {
33581	getPolyfill: getPolyfill,
33582	implementation: implementation,
33583	shim: shim
33584});
33585
33586module.exports = boundPadEnd;
33587
33588},{"./implementation":144,"./polyfill":146,"./shim":147,"call-bind":14,"define-properties":16,"es-object-atoms/RequireObjectCoercible":79}],146:[function(require,module,exports){
33589'use strict';
33590
33591var implementation = require('./implementation');
33592
33593module.exports = function getPolyfill() {
33594	return typeof String.prototype.padEnd === 'function' ? String.prototype.padEnd : implementation;
33595};
33596
33597},{"./implementation":144}],147:[function(require,module,exports){
33598'use strict';
33599
33600var getPolyfill = require('./polyfill');
33601var define = require('define-properties');
33602
33603module.exports = function shimPadEnd() {
33604	var polyfill = getPolyfill();
33605	define(String.prototype, { padEnd: polyfill }, {
33606		padEnd: function testPadEnd() {
33607			return String.prototype.padEnd !== polyfill;
33608		}
33609	});
33610	return polyfill;
33611};
33612
33613},{"./polyfill":146,"define-properties":16}],148:[function(require,module,exports){
33614'use strict';
33615
33616var ToLength = require('es-abstract/2024/ToLength');
33617var ToString = require('es-abstract/2024/ToString');
33618var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
33619
33620var callBound = require('call-bind/callBound');
33621var $slice = callBound('String.prototype.slice');
33622
33623module.exports = function padStart(maxLength) {
33624	var O = RequireObjectCoercible(this);
33625	var S = ToString(O);
33626	var stringLength = ToLength(S.length);
33627	var fillString;
33628	if (arguments.length > 1) {
33629		fillString = arguments[1];
33630	}
33631	var filler = typeof fillString === 'undefined' ? '' : ToString(fillStr
33631ing);
33632	if (filler === '') {
33633		filler = ' ';
33634	}
33635	var intMaxLength = ToLength(maxLength);
33636	if (intMaxLength <= stringLength) {
33637		return S;
33638	}
33639	var fillLen = intMaxLength - stringLength;
33640	while (filler.length < fillLen) {
33641		var fLen = filler.length;
33642		var remainingCodeUnits = fillLen - fLen;
33643		filler += fLen > remainingCodeUnits ? $slice(filler, 0, remainingCodeUnits) : filler;
33644	}
33645
33646	var truncatedStringFiller = filler.length > fillLen ? $slice(filler, 0, fillLen) : filler;
33647	return truncatedStringFiller + S;
33648};
33649
33650},{"call-bind/callBound":13,"es-abstract/2024/ToLength":44,"es-abstract/2024/ToString":48,"es-object-atoms/RequireObjectCoercible":79}],149:[function(require,module,exports){
33651'use strict';
33652
33653var define = require('define-properties');
33654var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
33655var callBind = require('call-bind');
33656
33657var implementation = require('./implementation');
33658var getPolyfill = require('./polyfill');
33659var shim = require('./shim');
33660
33661var bound = callBind.apply(getPolyfill());
33662
33663var boundPadStart = function padStart(str, maxLength) {
33664	RequireObjectCoercible(str);
33665	var args = arguments.length > 2 ? [maxLength, arguments[2]] : [maxLength];
33666	return bound(str, args);
33667};
33668
33669define(boundPadStart, {
33670	getPolyfill: getPolyfill,
33671	implementation: implementation,
33672	shim: shim
33673});
33674
33675module.exports = boundPadStart;
33676
33677},{"./implementation":148,"./polyfill":150,"./shim":151,"call-bind":14,"define-properties":16,"es-object-atoms/RequireObjectCoercible":79}],150:[function(require,module,exports){
33678'use strict';
33679
33680var implementation = require('./implementation');
33681
33682module.exports = function getPolyfill() {
33683	return typeof String.prototype.padStart === 'function' ? String.prototype.padStart : implementation;
33684};
33685
33686},{"./implementation":148}],151:[function(require,module,exports){
33687'use strict';
33688
33689var getPolyfill = require('./polyfill');
33690var define = require('define-properties');
33691
33692module.exports = function shimPadStart() {
33693	var polyfill = getPolyfill();
33694	define(String.prototype, { padStart: polyfill }, {
33695		padStart: function testPadStart() {
33696			return String.prototype.padStart !== polyfill;
33697		}
33698	});
33699	return polyfill;
33700};
33701
33702},{"./polyfill":150,"define-properties":16}],152:[function(require,module,exports){
33703'use strict';
33704
33705var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
33706var ToString = require('es-abstract/2024/ToString');
33707var callBound = require('call-bind/callBound');
33708var $replace = callBound('String.prototype.replace');
33709
33710var mvsIsWS = (/^\s$/).test('\u180E');
33711/* eslint-disable no-control-regex */
33712var leftWhitespace = mvsIsWS
33713	? /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/
33714	: /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/;
33715var rightWhitespace = mvsIsWS
33716	? /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/
33717	: /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/;
33718/* eslint-enable no-control-regex */
33719
33720module.exports = function trim() {
33721	var S = ToString(RequireObjectCoercible(this));
33722	return $replace($replace(S, leftWhitespace, ''), rightWhitespace, '');
33723};
33724
33725},{"call-bind/callBound":13,"es-abstract/2024/ToString":48,"es-object-atoms/RequireObjectCoercible":79}],153:[function(require,module,exports){
33726'use strict';
33727
33728var callBind = require('call-bind');
33729var define = require('define-properties');
33730var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
33731
33732var implementation = require('./implementation');
33733var getPolyfill = require('./polyfill');
33734var shim = require('./shim');
33735
33736var bound = callBind(getPolyfill());
33737var boundMethod = function trim(receiver) {
33738	RequireObjectCoercible(receiver);
33739	return bound(receiver);
33740};
33741
33742define(boundMethod, {
33743	getPolyfill: getPolyfill,
33744	implementation: implementation,
33745	shim: shim
33746});
33747
33748module.exports = boundMethod;
33749
33750},{"./implementation":152,"./polyfill":154,"./shim":155,"call-bind":14,"define-properties":16,"es-object-atoms/RequireObjectCoercible":79}],154:[function(require,module,exports){
33751'use strict';
33752
33753var implementation = require('./implementation');
33754
33755var zeroWidthSpace = '\u200b';
33756var mongolianVowelSeparator = '\u180E';
33757
33758module.exports = function getPolyfill() {
33759	if (
33760		String.prototype.trim
33761		&& zeroWidthSpace.trim() === zeroWidthSpace
33762		&& mongolianVowelSeparator.trim() === mongolianVowelSeparator
33763		&& ('_' + mongolianVowelSeparator).trim() === ('_' + mongolianVowelSeparator)
33764		&& (mongolianVowelSeparator + '_').trim() === (mongolianVowelSeparator + '_')
33765	) {
33766		return String.prototype.trim;
33767	}
33768	return implementation;
33769};
33770
33771},{"./implementation":152}],155:[function(require,module,exports){
33772'use strict';
33773
33774var define = require('define-properties');
33775var getPolyfill = require('./polyfill');
33776
33777module.exports = function shimStringTrim() {
33778	var polyfill = getPolyfill();
33779	define(String.prototype, { trim: polyfill }, {
33780		trim: function testTrim() {
33781			return String.prototype.trim !== polyfill;
33782		}
33783	});
33784	return polyfill;
33785};
33786
33787},{"./polyfill":154,"define-properties":16}],156:[function(require,module,exports){
33788'use strict';
33789
33790var callBound = require('call-bind/callBound');
33791var $replace = callBound('String.prototype.replace');
33792
33793var mvsIsWS = (/^\s$/).test('\u180E');
33794/* eslint-disable no-control-regex */
33795var endWhitespace = mvsIsWS
33796	? /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/
33797	: /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/;
33798/* eslint-enable no-control-regex */
33799
33800module.exports = function trimEnd() {
33801	return $replace(this, endWhitespace, '');
33802};
33803
33804},{"call-bind/callBound":13}],157:[function(require,module,exports){
33805'use strict';
33806
33807module.exports = require('string.prototype.trimstart/implementation');
33808
33809},{"string.prototype.trimstart/implementation":165}],158:[function(require,module,exports){
33810'use strict';
33811
33812var callBind = require('call-bind');
33813var define = require('define-properties');
33814
33815var implementation = require('./implementation');
33816var getPolyfill = require('./polyfill');
33817var shim = require('./shim');
33818
33819var bound = callBind(getPolyfill());
33820
33821define(bound, {
33822	getPolyfill: getPolyfill,
33823	implementation: implementation,
33824	shim: shim
33825});
33826
33827module.exports = bound;
33828
33829},{"./implementation":157,"./polyfill":159,"./shim":160,"call-bind":14,"define-properties":16}],159:[function(require,module,exports){
33830'use strict';
33831
33832var implementation = require('./implementation');
33833
33834module.exports = function getPolyfill() {
33835	if (!String.prototype.trimLeft) {
33836		return implementation;
33837	}
33838	var zeroWidthSpace = '\u200b';
33839	if (zeroWidthSpace.trimLeft() !== zeroWidthSpace) {
33840		return implementation;
33841	}
33842	return String.prototype.trimLeft;
33843};
33844
33845},{"./implementation":157}],160:[function(require,module,exports){
33846'use strict';
33847
33848var define = require('define-properties');
33849var getPolyfill = require('./polyfill');
33850
33851module.exports = function shimTrimLeft() {
33852	var polyfill = getPolyfill();
33853	define(
33854		String.prototype,
33855		{ trimLeft: polyfill },
33856		{ trimLeft: function () { return String.prototype.trimLeft !== polyfill; } }
33857	);
33858	return polyfill;
33859};
33860
33861},{"./polyfill":159,"define-properties":16}],161:[function(require,module,exports){
33862'use strict';
33863
33864module.exports = require('string.prototype.trimend/implementation');
33865
33866},{"string.prototype.trimend/implementation":156}],162:[function(require,module,exports){
33867arguments[4][158][0].apply(exports,arguments)
33868},{"./implementation":161,"./polyfill":163,"./shim":164,"call-bind":14,"define-properties":16,"dup":158}],163:[function(require,module,exports){
33869'use strict';
33870
33871var implementation = require('./implementation');
33872
33873module.exports = function getPolyfill() {
33874	if (!String.prototype.trimRight) {
33875		return implementation;
33876	}
33877	var zeroWidthSpace = '\u200b';
33878	if (zeroWidthSpace.trimRight() !== zeroWidthSpace) {
33879		return implementation;
33880	}
33881	return String.prototype.trimRight;
33882};
33883
33884},{"./implementation":161}],164:[function(require,module,exports){
33885'use strict';
33886
33887var define = require('define-properties');
33888var getPolyfill = require('./polyfill');
33889
33890module.exports = function shimTrimRight() {
33891	var polyfill = getPolyfill();
33892	define(
33893		String.prototype,
33894		{ trimRight: polyfill },
33895		{ trimRight: function () { return String.prototype.trimRight !== polyfill; } }
33896	);
33897	return polyfill;
33898};
33899
33900},{"./polyfill":163,"define-properties":16}],165:[function(require,module,exports){
33901'use strict';
33902
33903var callBound = require('call-bind/callBound');
33904var $replace = callBound('String.prototype.replace');
33905
33906var mvsIsWS = (/^\s$/).test('\u180E');
33907/* eslint-disable no-control-regex */
33908var startWhitespace = mvsIsWS
33909	? /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/
33910	: /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/;
33911/* eslint-enable no-control-regex */
33912
33913module.exports = function trimStart() {
33914	return $replace(this, startWhitespace, '');
33915};
33916
33917},{"call-bind/callBound":13}],166:[function(require,module,exports){
33918const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
33919const csvParser = require('../../includes/csvParser');
33920
33921module.exports = function (Highcharts, appPath) {
33922    const elementId = 'biodiesel-renewdiesel-other-consumption';
33923    var units = '';
33924
33925    if ($('#' + elementId).length > 0) {
33926        Highcharts.chart(elementId, {
33927            chart: {
33928                type: 'column',
33929                spacingBottom: 30,
33930                events: {
33931                    load: creditsSizeAndPosition,
33932                    redraw: creditsSizeAndPosition
33933                }
33934            },
33935            credits: {
33936                enabled: true,
33937                href: null,
33938                style: {
33939                    cursor: 'normal'
33940                }
33941            },
33942            data: {
33943                csvURL: appPath + '/biofuels/charts/' + elementId + '.csv',
33944                startRow: 5,
33945                firstRowAsNames: true,
33946                beforeParse: function (csv) {
33947                    var parsedCSV = csvParser(csv);
33948
33949                    units = parsedCSV[1][0];
33950                    this.chart.title.update({ text: parsedCSV[0][0] });
33951                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
33952                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
33953                    this.chart.update(
33954                        {
33955							accessibility: {
33956								description: parsedCSV[4][0],
33957							},
33958                            exporting: {
33959                                menuItemDefinitions:
33960                                {
33961                                    label: {
33962                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
33963                                    }
33964                                },
33965                                buttons: {
33966                                    contextButton: {
33967                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
33968                                    }
33969                                }
33970                            }
33971                        }
33972                    );
33973                    return csv;
33974                }
33975            },
33976			colors: [Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey],
33977            xAxis: {
33978                labels: {
33979                    format: "{value}"
33980                },
33981                tickInterval: 1,
33982                type: 'dateTime',
33983            },
33984            yAxis: {
33985				reversedStacks:false,
33986                labels: {
33987                    format: "{value:.0f}"
33988                },
33989            },
33990            plotOptions: {
33991                column: {
33992                    stacking: 'normal',
33993                    dataLabels: {
33994                        enabled: false
33995                    }
33996                }
33997            },
33998            tooltip: {
33999                useHTML: true,
34000                shared: true,
34001                formatter: function () {
34002                    let html = "<b>" + this.points[0].key + "</b><br/>";
34003                    this.points.filter(function (value) {
34004                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
34005                    });
34006                    return html;
34007                }
34008            },
34009            responsive: {
34010                rules: [{
34011                    condition: {
34012                        maxWidth: 450
34013                    },
34014                    chartOptions: {
34015						chart: {
34016							height: 400
34017						},
34018						legend: {
34019							itemStyle: {
34020								textOverflow: 'none',
34021								whiteSpace: 'break-word',
34022							},
34023							itemWidth: 125
34024						}
34025                    }
34026                },
34027				{
34028					condition: {
34029						minWidth: 451
34030					},
34031					
34032					chartOptions: {
34033						chart: {
34034							height: '65%'
34035						}
34036					}
34037				}]
34038            }
34039        });
34040    }
34041};
34042
34043},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],167:[function(require,module,exports){
34044const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
34045const csvParser = require('../../includes/csvParser');
34046
34047module.exports = function (Highcharts, appPath) {
34048    const elementId = 'biodiesel-renewdiesel-other-production';
34049    var units = '';
34050
34051    if ($('#' + elementId).length > 0) {
34052        Highcharts.chart(elementId, {
34053            chart: {
34054                type: 'column',
34055                spacingBottom: 30,
34056                events: {
34057                    load: creditsSizeAndPosition,
34058                    redraw: creditsSizeAndPosition
34059                }
34060            },
34061            credits: {
34062                enabled: true,
34063                href: null,
34064                style: {
34065                    cursor: 'normal'
34066                }
34067            },
34068            data: {
34069                csvURL: appPath + '/biofuels/charts/' + elementId + '.csv',
34070                startRow: 5,
34071                firstRowAsNames: true,
34072                beforeParse: function (csv) {
34073                    var parsedCSV = csvParser(csv);
34074
34075                    units = parsedCSV[1][0];
34076                    this.chart.title.update({ text: parsedCSV[0][0] });
34077                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
34078                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
34079                    this.chart.update(
34080                        {
34081							accessibility: {
34082								description: parsedCSV[4][0],
34083							},
34084                            exporting: {
34085                                menuItemDefinitions:
34086                                {
34087                                    label: {
34088                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
34089                                    }
34090                                },
34091                                buttons: {
34092                                    contextButton: {
34093                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
34094                                    }
34095                                }
34096                            }
34097                        }
34098                    );
34099                    return csv;
34100                }
34101            },
34102			colors: [Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey],
34103            xAxis: {
34104                labels: {
34105                    format: "{value}"
34106                },
34107                tickInterval: 1,
34108                type: 'dateTime',
34109            },
34110            yAxis: {
34111				reversedStacks:false,
34112                labels: {
34113                    format: "{value:.0f}"
34114                },
34115            },
34116            plotOptions: {
34117                column: {
34118                    stacking: 'normal',
34119                    dataLabels: {
34120                        enabled: false
34121                    }
34122                }
34123            },
34124            tooltip: {
34125                useHTML: true,
34126                shared: true,
34127                formatter: function () {
34128                    let html = "<b>" + this.points[0].key + "</b><br/>";
34129                    this.points.filter(function (value) {
34130                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
34131                    });
34132                    return html;
34133                }
34134            },
34135            responsive: {
34136                rules: [{
34137                    condition: {
34138                        maxWidth: 450
34139                    },
34140                    chartOptions: {
34141						chart: {
34142							height: 400
34143						},
34144						legend: {
34145							itemStyle: {
34146								textOverflow: 'none',
34147								whiteSpace: 'break-word',
34148							},
34149							itemWidth: 125
34150						}
34151                    }
34152                },
34153				{
34154					condition: {
34155						minWidth: 451
34156					},
34157					
34158					chartOptions: {
34159						chart: {
34160							height: '65%'
34161						}
34162					}
34163				}]
34164            }
34165        });
34166    }
34167};
34168
34169},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],168:[function(require,module,exports){
34170const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
34171const csvParser = require('../../includes/csvParser');
34172
34173module.exports = function (Highcharts, appPath) {
34174    const elementId = 'biofuels-consumption-major-type';
34175    var units = '';
34176
34177    if ($('#' + elementId).length > 0) {
34178        Highcharts.chart(elementId, {
34179            chart: {
34180                type: 'column',
34181                spacingBottom: 30,
34182                events: {
34183                    load: creditsSizeAndPosition,
34184                    redraw: creditsSizeAndPosition
34185                }
34186            },
34187            credits: {
34188                enabled: true,
34189                href: null,
34190                style: {
34191                    cursor: 'normal'
34192                }
34193            },
34194            data: {
34195                csvURL: appPath + '/biofuels/charts/' + elementId + '.csv',
34196                startRow: 5,
34197                firstRowAsNames: true,
34198                beforeParse: function (csv) {
34199                    var parsedCSV = csvParser(csv);
34200
34201                    units = parsedCSV[1][0];
34202                    this.chart.title.update({ text: parsedCSV[0][0] });
34203                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
34204                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
34205                    this.chart.update(
34206                        {
34207							accessibility: {
34208								description: parsedCSV[4][0],
34209							},
34210                            exporting: {
34211                                menuItemDefinitions:
34212                                {
34213                                    label: {
34214                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
34215                                    }
34216                                },
34217                                buttons: {
34218                                    contextButton: {
34219                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
34220                                    }
34221                                }
34222                            }
34223                        }
34224                    );
34225                    return csv;
34226                }
34227            },
34228			colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey],
34229            xAxis: {
34230                labels: {
34231                    format: "{value}"
34232                },
34233                tickInterval: 1,
34234                type: 'dateTime',
34235            },
34236            yAxis: {
34237				reversedStacks:false,
34238                labels: {
34239                    format: "{value:.0f}"
34240                },
34241            },
34242            plotOptions: {
34243                column: {
34244                   
34244 stacking: 'normal',
34245                    dataLabels: {
34246                        enabled: false
34247                    }
34248                }
34249            },
34250            tooltip: {
34251                useHTML: true,
34252                shared: true,
34253                formatter: function () {
34254                    let html = "<b>" + this.points[0].key + "</b><br/>";
34255                    this.points.filter(function (value) {
34256                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
34257                    });
34258                    return html;
34259                }
34260            },
34261            responsive: {
34262                rules: [{
34263                    condition: {
34264                        maxWidth: 450
34265                    },
34266                    chartOptions: {
34267						chart: {
34268							height: 400
34269						},
34270						legend: {
34271							itemStyle: {
34272								textOverflow: 'none',
34273								whiteSpace: 'break-word',
34274							},
34275							itemWidth: 125
34276						}
34277                    }
34278                },
34279				{
34280					condition: {
34281						minWidth: 451
34282					},
34283					
34284					chartOptions: {
34285						chart: {
34286							height: '65%'
34287						}
34288					}
34289				}]
34290            }
34291        });
34292    }
34293};
34294
34295},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],169:[function(require,module,exports){
34296const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
34297const csvParser = require('../../includes/csvParser');
34298
34299module.exports = function (Highcharts, appPath) {
34300    const elementId = 'biofuels-production-major-type';
34301    var units = '';
34302
34303    if ($('#' + elementId).length > 0) {
34304        Highcharts.chart(elementId, {
34305            chart: {
34306                type: 'column',
34307                spacingBottom: 30,
34308                events: {
34309                    load: creditsSizeAndPosition,
34310                    redraw: creditsSizeAndPosition
34311                }
34312            },
34313            credits: {
34314                enabled: true,
34315                href: null,
34316                style: {
34317                    cursor: 'normal'
34318                }
34319            },
34320            data: {
34321                csvURL: appPath + '/biofuels/charts/' + elementId + '.csv',
34322                startRow: 5,
34323                firstRowAsNames: true,
34324                beforeParse: function (csv) {
34325                    var parsedCSV = csvParser(csv);
34326
34327                    units = parsedCSV[1][0];
34328                    this.chart.title.update({ text: parsedCSV[0][0] });
34329                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
34330                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
34331                    this.chart.update(
34332                        {
34333							accessibility: {
34334								description: parsedCSV[4][0],
34335							},
34336                            exporting: {
34337                                menuItemDefinitions:
34338                                {
34339                                    label: {
34340                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
34341                                    }
34342                                },
34343                                buttons: {
34344                                    contextButton: {
34345                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
34346                                    }
34347                                }
34348                            }
34349                        }
34350                    );
34351                    return csv;
34352                }
34353            },
34354			colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey],
34355            xAxis: {
34356                labels: {
34357                    format: "{value}"
34358                },
34359                tickInterval: 1,
34360                type: 'dateTime',
34361            },
34362            yAxis: {
34363				reversedStacks:false,
34364                labels: {
34365                    format: "{value:.0f}"
34366                },
34367            },
34368            plotOptions: {
34369                column: {
34370                    stacking: 'normal',
34371                    dataLabels: {
34372                        enabled: false
34373                    }
34374                }
34375            },
34376            tooltip: {
34377                useHTML: true,
34378                shared: true,
34379                formatter: function () {
34380                    let html = "<b>" + this.points[0].key + "</b><br/>";
34381                    this.points.filter(function (value) {
34382                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
34383                    });
34384                    return html;
34385                }
34386            },
34387            responsive: {
34388                rules: [{
34389                    condition: {
34390                        maxWidth: 450
34391                    },
34392                    chartOptions: {
34393						chart: {
34394							height: 400
34395						},
34396						legend: {
34397							itemStyle: {
34398								textOverflow: 'none',
34399								whiteSpace: 'break-word',
34400							},
34401							itemWidth: 125
34402						}
34403                    }
34404                },
34405				{
34406					condition: {
34407						minWidth: 451
34408					},
34409					
34410					chartOptions: {
34411						chart: {
34412							height: '65%'
34413						}
34414					}
34415				}]
34416            }
34417        });
34418    }
34419};
34420
34421},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],170:[function(require,module,exports){
34422const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
34423const csvParser = require('../../includes/csvParser');
34424
34425module.exports = function (Highcharts, appPath) {
34426    const elementId = 'biofuels-trade-by-type';
34427    var units = '';
34428
34429    if ($('#' + elementId).length > 0) {
34430        Highcharts.chart(elementId, {
34431            chart: {
34432                type: 'column',
34433                spacingBottom: 30,
34434                events: {
34435                    load: creditsSizeAndPosition,
34436                    redraw: creditsSizeAndPosition
34437                }
34438            },
34439            credits: {
34440                enabled: true,
34441                href: null,
34442                style: {
34443                    cursor: 'normal'
34444                }
34445            },
34446            data: {
34447                csvURL: appPath + '/biofuels/charts/' + elementId + '.csv',
34448                startRow: 5,
34449                firstRowAsNames: true,
34450				parsed: function (columns) {
34451					for (let i = 0; i < columns.length; i++) {
34452
34453						if(columns[i][0] === 'ethanol exports' || columns[i][0] === 'biodiesel exports'){
34454							for (let j = 1; j < columns[i].length; j++) {
34455								if(columns[i][j]){
34456									columns[i][j] *= -1;
34457								}
34458							}
34459						}
34460					};
34461				},
34462                beforeParse: function (csv) {
34463                    var parsedCSV = csvParser(csv);
34464
34465                    units = parsedCSV[1][0];
34466                    this.chart.title.update({ text: parsedCSV[0][0] });
34467                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
34468                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
34469                    this.chart.update(
34470                        {
34471							accessibility: {
34472								description: parsedCSV[4][0],
34473							},
34474                            exporting: {
34475                                menuItemDefinitions:
34476                                {
34477                                    label: {
34478                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
34479                                    }
34480                                },
34481                                buttons: {
34482                                    contextButton: {
34483                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
34484                                    }
34485                                }
34486                            }
34487                        }
34488                    );
34489                    return csv;
34490                }
34491            },
34492			colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.darkYellow, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.blue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey],
34493            xAxis: {
34494                labels: {
34495                    format: "{value}"
34496                },
34497                tickInterval: 1,
34498                type: 'dateTime',
34499            },
34500            yAxis: {
34501				reversedStacks:false,
34502				maxPadding: 0.01,
34503                labels: {
34504                    format: "{value:.0f}"
34505                },
34506            },
34507            plotOptions: {
34508                column: {
34509                    stacking: 'normal',
34510                    dataLabels: {
34511                        enabled: false
34512                    }
34513                }
34514            },
34515            tooltip: {
34516                useHTML: true,
34517                shared: true,
34518                formatter: function () {
34519                    let html = "<b>" + this.points[0].key + "</b><br/>";
34520                    this.points.filter(function (value) {
34521                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
34522                    });
34523                    return html;
34524                }
34525            },
34526            responsive: {
34527                rules: [{
34528                    condition: {
34529                        maxWidth: 450
34530                    },
34531                    chartOptions: {
34532						chart: {
34533							height: 400
34534						},
34535						legend: {
34536							itemStyle: {
34537								textOverflow: 'none',
34538								whiteSpace: 'break-word',
34539							},
34540							itemWidth: 125
34541						}
34542                    }
34543                },
34544				{
34545					condition: {
34546						minWidth: 451
34547					},
34548					
34549					chartOptions: {
34550						chart: {
34551							height: '65%'
34552						}
34553					}
34554				}]
34555            }
34556        });
34557    }
34558};
34559
34560},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],171:[function(require,module,exports){
34561const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
34562const csvParser = require('../../includes/csvParser');
34563
34564module.exports = function (Highcharts, appPath) {
34565    const elementId = 'ethanol-supply-production-states';
34566    var units = '';
34567
34568    if ($('#' + elementId).length > 0) {
34569        Highcharts.chart(elementId, {
34570            chart: {
34571                type: 'area',
34572                spacingBottom: 30,
34573                events: {
34574                    load: creditsSizeAndPosition,
34575                    redraw: creditsSizeAndPosition
34576                }
34577            },
34578			credits: {
34579                enabled: true,
34580                href: null,
34581                style: {
34582                    cursor: 'normal'
34583                }
34584            },
34585            title: {
34586                text: ''
34587            },
34588            data: {
34589                csvURL: appPath + '/biofuels/charts/' + elementId + '.csv',
34590                startRow: 5,
34591                firstRowAsNames: true,
34592                beforeParse: function (csv) {
34593                    var parsedCSV = csvParser(csv);
34594                    this.chart.title.update({ text: parsedCSV[0][0] });
34595                    units = parsedCSV[1][0];
34596                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
34597                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
34598                    this.chart.update(
34599                        {
34600							accessibility: {
34601								description: parsedCSV[4][0],
34602							},
34603                            exporting: {
34604                                menuItemDefinitions:
34605                                {
34606                                    label: {
34607                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
34608                                    }
34609                                },
34610                                buttons: {
34611                                    contextButton: {
34612                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
34613                                    }
34614                                }
34615                            }
34616                        }
34617                    );
34618                    return csv;
34619                }
34620
34621            },
34622            xAxis: {
34623                labels: {
34624                    format: "{value}",
34625                },
34626                tickInterval: 5,
34627                startOnTick: true,
34628                minPadding: 0,
34629                maxPadding: 0
34630            },
34631            yAxis: {
34632                labels: {
34633                    format: "{value:,.0f}"
34634                },
34635				maxPadding: 0,
34636				reversedStacks: false
34637            },
34638            plotOptions: {
34639                area: {
34640                    stacking: 'normal',
34641                }
34642            },
34643            tooltip: {
34644                useHTML: true,
34645                shared: true,
34646                formatter: function () {
34647                    var html = '<b>' + this.x + '</b><br/>';
34648                    this.points.filter(function (value) {
34649                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>';
34650                    });
34651                    return html;
34652                }
34653            },
34654            responsive: {
34655                rules: [{
34656                    condition: {
34657                        maxWidth: 450
34658                    },
34659                    chartOptions: {
34660						chart: {
34661							height: 500
34662						}
34663                    }
34664                },
34665				{
34666					condition: {
34667						minWidth: 451
34668					},
34669					
34670					chartOptions: {
34671						chart: {
34672							height: '65%'
34673						}
34674					}
34675				}]
34676            }
34677        });
34678    }
34679};
34680
34681},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],172:[function(require,module,exports){
34682const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
34683const csvParser = require('../../includes/csvParser');
34684
34685module.exports = function (Highcharts, appPath) {
34686    const elementId = 'feedstock-inputs-biodiesel-production';
34687
34688    if ($('#' + elementId).length > 0) {
34689        Highcharts.chart(elementId, {
34690            chart: {
34691                type: 'pie',
34692				spacingBottom: 30,
34693                events: {
34694                    load: creditsSizeAndPosition,
34695                    redraw: creditsSizeAndPosition
34696                }
34697            },
34698			credits: {
34699                enabled: true,
34700                href: null,
34701                style: {
34702                    cursor: 'normal'
34703                }
34704            },
34705            title: {
34706                text: '',
34707				margin: 15
34708            },
34709            data: {
34710                csvURL: appPath + '/biofuels/charts/' + elementId + '.csv',
34711                startRow: 4,
34712                firstRowAsNames: true,
34713
34714                beforeParse: function (csv) {
34715                    var parsedCSV = csvParser(csv);
34716                    this.chart.title.update({ text: parsedCSV[0][0] });
34717                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
34718					
34719                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0]});
34720                    this.chart.update(
34721                        {
34722							accessibility: {
34723								description: parsedCSV[4][0],
34724							},
34725                            exp
34725orting: {
34726                                menuItemDefinitions:
34727                                {
34728                                    label: {
34729                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
34730                                    }
34731                                },
34732                                buttons: {
34733                                    contextButton: {
34734                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
34735                                    }
34736                                }
34737                            }
34738                        }
34739                    );
34740                    return csv;
34741                }
34742            },
34743			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red],
34744            subtitle: {
34745                text: '',
34746                useHTML: true,
34747            },
34748            plotOptions: {
34749                pie: {
34750                    startAngle: 0,
34751                    dataLabels: {
34752                        enabled: true,
34753                        format: "<strong>{point.name}</strong><br/> {point.percentage:.0f}%",
34754                        distance: 10,
34755                        color: Highcharts.eiaColors.darkGrey,
34756                        style: {
34757                            "fontSize": "12px"
34758                        }
34759                    }
34760                }
34761            },
34762            tooltip: {
34763                useHTML: true,
34764                formatter: function () {
34765                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>";
34766                }
34767            },
34768			responsive: {
34769				rules: [{
34770					condition: {
34771						maxWidth: 450
34772					},
34773					
34774					chartOptions: {
34775						chart: {
34776							height: 425
34777						},
34778						plotOptions: {
34779							pie: {
34780								size: '80%',
34781								dataLabels: {
34782									enabled: false
34783								},
34784								showInLegend: true
34785							}
34786						},
34787						legend: {
34788							enabled: true,
34789							itemStyle: {
34790								lineHeight: 13
34791							}
34792						}
34793					}
34794				},
34795				{
34796					condition: {
34797						minWidth: 451
34798					},
34799					
34800					chartOptions: {
34801						chart: {
34802							height: '65%'
34803						},
34804                        title: {
34805                            margin: 15
34806                        },
34807						plotOptions: {
34808							pie: {
34809								size: '65%',
34810								dataLabels: {
34811									enabled: true
34812								},
34813								showInLegend: false
34814							}
34815						},
34816						legend: {
34817							enabled: false
34818						}
34819					}
34820				}]
34821			}
34822        });
34823    }
34824};
34825
34826},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],173:[function(require,module,exports){
34827const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
34828const csvParser = require('../../includes/csvParser');
34829
34830module.exports = function (Highcharts, appPath) {
34831    const elementId = 'feedstocks-for-biofuels-production';
34832
34833    if ($('#' + elementId).length > 0) {
34834        Highcharts.chart(elementId, {
34835            chart: {
34836                type: 'pie',
34837				spacingBottom: 30,
34838                events: {
34839                    load: creditsSizeAndPosition,
34840                    redraw: creditsSizeAndPosition
34841                }
34842            },
34843			credits: {
34844                enabled: true,
34845                href: null,
34846                style: {
34847                    cursor: 'normal'
34848                }
34849            },
34850            title: {
34851                text: '',
34852				margin: 0
34853            },
34854            data: {
34855                csvURL: appPath + '/biofuels/charts/' + elementId + '.csv',
34856                startRow: 5,
34857                firstRowAsNames: false,
34858
34859                beforeParse: function (csv) {
34860                    var parsedCSV = csvParser(csv);
34861                    this.chart.title.update({ text: parsedCSV[0][0] });
34862                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
34863                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
34864                    this.chart.update(
34865                        {
34866							accessibility: {
34867								description: parsedCSV[4][0],
34868							},
34869                            exporting: {
34870                                menuItemDefinitions:
34871                                {
34872                                    label: {
34873                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
34874                                    }
34875                                },
34876                                buttons: {
34877                                    contextButton: {
34878                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
34879                                    }
34880                                }
34881                            }
34882                        }
34883                    );
34884                    return csv;
34885                }
34886            },
34887			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red],
34888            subtitle: {
34889                text: '',
34890                useHTML: true,
34891            },
34892            plotOptions: {
34893                pie: {
34894                    startAngle: 0,
34895                    dataLabels: {
34896                        enabled: true,
34897                        format: "<strong>{point.name}</strong><br/> {point.percentage:.0f}%",
34898                        distance: 10,
34899                        color: Highcharts.eiaColors.darkGrey,
34900                        style: {
34901                            "fontSize": "12px"
34902                        }
34903                    }
34904                }
34905            },
34906            tooltip: {
34907                useHTML: true,
34908                formatter: function () {
34909                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>";
34910                }
34911            },
34912			responsive: {
34913				rules: [{
34914					condition: {
34915						maxWidth: 450
34916					},
34917					
34918					chartOptions: {
34919						chart: {
34920							height: 440
34921						},
34922						plotOptions: {
34923							pie: {
34924								size: '80%',
34925								dataLabels: {
34926									enabled: false
34927								},
34928								showInLegend: true
34929							}
34930						},
34931						legend: {
34932							enabled: true,
34933							itemStyle: {
34934								lineHeight: 13
34935							}
34936						}
34937					}
34938				},
34939				{
34940					condition: {
34941						minWidth: 451
34942					},
34943					
34944					chartOptions: {
34945						chart: {
34946							height: '65%'
34947						},
34948						plotOptions: {
34949							pie: {
34950								size: '65%',
34951								dataLabels: {
34952									enabled: true
34953								},
34954								showInLegend: false
34955							}
34956						},
34957						legend: {
34958							enabled: false
34959						}
34960					}
34961				}]
34962			}
34963        });
34964    }
34965};
34966
34967},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],174:[function(require,module,exports){
34968const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
34969const csvParser = require('../../includes/csvParser');
34970
34971module.exports = function (Highcharts, appPath) {
34972    const elementId = 'fuel-ethanol-motor-gasoline';
34973
34974    if ($('#' + elementId).length > 0) {
34975        Highcharts.chart(elementId, {
34976            chart: {
34977                type: 'line',
34978                spacingBottom: 25,
34979                events: {
34980                    load: creditsSizeAndPosition,
34981                    redraw: creditsSizeAndPosition
34982                }
34983            },
34984			credits: {
34985                enabled: true,
34986                href: null,
34987                style: {
34988                    cursor: 'normal'
34989                }
34990            },
34991            data: {
34992                csvURL: appPath + '/biofuels/charts/' + elementId + '.csv',
34993                startRow: 6,
34994                firstRowAsNames: true,
34995                complete: function (options) {
34996                    if (options.series.length > 0) {
34997                        options.series[0].yAxis = 0;
34998                        options.series[1].yAxis = 1;
34999                    }
35000                },
35001                beforeParse: function (csv) {
35002                    var parsedCSV = csvParser(csv);
35003                    this.chart.title.update({ text: parsedCSV[0][0] });
35004                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
35005                    this.chart.yAxis[1].update({ title: { text: parsedCSV[2][0] } });
35006                    this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] });
35007                    this.chart.update(
35008                        {
35009							accessibility: {
35010								description: parsedCSV[5][0],
35011							},
35012                            exporting: {
35013                                menuItemDefinitions:
35014                                {
35015                                    label: {
35016                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
35017                                    }
35018                                },
35019                                buttons: {
35020                                    contextButton: {
35021                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
35022                                    }
35023                                }
35024                            }
35025                        }
35026                    );
35027                    return csv;
35028                }
35029
35030            },
35031            xAxis: {
35032                labels: {
35033                    format: "{value}"
35034                },
35035                startOnTick: false,
35036                tickInterval: 5,
35037                minPadding: 0,
35038                maxPadding: 0
35039            },
35040            yAxis: [
35041                {
35042                    maxPadding: 0,
35043					tickInterval: 1,
35044					alignTicks: false,
35045                    labels: {
35046                        format: "{value}",
35047						style: { "color": Highcharts.eiaColors.blue }
35048                    },
35049					title: {
35050						style: { "color": Highcharts.eiaColors.blue }
35051					}
35052                },
35053                {
35054                    tickInterval: 2,
35055					maxPadding: 0,
35056					alignTicks: false,
35057                    gridLineColor: 'none',
35058                    opposite: true,
35059                    labels: {
35060                        format: "{value:.0f}%",
35061						style: { "color": Highcharts.eiaColors.brown }
35062                    },
35063					title: {
35064						style: { "color": Highcharts.eiaColors.brown }
35065					}
35066                }
35067            ],
35068            tooltip: {
35069                useHTML: true,
35070                shared: true,
35071                formatter: function () {
35072                    var html = '<b>' + this.x + '</b><br/>';
35073                    this.points.filter(function (value) {
35074                        html += '<span style="color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>';
35075                        if (value.series.name.charAt(0) === 'c') { // starts with c for consumption, the first series
35076                            html += value.series.name + ':</b> ' + value.y.toFixed(2) + ' billion gallons<br/>';
35077                        } else {
35078                            html += value.series.name + ":</b> " + value.y.toFixed(1) + value.series.name.split(' ')[0] + "<br/>";
35079                        }
35080                    });
35081                    return html;
35082                }
35083            },
35084            responsive: {
35085                rules: [{
35086                    condition: {
35087                        maxWidth: 400
35088                    },
35089                    chartOptions: {
35090						chart: {
35091							height: 450
35092						},
35093                        xAxis: [
35094                            {
35095                                labels: {
35096                                    rotation: -45
35097                                },
35098                                tickInterval: 10,
35099                                startOnTick: true,
35100                            }
35101                        ],
35102                        yAxis: [
35103                            {
35104                                title: {
35105                                    align: 'middle',
35106                                    style:{
35107                                        fontSize:'10px',
35108                                        wordwrap: 'break-word',
35109                                        width:'150px'
35110                                    },
35111									rotation: 90
35112                                }
35113                            },
35114                            {
35115                                title: {
35116                                    align: 'middle',
35117                                    style:{
35118                                        fontSize:'10px',
35119                                        wordwrap: 'break-word',
35120                                        width:'150px'
35121                                    },
35122                                    rotation: 90
35123                                }
35124                            }
35125                        ]
35126                    }
35127                },
35128				{
35129					condition: {
35130						minWidth: 451
35131					},
35132					
35133					chartOptions: {
35134						chart: {
35135							height: '65%'
35136						},
35137						yAxis: [
35138                            {
35139                                title: {
35140                                    style:{
35141                                        width:'300px'
35142                                    }
35143                                }
35144                            },
35145                            {
35146                                title: {
35147                                    style:{
35148                                        width:'300px'
35149                                    }
35150                                }
35151                            }
35152                        ]
35153					}
35154				}]
35155            }
35156        });
35157    }
35158};
35159
35160},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],175:[function(require,module,exports){
35161const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
35162const csvParser = require('../../includes/csvParser');
35163
35164module.exports = function (Highcharts, appPath) {
35165    const elementId = 'us-biodiesel-consumption';
35166    var units = '';
35167
35168    if ($('#' + elementId).length > 0) {
35169        Highcharts.chart(elementId, {
35170            chart: {
35171                type: 'column',
35172                spacingBottom: 30,
35173                events: {
35174                    load: creditsSizeAndPosition,
35175                    redraw: creditsSizeAndPosition
35176                }
35177            },
35178			credits: {
35179                enabled: true,
35180                href: null,
35181                style: {
35182                    cursor: 'normal'
35183                }
35184            },
35185            data: {
35186                csvURL: appPath + '/biofuels/charts/' + elementId + '.csv',
35187                startRow: 5,
35188                firstRowAsNames: true,
35189                beforeParse: function (csv) {
35190                    var parsedCSV = csvParser(csv);
35191                    this.chart.title.update({ text: parsedCSV[0][0] });
35192                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
35193                    units = parsedCSV[1][0];
35194                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
35195                    this.chart.update(
35196                        {
35197							accessibility: {
35198								description: parsedCSV[4][0],
35199							},
35200                            exporting: {
35201                                menuItemDefinitions:
35202                                {
35203                                    label: {
35204                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
35205                                    }
35206                                },
35207                                buttons: {
35208                                    contextButton: {
35209                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
35210                                    }
35211                                }
35212                            }
35213                        }
35214                    );
35215                    return csv;
35216                }
35217            },
35218            legend: {
35219
35220            },
35221            xAxis: {
35222                labels: {
35223                    format: "{value}"
35224                },
35225                tickInterval: 1
35226            },
35227            yAxis: {
35228                labels: {
35229                    format: "{value:.2f}"
35230                },
35231                tickInterval: .25
35232            },
35233            plotOptions: {
35234                column: {
35235                    dataLabels: {
35236                        enabled: false
35237                    }
35238                }
35239            },
35240            tooltip: {
35241                useHTML: true,
35242                formatter: function () {
35243                    return '<span style="color:' + this.series.color + '">' + '\u25CF\u2004\u2009' + '</span><b>' + this.series.name + '</b><br>' + this.x + '<br/>' + this.y.toFixed(2) + ' ' + units + '</span>';
35244                }
35245            },
35246            responsive: {
35247                rules: [{
35248                    condition: {
35249                        maxWidth: 450
35250                    },
35251                    chartOptions: {
35252						chart: {
35253							height: 400
35254						}
35255                    }
35256                },
35257				{
35258					condition: {
35259						minWidth: 451
35260					},
35261					
35262					chartOptions: {
35263						chart: {
35264							height: '65%'
35265						}
35266					}
35267				}]
35268            }
35269        });
35270    }
35271};
35272
35273},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],176:[function(require,module,exports){
35274const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
35275const csvParser = require('../../includes/csvParser');
35276
35277module.exports = function (Highcharts, appPath) {
35278    const elementId = 'management-of-msw-us';
35279
35280    if ($('#' + elementId).length > 0) {
35281        Highcharts.chart(elementId, {
35282            chart: {
35283                type: 'pie',
35284                spacingBottom: 30,
35285                events: {
35286                    load: creditsSizeAndPosition,
35287                    redraw: creditsSizeAndPosition
35288                }
35289            },
35290            credits: {
35291                enabled: true,
35292                href: null,
35293                style: {
35294                    cursor: 'normal'
35295                }
35296            },
35297            title: {
35298                text: '',
35299                margin: 5
35300            },
35301            data: {
35302                csvURL: appPath + '/biomass/charts/' + elementId + '.csv',
35303                startRow: 4,
35304                firstRowAsNames: true,
35305
35306                beforeParse: function (csv) {
35307                    var parsedCSV = csvParser(csv);
35308                    this.chart.title.update({ text: parsedCSV[0][0] });
35309                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
35310                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
35311                    this.chart.update(
35312                        {
35313							accessibility: {
35314								description: parsedCSV[4][0],
35315							},
35316                            exporting: {
35317                                menuItemDefinitions:
35318                                {
35319                                    label: {
35320                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
35321                                    }
35322                                },
35323                                buttons: {
35324                                    contextButton: {
35325                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
35326                                    }
35327                                }
35328                            }
35329                        }
35330                    );
35331                    return csv;
35332                }
35333            },
35334            colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.darkGreen],
35335            subtitle: {
35336                text: '',
35337                useHTML: true,
35338            },
35339            plotOptions: {
35340                pie: {
35341                    startAngle: -190,
35342                    dataLabels: {
35343                        enabled: true,
35344                        format: "<strong>{point.name}</strong><br/>{point.percentage:.1f}%",
35345                        distance: 10,
35346                        color: Highcharts.eiaColors.darkGrey
35347                    }
35348                }
35349            },
35350            tooltip: {
35351                useHTML: true,
35352                formatter: function () {
35353                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage * 100) / 100 + "%</span>";
35354                }
35355            },
35356            responsive: {
35357                rules: [{
35358                    condition: {
35359                        maxWidth: 450
35360                    },
35361
35362                    chartOptions: {
35363                        chart: {
35364                            height: 425
35365                        },
35366                        plotOptions: {
35367                            pie: {
35368                                size: '80%',
35369                                dataLabels: {
35370                                    enabled: false
35371                                },
35372                                showInLegend: true
35373                            }
35374                        },
35375                        legend: {
35376                            enabled: true,
35377                            itemStyle: {
35378                                lineHeight: 13
35379                            }
35380                        }
35381                    }
35382                },
35383                {
35384                    condition: {
35385                        minWidth: 451
35386                    },
35387
35388                    chartOptions: {
35389                        chart: {
35390                            height: '65%'
35391                        },
35392                        plotOptions: {
35393                            pie: {
35394                                size: '65%',
35395                                dataLabels: {
35396                                    enabled: true
35397                                },
35398                                showInLegend: false
35399                            }
35400                        },
35401                        legend: {
35402                            enabled: false
35403                        }
35404                    }
35405                }]
35406            }
35407        });
35408    }
35409};
35410
35411},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],177:[function(require,module,exports){
35412const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
35413const csvParser = require('../../includes/csvParser');
35414
35415module.exports = function (Highcharts, appPath) {
35416    const elementId = 'percent-waste-burned';
35417    if ($('#' + elementId).length > 0) {
35418        Highcharts.chart(elementId, {
35419            chart: {
35420                type: 'column',
35421                spacingBottom: 30,
35422                events: {
35423                    load: creditsSizeAndPosition,
35424                    redraw: creditsSizeAndPosition
35425                }
35426            },
35427			credits: {
35428                enabled: true,
35429                href: null,
35430                style: {
35431                    cursor: 'normal'
35432                }
35433            },
35434            data: {
35435                csvURL: appPath + '/biomass/charts/' + elementId + '.csv',
35436                startRow: 5,
35437                firstRowAsNames: false,
35438                beforeParse: function (csv) {
35439                    var parsedCSV = csvParser(csv);
35440                    this.chart.title.update({ text: parsedCSV[0][0] });
35441                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
35442                    this.chart.update(
35443                        {
35444							accessibility: {
35445								description: parsedCSV[4][0],
35446							},
35447                            exporting: {
35448                                menuItemDefinitions:
35449                                {
35450                                    label: {
35451                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
35452                                    }
35453                                },
35454                                buttons: {
35455                                    contextButton: {
35456                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
35457                                    }
35458                                }
35459                            }
35460                        }
35461                    );
35462                    return csv;
35463                }
35464            },
35465			colors: [Highcharts.eiaColors.blue],
35466            xAxis: {
35467                labels: {
35468                    enabled: true,
35469                    rotation: -45
35470                }
35471            },
35472            plotOptions: {
35473                column: {
35474                    grouping: false,
35475                    dataLabels: {
35476                        enabled: true,
35477                        crop: false,
35478                        overflow: 'none',
35479                        formatter: function () {
35480                            return Highcharts.numberFormat(this.y, 0) + '%';
35481                        },
35482						style: {
35483							color: Highcharts.eiaColors.darkGrey
35484						}
35485                    }
35486                }
35487            },
35488            yAxis: {
35489				tickInterval: 10,
35490                labels: {
35491                    format: "{value:.0f}%"
35492                },
35493                title: {
35494                    enabled: fal
35494se
35495                }
35496            },
35497            tooltip: {
35498                useHTML: true,
35499                formatter: function () {
35500                    return '<b>' + this.key + '</b><br/>' + this.y.toFixed(0) + '%';
35501                }
35502            },
35503            legend: {
35504                enabled: false
35505            },
35506            responsive: {
35507                rules: [{
35508                    condition: {
35509                        maxWidth: 450
35510                    },
35511                    chartOptions: {
35512						chart: {
35513							height: 450
35514						}
35515                    }
35516                },
35517				{
35518					condition: {
35519						minWidth: 451
35520					},
35521					
35522					chartOptions: {
35523						chart: {
35524							height: '65%'
35525						}
35526					}
35527				}]
35528            }
35529        });
35530    }
35531};
35532},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],178:[function(require,module,exports){
35533const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
35534const csvParser = require('../../includes/csvParser');
35535
35536module.exports = function (Highcharts, appPath) {
35537    const elementId = 'total-msw-generation-by-type-of-waste';
35538
35539    if ($('#' + elementId).length > 0) {
35540        Highcharts.chart(elementId, {
35541            chart: {
35542                type: 'pie',
35543                spacingBottom: 30,
35544                events: {
35545                    load: creditsSizeAndPosition,
35546                    redraw: creditsSizeAndPosition
35547                }
35548            },
35549			credits: {
35550                enabled: true,
35551                href: null,
35552                style: {
35553                    cursor: 'normal'
35554                }
35555            },
35556            title: {
35557                text: '',
35558				margin: 5
35559            },
35560            data: {
35561                csvURL: appPath + '/biomass/charts/' + elementId + '.csv',
35562                startRow: 4,
35563                firstRowAsNames: true,
35564
35565                beforeParse: function (csv) {
35566                    var parsedCSV = csvParser(csv);
35567                    this.chart.title.update({ text: parsedCSV[0][0] });
35568                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
35569                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
35570                    this.chart.update(
35571                        {
35572							accessibility: {
35573								description: parsedCSV[4][0],
35574							},
35575                            exporting: {
35576                                menuItemDefinitions:
35577                                {
35578                                    label: {
35579                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
35580                                    }
35581                                },
35582                                buttons: {
35583                                    contextButton: {
35584                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
35585                                    }
35586                                }
35587                            }
35588                        }
35589                    );
35590                    return csv;
35591                }
35592            },
35593			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.darkGreen],
35594            subtitle: {
35595                text: '',
35596                useHTML: true,
35597            },
35598            plotOptions: {
35599                pie: {
35600                    startAngle: -120,
35601                    dataLabels: {
35602                        enabled: true,
35603                        format: "<strong>{point.name}</strong><br/> {point.percentage:.1f}%",
35604                        distance: 10,
35605                        color: Highcharts.eiaColors.darkGrey
35606                    }
35607                }
35608            },
35609            tooltip: {
35610                useHTML: true,
35611                formatter: function () {
35612                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage * 100) / 100 + "%</span>";
35613                }
35614            },
35615			responsive: {
35616				rules: [{
35617					condition: {
35618						maxWidth: 450
35619					},
35620					
35621					chartOptions: {
35622						chart: {
35623							height: 525
35624						},
35625						plotOptions: {
35626							pie: {
35627								size: '80%',
35628								dataLabels: {
35629									enabled: false
35630								},
35631								showInLegend: true
35632							}
35633						},
35634						legend: {
35635							enabled: true,
35636							itemStyle: {
35637								textOverflow: 'none',
35638								lineHeight: 13
35639							}
35640						}
35641					}
35642				},
35643				{
35644					condition: {
35645						minWidth: 451
35646					},
35647					
35648					chartOptions: {
35649						chart: {
35650							height: '65%'
35651						},
35652						plotOptions: {
35653							pie: {
35654								size: '65%',
35655								dataLabels: {
35656									enabled: true
35657								},
35658								showInLegend: false
35659							}
35660						},
35661						legend: {
35662							enabled: false
35663						}
35664					}
35665				}]
35666			}
35667        });
35668    }
35669};
35670
35671},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],179:[function(require,module,exports){
35672const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
35673const csvParser = require('../../includes/csvParser');
35674
35675module.exports = function (Highcharts, appPath) {
35676    const elementId = 'annual-prices-delivered-end-use-sectors';
35677    var min, max;
35678    var units = '';
35679
35680    if ($('#' + elementId).length > 0) {
35681        Highcharts.chart(elementId, {
35682            chart: {
35683                type: 'line',
35684                spacingBottom: 30,
35685                events: {
35686                    load: creditsSizeAndPosition,
35687                    redraw: creditsSizeAndPosition
35688                }
35689            },
35690			credits: {
35691                enabled: true,
35692                href: null,
35693                style: {
35694                    cursor: 'normal'
35695                }
35696            },
35697            data: {
35698                csvURL: appPath + '/coal/charts/' + elementId + '.csv',
35699                startRow: 5,
35700                firstRowAsNames: true,
35701                beforeParse: function (csv) {
35702                    var parsedCSV = csvParser(csv);
35703                    this.chart.title.update({ text: parsedCSV[0][0] });
35704                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
35705                    units = parsedCSV[1][0];
35706                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
35707                    this.chart.update(
35708                        {
35709							accessibility: {
35710								description: parsedCSV[4][0],
35711							},
35712                            exporting: {
35713                                menuItemDefinitions:
35714                                {
35715                                    label: {
35716                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
35717                                    }
35718                                },
35719                                buttons: {
35720                                    contextButton: {
35721                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
35722                                    }
35723                                }
35724                            }
35725                        }
35726                    );
35727                    return csv;
35728                },
35729                parsed: function () {
35730                    if (this.columns.length > 0) {
35731                        if (this.columns.length > 0) {
35732                            min = Math.min.apply(null, this.columns[0]);
35733                            max = Math.max.apply(null, this.columns[0]);
35734                        }
35735                    }
35736                }
35737            },
35738			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
35739            xAxis: {
35740                labels: {
35741                    format: "{value}",
35742                },
35743                min: min,
35744                max: max,
35745                tickInterval: 1,
35746            },
35747            yAxis: {
35748                tickInterval: 20,
35749				maxPadding: 0.01,
35750                labels: {
35751                    format: "${value:.2f}"
35752                }
35753            },
35754            tooltip: {
35755                shared: true,
35756                useHTML: true,
35757                formatter: function () {
35758                    var html = '<b>' + this.x + '</b><br/>';
35759                    this.points.filter(function (value) {
35760                        html += '<span style="color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> $' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
35761                    });
35762                    return html;
35763                }
35764            },
35765            responsive: {
35766                rules: [{
35767                    condition: {
35768                        maxWidth: 450
35769                    },
35770                    chartOptions: {
35771						chart: {
35772							height: 400
35773						}
35774                    }
35775                },
35776				{
35777					condition: {
35778						minWidth: 451
35779					},
35780					
35781					chartOptions: {
35782						chart: {
35783							height: '65%'
35784						}
35785					}
35786				}]
35787            }
35788        });
35789    }
35790};
35791
35792},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],180:[function(require,module,exports){
35793const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
35794const csvParser = require('../../includes/csvParser');
35795
35796module.exports = function (Highcharts, appPath) {
35797    const elementId = 'coal-consumption-by-major-end-users';
35798    var units = '';
35799
35800    if ($('#' + elementId).length > 0) {
35801        Highcharts.chart(elementId, {
35802            chart: {
35803                type: 'area',
35804                spacingBottom: 30,
35805                events: {
35806                    load: creditsSizeAndPosition,
35807                    redraw: creditsSizeAndPosition
35808                }
35809            },
35810			credits: {
35811                enabled: true,
35812                href: null,
35813                style: {
35814                    cursor: 'normal'
35815                }
35816            },
35817            data: {
35818                csvURL: appPath + '/coal/charts/' + elementId + '.csv',
35819                startRow: 5,
35820                firstRowAsNames: true,
35821
35822                beforeParse: function (csv) {
35823                    var parsedCSV = csvParser(csv);
35824                    this.chart.title.update({ text: parsedCSV[0][0] });
35825                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
35826                    units = parsedCSV[1][0];
35827                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
35828                    this.chart.update(
35829                        {
35830							accessibility: {
35831								description: parsedCSV[4][0],
35832							},
35833                            exporting: {
35834                                menuItemDefinitions:
35835                                {
35836                                    label: {
35837                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
35838                                    }
35839                                },
35840                                buttons: {
35841                                    contextButton: {
35842                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
35843                                    }
35844                                }
35845                            }
35846                        }
35847                    );
35848                    return csv;
35849                }
35850            },
35851			colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.blue,Highcharts.eiaColors.darkGrey, Highcharts.eiaColors.yellow],
35852			legend: {
35853				reversed: true
35854			},
35855            xAxis: {
35856                labels: {
35857                    format: "{value}",
35858                    type: 'category',
35859                },
35860                tickInterval: 10,
35861                startOnTick: true,
35862                minPadding: 0,
35863                maxPadding: 0
35864            },
35865            yAxis: {
35866                tickInterval: 200,
35867                labels: {
35868                    format: "{value:,.0f}"
35869                },
35870				reversedStacks: false
35871            },
35872            plotOptions: {
35873                area: {
35874                    stacking: 'normal',
35875                }
35876            },
35877            tooltip: {
35878                useHTML: true,
35879                shared: true,
35880                formatter: function () {
35881                    var html = '<b>' + this.x + '</b><br/>';
35882                    this.points.filter(function (value) {
35883                        html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
35884                    });
35885                    return html;
35886                }
35887            },
35888            responsive: {
35889                rules: [{
35890                    condition: {
35891                        maxWidth: 450
35892                    },
35893                    chartOptions: {
35894						chart: {
35895							height: 450
35896						}
35897                    }
35898                },
35899				{
35900					condition: {
35901						minWidth: 451
35902					},
35903					
35904					chartOptions: {
35905						chart: {
35906							height: '65%'
35907						}
35908					}
35909				}]
35910            }
35911        });
35912    }
35913};
35914
35915},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],181:[function(require,module,exports){
35916const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
35917const csvParser = require('../../includes/csvParser');
35918
35919module.exports = function (Highcharts, appPath) {
35920    const elementId = 'coal-imports-exports';
35921    var units = '';
35922    if ($('#' + elementId).length > 0) {
35923        Highcharts.chart(elementId, {
35924            chart: {
35925                type: 'line',
35926                spacingBottom: 30,
35927                events: {
35928                    load: creditsSizeAndPosition,
35929                    redraw: creditsSizeAndPosition
35930                }
35931            },
35932			credits: {
35933                enabled: true,
35934                href: null,
35935                style: {
35936                    cursor: 'normal'
35937                }
35938            },
35939            data: {
35940                csvURL: appPath + '/coal/charts/' + elementId + '.csv',
35941                startRow: 5,
35942                firstRowAsNames: true,
35943                beforeParse: function (csv) {
35944                    var parsedCSV = csvParser(csv);
35945                    this.chart.title.update({ text: parsedCSV[0][0] });
35946                    units = parsedCSV[1][0];
35947                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
35948                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
35949                    this.chart.update(
35950                        {
35951							accessibility: {
35952								description: parsedCSV[4][0],
35953							},
35954                            exporting: {
35955                                menuItemDefinitions:
35956                                {
35957                                    label: {
35958                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
35959                                    }
35960                                },
35961                                buttons: {
35962                                    contextButton: {
35963                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
35964                                    }
35965                                }
35966                            }
35967      
35967                  }
35968                    );
35969                    return csv;
35970                }
35971            },
35972            xAxis: {
35973                labels: {
35974                    format: "{value}",
35975                },
35976                tickInterval: 6,
35977            },
35978            yAxis: {
35979                tickInterval: 25,
35980				maxPadding: 0,
35981                labels: {
35982                    format: "{value}"
35983                }
35984            },
35985            tooltip: {
35986                useHTML: true,
35987                shared: true,
35988                formatter: function () {
35989                    var html = '<b>' + this.x + '</b><br/>';
35990                    this.points.filter(function (value) {
35991                        html += '<span style="color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>';
35992                    });
35993                    return html;
35994                }
35995            },
35996            responsive: {
35997                rules: [{
35998                    condition: {
35999                        maxWidth: 450
36000                    },
36001                    chartOptions: {
36002						chart: {
36003							height: 400
36004						}
36005                    }
36006                },
36007				{
36008					condition: {
36009						minWidth: 451
36010					},
36011					
36012					chartOptions: {
36013						chart: {
36014							height: '65%'
36015						}
36016					}
36017				}]
36018            }
36019        });
36020    }
36021};
36022
36023},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],182:[function(require,module,exports){
36024const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
36025const csvParser = require('../../includes/csvParser');
36026
36027module.exports = function (Highcharts, appPath) {
36028    const elementId = 'coal-production-consumption-net-exports';
36029    var units = '';
36030    if ($('#' + elementId).length > 0) {
36031        Highcharts.chart(elementId, {
36032            chart: {
36033                type: 'line',
36034                spacingBottom: 30,
36035                events: {
36036                    load: creditsSizeAndPosition,
36037                    redraw: creditsSizeAndPosition
36038                }
36039            },
36040			credits: {
36041                enabled: true,
36042                href: null,
36043                style: {
36044                    cursor: 'normal'
36045                }
36046            },
36047            data: {
36048                csvURL: appPath + '/coal/charts/' + elementId + '.csv',
36049                startRow: 5,
36050                firstRowAsNames: true,
36051                beforeParse: function (csv) {
36052                    var parsedCSV = csvParser(csv);
36053                    this.chart.title.update({ text: parsedCSV[0][0] });
36054                    units = parsedCSV[1][0];
36055                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
36056                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
36057                    this.chart.update(
36058                        {
36059							accessibility: {
36060								description: parsedCSV[4][0],
36061							},
36062                            exporting: {
36063                                menuItemDefinitions:
36064                                {
36065                                    label: {
36066                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
36067                                    }
36068                                },
36069                                buttons: {
36070                                    contextButton: {
36071                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
36072                                    }
36073                                }
36074                            }
36075                        }
36076                    );
36077                    return csv;
36078                }
36079            },
36080            xAxis: {
36081                labels: {
36082                    format: "{value}",
36083                },
36084                tickInterval: 6,
36085            },
36086            yAxis: {
36087                tickInterval: 200,
36088				maxPadding: 0.01,
36089                labels: {
36090                    format: "{value:,.0f}"
36091                }
36092            },
36093            tooltip: {
36094                useHTML: true,
36095                shared: true,
36096                formatter: function () {
36097                    var html = '<b>' + this.x + '</b><br/>';
36098                    this.points.filter(function (value) {
36099                        html += '<span style="color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
36100                    });
36101                    return html;
36102                }
36103            },
36104            responsive: {
36105                rules: [{
36106                    condition: {
36107                        maxWidth: 450
36108                    },
36109                    chartOptions: {
36110						chart: {
36111							height: 400
36112						}
36113                    }
36114                },
36115				{
36116					condition: {
36117						minWidth: 451
36118					},
36119					
36120					chartOptions: {
36121						chart: {
36122							height: '65%'
36123						}
36124					}
36125				}]
36126            }
36127        });
36128    }
36129};
36130
36131},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],183:[function(require,module,exports){
36132const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
36133const csvParser = require('../../includes/csvParser');
36134
36135module.exports = function (Highcharts, appPath) {
36136    const elementId = 'reserves-by-type-mining-method';
36137    var units = '';
36138
36139    if ($('#' + elementId).length > 0) {
36140        Highcharts.chart(elementId, {
36141            chart: {
36142                type: 'column',
36143                spacingBottom: 30,
36144                events: {
36145                    load: creditsSizeAndPosition,
36146                    redraw: creditsSizeAndPosition
36147                }
36148            },
36149			credits: {
36150                enabled: true,
36151                href: null,
36152                style: {
36153                    cursor: 'normal'
36154                }
36155            },
36156            data: {
36157                csvURL: appPath + '/coal/charts/' + elementId + '.csv',
36158                startRow: 5,
36159                firstRowAsNames: true,
36160
36161                beforeParse: function (csv) {
36162                    var parsedCSV = csvParser(csv);
36163                    this.chart.title.update({ text: parsedCSV[0][0] });
36164                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
36165                    units = parsedCSV[1][0];
36166                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
36167                    this.chart.update(
36168                        {
36169							accessibility: {
36170								description: parsedCSV[4][0],
36171							},
36172                            exporting: {
36173                                menuItemDefinitions:
36174                                {
36175                                    label: {
36176                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
36177                                    }
36178                                },
36179                                buttons: {
36180                                    contextButton: {
36181                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
36182                                    }
36183                                }
36184                            }
36185                        }
36186                    );
36187                    return csv;
36188                }
36189            },
36190            tooltip: {
36191                useHTML: true,
36192                shared: true,
36193                formatter: function () {
36194                    let html = "<b>" + this.points[0].key + "</b><br/>";
36195                    this.points.filter(function (value) {
36196                        html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2004\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
36197                    });
36198                    return html;
36199                }
36200            },
36201			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
36202            xAxis: {
36203                labels: {
36204                    format: "{value}",
36205                    type: 'category',
36206                },
36207                tickInterval: 1,
36208            },
36209            yAxis: {
36210                tickInterval: 50,
36211                labels: {
36212                    format: "{value}"
36213                },
36214				reversedStacks: false
36215            },
36216            plotOptions: {
36217                column: {
36218                    stacking: 'normal'
36219                }
36220            },
36221            responsive: {
36222                rules: [{
36223                    condition: {
36224                        maxWidth: 450
36225                    },
36226                    chartOptions: {
36227						chart: {
36228							height: 400
36229						}
36230                    }
36231                },
36232				{
36233					condition: {
36234						minWidth: 451
36235					},
36236					
36237					chartOptions: {
36238						chart: {
36239							height: '65%'
36240						}
36241					}
36242				}]
36243            }
36244        });
36245    }
36246};
36247
36248},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],184:[function(require,module,exports){
36249const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
36250const csvParser = require('../../includes/csvParser');
36251
36252
36253module.exports = function (Highcharts, map, appPath) {
36254
36255    const elementId = 'top-coal-states';
36256
36257    // Our own options definition as two different series, will populate the data in the complete callback.
36258    var seriesOptions = [
36259        {
36260            id: "rank1",
36261            type: "map",
36262            allAreas: false,
36263            keys: ["postal-code"],
36264            joinBy: ['hc-a2', 'code'],
36265            data: [],
36266			borderWidth: .5,
36267            borderColor : "#cccccc",
36268            states: {
36269                hover: {
36270                    brightness: 0,
36271					borderWidth: 1,
36272					borderColor: Highcharts.eiaColors.darkGrey
36273                }
36274            },
36275			color: '#ffffff',
36276            dataLabels: {
36277                enabled: true,
36278                formatter: function () {
36279                    if (this.point.nameCode) {
36280                        if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") {
36281                            return this.point.code + " " + this.point.nameCode;
36282                        }
36283                        else {
36284                            return this.point.code + "<br/>" + this.point.nameCode;
36285                        }
36286					}
36287					else {
36288						return this.point.properties['hc-a2'];
36289					}
36290                }
36291            },
36292            tooltip: {
36293                valueSuffix: ''
36294            }
36295        }
36296    ];
36297
36298    if ($('#' + elementId).length > 0) {
36299        Highcharts.mapChart(elementId, {
36300            chart: {
36301                map: map,
36302                spacingBottom: 25,
36303                events: {
36304                    load: creditsSizeAndPosition,
36305                    redraw: creditsSizeAndPosition
36306                }
36307            },
36308			credits: {
36309                enabled: false,
36310                href: null,
36311                style: {
36312                    cursor: 'normal'
36313                }
36314            },
36315			caption: {
36316				verticalAlign: 'bottom',
36317				useHTML: true,
36318				margin: 0,
36319				style: {
36320					color: '#888',
36321					fontSize: '11px'
36322				},
36323				x: 32,
36324				y: 33
36325			},
36326            tooltip: {
36327                enabled: true,
36328                useHTML: true,
36329                formatter: function () {
36330                    var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : '';
36331                    if (html !== '')
36332                        return html
36333                }
36334            },
36335            data: {
36336                csvURL: appPath + '/coal/charts/' + elementId + '.csv',
36337                startRow: 4,
36338				firstRowAsNames: false,
36339                complete: function (options) {
36340                    var point;
36341                    var i;
36342
36343                    for (i = 0; i < options.series[0].data.length; i++) {
36344
36345                        point = options.series[0].data[i];
36346                        var pointValueString = Highcharts.numberFormat(point.value, 0);
36347
36348                        if (pointValueString) {
36349                            seriesOptions[0].data.push({
36350								code: point.name,
36351								nameCode: "<span>#" + pointValueString + "</span>",
36352								value: point.value
36353							});
36354                        }
36355						else {
36356							seriesOptions[0].data.push({
36357								code: point.name,
36358								value: null
36359							});
36360						}
36361
36362                    }
36363
36364                    // replace series options parsed by Highcharts with our own options definition
36365                    options.series = seriesOptions;
36366
36367                },
36368                beforeParse: function (csv) {
36369
36370                    var parsedCSV = csvParser(csv);
36371                    this.chart.title.update({ text: parsedCSV[0][0] });
36372
36373
36374                    this.chart.update(
36375                        {
36376							caption: {
36377								text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0]
36378							},
36379							accessibility: {
36380								description: parsedCSV[3][0]
36381							},
36382                            exporting: {
36383								allowHTML: true,
36384                                menuItemDefinitions:
36385                                {
36386                                    label: {
36387                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
36388                                    }
36389                                },
36390                                buttons: {
36391                                    contextButton: {
36392                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
36393                                    }
36394                                }
36395                            }
36396                        }
36397                    );
36398                    return csv;
36399                }
36400            },
36401			colorAxis: {
36402                dataClasses: [{
36403                    color: '#FFFFFF',
36404					to: 0
36405                },{
36406                    color: Highcharts.eiaColors.blue,
36407					from: 0,
36408					to: 1.0
36409                }, {
36410                    color: Highcharts.eiaColors.brown,
36411					from: 1.001,
36412					to: 2.0
36413                }, {
36414					color: Highcharts.eiaColors.green,
36415                    from: 2.001,
36416					to: 3.0
36417                }, {
36418					color: Highcharts.eiaColors.yellow,
36419                    from: 3.001,
36420					to: 4.0
36421                }, {
36422					color: Highcharts.eiaColors.red,
36423                    from: 4.001,
36424					to: 5.0
36425                }, {
36426					color: Highcharts.eiaColors.lightGreen,
36427                    from: 5.001,
36428					to: 6.0
36429                }, {
36430					color: Highcharts.eiaColors.darkGreen,
36431                    from: 6.001,
36432					to: 7.0
36433                }]
36434            },
36435            legend: {
36436                enabled: false
36437            },
36438			plotOptions: {
36439				map: {
36440					dataLabels: {
36441						style: {
36442							fontSize: '6.8px'
36443						}
36444					},
36445					nullColor: '#FFFFFF'
36446				}
36447			},
36448			responsive: {
36449				rules: [{
36450					condition: {
36451						maxWidth: 321
36452					},
36453					
36454					chartOptions: {
36455						chart: {
36456							height: 380
36457						},
36458						title: {
36459							margin: 20
36460						},
36461                        plotOptions: {
36462                            map: {
36463                                dataLabels: {
36464                                    style: {
36465                                        fontSize: '7px',
36466                                        lineHeight: 7
36467                                    }
36468                                }
36469                            }
36470                        }
36471					}
36472				},
36473				{
36474					condition: {
36475						minWidth: 322,
36476						maxWidth: 400
36477					},
36478					
36479					chartOptions: {
36480						chart: {
36481							height: 370
36482						},
36483						title: {
36484							margin: 5
36485						},
36486                        plotOptions: {
36487                            map: {
36488                                dataLabels: {
36489                                    style: {
36490                                        fontSize: '8px',
36491                                        lineHeight: 8
36492                                    }
36493                                }
36494                            }
36495                        }
36496					}
36497				},
36498				{
36499					condition: {
36500						minWidth: 401,
36501						maxWidth: 450
36502					},
36503					
36504					chartOptions: {
36505						chart: {
36506							height: 400
36507						},
36508						title: {
36509							margin: 5
36510						},
36511                        plotOptions: {
36512                            map: {
36513                                dataLabels: {
36514                                    style: {
36515                                        fontSize: '8px',
36516                                        lineHeight: 8
36517                                    }
36518                                }
36519                            }
36520                        }
36521					}
36522				},
36523				{
36524					condition: {
36525						minWidth: 451,
36526						maxWidth: 667
36527					},
36528					
36529					chartOptions: {
36530						chart: {
36531							height: '65%'
36532						},
36533						title: {
36534							margin: 15
36535						},
36536                        plotOptions: {
36537                            map: {
36538                                dataLabels: {
36539                                    style: {
36540                                        fontSize: '10px',
36541                                        lineHeight: 10
36542                                    }
36543                                }
36544                            }
36545                        }
36546					}
36547				},
36548				{
36549					condition: {
36550						minWidth: 668
36551					},
36552					
36553					chartOptions: {
36554						chart: {
36555							height: '65%'
36556						},
36557						title: {
36558							margin: 15
36559						},
36560						plotOptions: {
36561							map: {
36562								dataLabels: {
36563									style: {
36564                                        fontSize: '16px'
36565                                    }
36566								}
36567							}
36568						}
36569					}
36570				}]
36571			}
36572        });
36573    }
36574};
36575
36576},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],185:[function(require,module,exports){
36577const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
36578const csvParser = require('../../includes/csvParser');
36579
36580module.exports = function (Highcharts, appPath) {
36581    const elementId = 'crude-retail-prices';
36582    var units = '';
36583
36584    if ($('#' + elementId).length > 0) {
36585        Highcharts.chart(elementId, {
36586            chart: {
36587                type: 'line',
36588                spacingBottom: 25,
36589                events: {
36590                    load: creditsSizeAndPosition,
36591                    redraw: creditsSizeAndPosition
36592                }
36593            },
36594			credits: {
36595                enabled: true,
36596                href: null,
36597                style: {
36598                    cursor: 'normal'
36599                }
36600            },
36601            data: {
36602                csvURL: appPath + '/diesel-fuel/charts/' + elementId + '.csv',
36603                startRow: 5,
36604                firstRowAsNames: true,
36605                beforeParse: function (csv) {
36606                    var parsedCSV = csvParser(csv);
36607                    this.chart.title.update({ text: parsedCSV[0][0] });
36608                    units = parsedCSV[1][0];
36609                    this.chart.yAxis[0].update({ title: { text: units } });
36610                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
36611                    this.chart.update(
36612                        {
36613							accessibility: {
36614								description: parsedCSV[4][0],
36615							},
36616                            exporting: {
36617                                menuItemDefinitions:
36618                                {
36619                                    label: {
36620                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
36621                                    }
36622                                },
36623                                buttons: {
36624                                    contextButton: {
36625                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
36626                                    }
36627                                }
36628                            }
36629                        }
36630                    );
36631                    return csv;
36632                }
36633            },
36634            xAxis: {
36635                type: 'category',
36636                startOnTick: true,
36637                endOnTick: false,
36638                tickInterval: 24,
36639				tickWidth: 1,
36640				labels: {
36641					autoRotation: [-45]
36642				}
36643            },
36644            yAxis: {
36645                allowDecimals: true,
36646                labels: {
36647                    format: "${value:.2f}"
36648                }
36649            },
36650            tooltip: {
36651                shared: true,
36652                formatter: function () {
36653                    var toolTip = '<b>'+this.points[0].key+'</b><br/>';
36654                    toolTip += '<span style="font-size: 16px; color:' + this.points[0].series.color + '">' + '\u25AC\u2009\u2009' + '</span>';
36655                    toolTip += '<b>'+this.points[0].series.name+':</b> $'+this.points[0].y.toFixed(2)+' '+units+'<br/>';
36656                    toolTip += '<span style="font-size: 16px; color:' + this.points[1].series.color + '">' + '\u25AC\u2009\u2009' + '</span>';
36657                    toolTip += '<b>'+this.points[1].series.name+':</b> $'+this.points[1].y.toFixed(2)+' '+units+'<br/>';
36658                    return toolTip;                    
36659                }
36660            },
36661            responsive: {
36662                rules: [{
36663                    condition: {
36664                        maxWidth: 450
36665                    },
36666                    chartOptions: {
36667						chart: {
36668							height: 450
36669						},
36670						xAxis: {
36671                            labels: {
36672                                autoRotation: [-45]
36673                            }
36674                        }
36675                    }
36676                },
36677				{
36678					condition: {
36679						minWidth: 451
36680					},
36681					
36682					chartOptions: {
36683						chart: {
36684							height: '65%'
36685						},
36686                        xAxis: {
36687                            labels: {
36688                                autoRotation: [0]
36689                            }
36690                        }
36691					}
36692				}]
36693            }
36694        });
36695    }
36696};
36697
36698},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],186:[function(require,module,exports){
36699const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
36700const csvParser = require('../../includes/csvParser');
36701
36702module.exports = function (Highcharts, appPath) {
36703    const elementId = 'commercial-sector-electricity-consumption-by-major-end-uses';
36704
36705    if ($('#' + elementId).length > 0) {
36706        Highcharts.chart(elementId, {
36707            chart: {
36708                type: 'pie',
36709				spacingBottom: 25,
36710                events: {
36711                    load: creditsSizeAndPosition,
36712                    redraw: creditsSizeAndPosition
36713                }
36714            },
36715			credits: {
36716                enabled: true,
36717                href: null,
36718                style: {
36719                    cursor: 'normal'
36720                }
36721            },
36722            title: {
36723                text: '',
36724				margin: 5
36725            },
36726            data: {
36727                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
36728                startRow: 4,
36729                firstRowAsNames: false,
36730                
36731                beforeParse: function (csv) {
36732                    var parsedCSV = csvParser(csv);
36733                    this.chart.title.update({ text: parsedCSV[0][0] });
36734                    this.chart.credits.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0] });
36735
36736                    this.chart.update(
36737                        {
36738							accessibility: {
36739								description: parsedCSV[3][0],
36740							},
36741                            exporting: {
36742                                menuItemDefinitions:
36743                                {
36744                                    label: {
36745                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
36746                                    }
36747                                },
36748                                buttons: {
36749                                    contextButton: {
36750                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
36751                                    }
36752                                }
36753                            }
36754                        }
36755                    );
36756                    return csv;
36757                }
36758            },
36759			colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.red, Highcharts.eiaColors.brown, Highcharts.eiaColors.lightGreen, Highcharts.eiaColors.blue],
36760            series: [
36761                {}
36762            ],
36763            subtitle: {
36764                text: '',
36765                useHTML: true,
36766            },
36767            plotOptions: {
36768                pie: {
36769                    startAngle: 0,
36770                    dataLabels: {
36771                        enabled: true,
36772                        format: "<strong>{point.name}</strong><br/> {point.percentage:.1f}%",
36773                        distance: 10,
36774                        color: Highcharts.eiaColors.darkGrey,
36775                        style: {
36776                            "fontSize": "12px"
36777                        }
36778                    }
36779                }
36780            },
36781            tooltip: {
36782                useHTML: true,
36783                formatter: function () {
36784                    return "<span><b>" + this.key + "</b><br/>" + this.percentage.toFixed(1) + " %</span>";
36785                }
36786            },
36787			responsive: {
36788				rules: [{
36789					condition: {
36790						maxWidth: 450
36791					},
36792					
36793					chartOptions: {
36794						chart: {
36795							height: 508
36796						},
36797						plotOptions: {
36798							pie: {
36799								size: '80%',
36800								dataLabels: {
36801									enabled: false
36802								},
36803								showInLegend: true
36804							}
36805						},
36806						legend: {
36807							enabled: true
36808						}
36809					}
36810				},
36811				{
36812					condition: {
36813						minWidth: 451
36814					},
36815					
36816					chartOptions: {
36817						chart: {
36818							height: '65%'
36819						},
36820						plotOptions: {
36821							pie: {
36822								size: '65%',
36823								dataLabels: {
36824									enabled: true
36825								},
36826								showInLegend: false
36827							}
36828						},
36829						legend: {
36830							enabled: false
36831						}
36832					}
36833				}]
36834			}
36835        });
36836    }
36837};
36838
36839},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],187:[function(require,module,exports){
36840const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
36841const csvParser = require('../../includes/csvParser');
36842
36843module.exports = function (Highcharts, appPath) {
36844    const elementId = 'electric-storage-bess-capacity';
36845    let units = '';
36846    if ($('#' + elementId).length > 0) {
36847        Highcharts.chart(elementId, {
36848            chart: {
36849                type: 'line',
36850                spacingBottom: 25,
36851                events: {
36852                    load: creditsSizeAndPosition,
36853                    redraw: creditsSizeAndPosition
36854                }
36855            },
36856			credits: {
36857                enabled: true,
36858                href: null,
36859                style: {
36860                    cursor: 'normal'
36861                }
36862            },
36863            data: {
36864                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
36865                startRow: 6,
36866                firstRowAsNames: true,
36867                complete: function (options) {
36868                    if (options.series.length > 0) {
36869                        options.series[0].yAxis = 0;
36870                        options.series[1].yAxis = 1;
36871                    }
36872                },
36873                beforeParse: function (csv) {
36874                    var parsedCSV = csvParser(csv);
36875                    units = parsedCSV[1][0] + ',' + parsedCSV[2][0];
36876                    this.chart.title.update({ text: parsedCSV[0][0] });
36877                    this.chart.yAxis[0].update({ title: { text: units.split(',')[0] } });
36878                    this.chart.yAxis[1].update({ title: { text: units.split(',')[1] } });
36879                    this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] });
36880                    this.chart.update(
36881                        {
36882							accessibility: {
36883								description: parsedCSV[5][0],
36884							},
36885                            exporting: {
36886                                menuItemDefinitions:
36887                                {
36888                                    label: {
36889                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
36890                                    }
36891                                },
36892                                buttons: {
36893                                    contextButton: {
36894                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
36895                                    }
36896                                }
36897                            }
36898                        }
36899                    );
36900                    return csv;
36901                }
36902
36903            },
36904			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
36905            xAxis: {
36906                type: 'datetime',
36907				tickWidth: 1,
36908				labels: {
36909					formatter: function() {
36910						return this.value;
36911					}
36912				}
36913            },
36914            yAxis: [
36915                {
36916					maxPadding: 0,
36917					alignTicks: false,
36918                    labels: {
36919                        format: "{value:.0f}",
36920						style: { "color": Highcharts.eiaColors.blue }
36921                    },
36922					title: {
36923						style: { "color": Highcharts.eiaColors.blue }
36924					}
36925                },
36926                {
36927
36928                    gridLineColor: 'none',
36929                    opposite: true,
36930					maxPadding: 0,
36931					alignTicks: false,
36932                    labels: {
36933                        format: "{value:.0f}",
36934						style: { "color": Highcharts.eiaColors.brown }
36935                    },
36936					title: {
36937						style: { "color": Highcharts.eiaColors.brown }
36938					}
36939                }
36940            ],
36941            tooltip: {
36942                useHTML: true,
36943                shared: true,
36944                formatter: function () {
36945                    var html = '<b>' + this.points[0].point.name + '</b><br/>';
36946                    this.points.filter(function (value) {
36947                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name.split(' (')[0] + ':</b> ' + Highcharts.numberFormat(value.y, 0) + ' ' + value.series.name.split(' (')[1].slice(0, -1) + '<br/>';
36948                    });
36949                    return html;
36950                }
36951            },
36952            responsive: {
36953                rules: [{
36954                    condition: {
36955                        maxWidth: 450
36956                    },
36957                    chartOptions: {
36958                        chart: {
36959							height: 500
36960						},
36961						xAxis: {
36962							labels: {
36963								autoRotation: [-45],
36964								rotation: -45
36965							}
36966						},
36967                        yAxis: [
36968                            {
36969                                title: {
36970                                    style: {
36971										'fontSize': '11px'
36972									},
36973									align: 'middle',
36974									margin: 8
36975                                }
36976                            },
36977                            {
36978                                title: {
36979                                    style: {
36980										'fontSize': '11px'
36981									},
36982									align: 'middle',
36983									margin: 12,
36984									rotation: 270
36985                                }
36986                            }
36987                        ]
36988                    }
36989                },
36990				{
36991					condition: {
36992						minWidth: 451
36993					},
36994					
36995					chartOptions: {
36996						chart: {
36997							height: '65%'
36998						}
36999                    }
37000                }]
37001            }
37002        });
37003    }
37004};
37005
37006},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],188:[function(require,module,exports){
37007const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
37008const csvParser = require('../../includes/csvParser');
37009
37010module.exports = function (Highcharts, appPath) {
37011    const elementId = 'electric-storage-psh-gen';
37012    var units = '';
37013
37014    if ($('#' + elementId).length > 0) {
37015        Highcharts.chart(elementId, {
37016            chart: {
37017                type: 'area',
37018				spacingBottom: 30,
37019                events: {
37020                    load: creditsSizeAndPosition,
37021                    redraw: creditsSizeAndPosition
37022                }
37023            },
37024			credits: {
37025                enabled: true,
37026                href: null,
37027                style: {
37028                    cursor: 'normal'
37029                }
37030            },
37031            data: {
37032                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
37033                startRow: 5,
37034                firstRowAsNames: true,
37035				switchRowsAndColumns: true,
37036
37037                beforeParse: function (csv) {
37038                    var parsedCSV = csvParser(csv);
37039                    this.chart.title.update({ text: parsedCSV[0][0] });
37040                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
37041                    units = parsedCSV[1][0];
37042                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
37043                    this.chart.update(
37044                        {
37045							accessibility: {
37046								description: parsedCSV[4][0],
37047							},
37048                            exporting: {
37049                                menuItemDefinitions:
37050                                {
37051                                    label: {
37052                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
37053                                    }
37054                                },
37055                                buttons: {
37056                                    contextButton: {
37057                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
37058                                    }
37059                                }
37060                            }
37061                        }
37062                    );
37063                    return csv;
37064                }
37065            },
37066			legend: {
37067				reversed: true
37068			},
37069            xAxis: {
37070                labels: {
37071                    format: "{value}",
37072                    type: 'datetime',
37073                }
37074            },
37075            yAxis: {
37076                labels: {
37077                    format: "{value:,.0f}"
37078                },
37079				reversedStacks: false
37080            },
37081            plotOptions: {
37082                area: {
37083                    stacking: 'normal',
37084                }
37085            },
37086            tooltip: {
37087                useHTML: true,
37088                shared: true,
37089                formatter: function () {
37090                    var html = '';
37091                    this.points.filter(function (value) {
37092                        const yValue = value.y.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); // format with comma separator for thousands place
37093                        html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + yValue + ' ' + units + '<br/>';
37094                    });
37095                    return html;
37096                }
37097            },
37098            responsive: {
37099                rules: [{
37100                    condition: {
37101                        maxWidth: 450
37102                    },
37103                    chartOptions: {
37104						chart: {
37105							height: 400
37106						},
37107                        xAxis: {
37108                            startOnTick: false
37109                        }
37110                    }
37111                },
37112				{
37113					condition: {
37114						minWidth: 451
37115					},
37116					
37117					chartOptions: {
37118						chart: {
37119							height: '65%'
37120						}
37121					}
37122				}]
37123            }
37124        });
37125    }
37126};
37127
37128},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],189:[function(require,module,exports){
37129const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
37130const csvParser = require('../../includes/csvParser');
37131
37132module.exports = function (Highcharts, appPath) {
37133    const elementId = 'generating-capacity-major-source';
37134    let units = '';
37135    if ($('#' + elementId).length > 0) {
37136        Highcharts.chart(elementId, {
37137            chart: {
37138                type: 'column',
37139				spacingBottom: 30,
37140                events: {
37141                    load: creditsSizeAndPosition,
37142                    redraw: creditsSizeAndPosition
37143                }
37144            },
37145			credits: {
37146                enabled: true,
37147                href: null,
37148                style: {
37149                    cursor: 'normal'
37150                }
37151            },
37152            data: {
37153                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
37154                startRow: 5,
37155                firstRowAsNames: true,
37156
37157                beforeParse: function (csv) {
37158                    var parsedCSV = csvParser(csv);
37159                    units = parsedCSV[1][0];
37160                    this.chart.title.update({ text: parsedCSV[0][0] });
37161                    this.chart.yAxis[0].update({ title: { text: units } });
37162                    this.chart.xAxis[0].update({ categories: parsedCSV[5] });
37163                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
37164                    this.chart.update(
37165                        {
37166							accessibility: {
37167								description: parsedCSV[4][0],
37168							},
37169                            exporting: {
37170                                menuItemDefinitions:
37171                                {
37172                                    label: {
37173                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
37174                                    }
37175                                },
37176                                buttons: {
37177                                    contextButton: {
37178                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
37179                                    }
37180                                }
37181                            }
37182                        }
37183                    );
37184                    return csv;
37185                }
37186            },
37187			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.green, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.red, Highcharts.eiaColors.brown],
37188            xAxis: {
37189                labels: {
37190                    enabled: true,
37191                    useHTML: true
37192                }
37193            },
37194            plotOptions: {
37195                column: {
37196                    grouping: false
37197                },
37198				colorByPoint: true
37199            },
37200            yAxis: {
37201                tickInterval: 100,
37202                labels: {
37203                    format: '{value}'
37204                }
37205            },
37206            tooltip: {
37207                useHTML: true,
37208                formatter: function () {
37209                    return '<b>' + this.key + '</b><br/>' + this.y.toFixed(2) + ' ' + units;
37210                }
37211            },
37212            legend: {
37213                enabled: false
37214            },
37215            responsive: {
37216                rules: [{
37217                    condition: {
37218                        maxWidth: 450
37219                    },
37220                    chartOptions: {
37221						chart: {
37222							height: 450
37223						},
37224                        xAxis: {
37225                            labels: {
37226                                rotation: -45
37227                            }
37228                        }
37229                    }
37230                },
37231				{
37232					condition: {
37233						minWidth: 451
37234					},
37235					
37236					chartOptions: {
37237						chart: {
37238							height: '65%'
37239						},
37240                        xAxis: {
37241                            labels: {
37242                                rotation: 0
37243                            }
37244                        }
37245					}
37246				}]
37247            }
37248        });
37249    }
37250};
37251
37252},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],190:[function(require,module,exports){
37253const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
37254const csvParser = require('../../includes/csvParser');
37255
37256module.exports = function (Highcharts, appPath) {
37257    const elementId = 'generation-capacity-by-type';
37258
37259    if ($('#' + elementId).length > 0) {
37260        Highcharts.chart(elementId, {
37261            chart: {
37262                type: 'column',
37263                spacingBottom: 30,
37264                events: {
37265                    load: creditsSizeAndPosition,
37266                    redraw: creditsSizeAndPosition
37267                }
37268            },
37269            credits: {
37270                enabled: true,
37271                href: null,
37272                style: {
37273                    cursor: 'normal'
37274                }
37275            },
37276            data: {
37277                csvURL: appPath + '/electricity/charts/generation-capacity-by-type.csv',
37278                startRow: 5,
37279                firstRowAsNames: true,
37280
37281                beforeParse: function (csv) {
37282                    var parsedCSV = csvParser(csv);
37283                    this.chart.title.update({ text: parsedCSV[0][0] });
37284                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
37285                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
37286                    this.chart.update(
37287                        {
37288							accessibility: {
37289								description: parsedCSV[4][0],
37290							},
37291                            exporting: {
37292                                menuItemDefinitions:
37293                                {
37294                                    label: {
37295                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
37296                                    }
37297                                },
37298                                buttons: {
37299                                    contextButton: {
37300                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
37301                                    }
37302                                }
37303                            }
37304                        }
37305                    );
37306                    return csv;
37307                }
37308            },
37309			colors: [Highcharts.eiaColors.lightBlue,Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.orange, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
37310			legend: {
37311				reversed: true
37312			},
37313            xAxis: {
37314                labels: {
37315                    format: "{value}"
37316                },
37317                type: 'category'
37318            },
37319            yAxis: {
37320                tickInterval: 50,
37321                labels: {
37322                    format: "{value}"
37323                },
37324				reversedStacks: false
37325            },
37326            plotOptions: {
37327                column: {
37328                    stacking: 'normal',
37329                    dataLabels: {
37330                        enabled: false
37331                    }
37332                }
37333            },
37334            tooltip: {
37335                shared: true,
37336                useHTML: true,
37337                formatter: function () {
37338                    let html = "<b>" + this.points[0].key + "</b><br/>";
37339                    this.points.filter(function (value) {
37340                        html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(1) + ' million kilowatts</span><br/>';
37341                    });
37342                    return html;
37343                }
37344            },
37345			responsive: {
37346                rules: [{
37347                    condition: {
37348                        maxWidth: 450
37349                    },
37350                    chartOptions: {
37351						chart: {
37352							height: 450
37353						}
37354                    }
37355                },
37356				{
37357					condition: {
37358						minWidth: 451
37359					},
37360					
37361					chartOptions: {
37362						chart: {
37363							height: '65%'
37364						}
37365					}
37366				}]
37367            }
37368        });
37369    }
37370};
37371
37372},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],191:[function(require,module,exports){
37373const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
37374const csvParser = require('../../includes/csvParser');
37375
37376module.exports = function (Highcharts, appPath) {
37377    const elementId = 'generation-capacity-major';
37378
37379    if ($('#' + elementId).length > 0) {
37380        Highcharts.chart(elementId, {
37381            chart: {
37382                type: 'column',
37383                spacingBottom: 30,
37384                events: {
37385                    load: creditsSizeAndPosition,
37386                    redraw: creditsSizeAndPosition
37387                }
37388            },
37389            credits: {
37390                enabled: true,
37391                href: null,
37392                style: {
37393                    cursor: 'normal'
37394                }
37395            },
37396            data: {
37397                csvURL: appPath + '/electricity/charts/generation-capacity-major.csv',
37398                startRow: 5,
37399               
37399 firstRowAsNames: true,
37400
37401                beforeParse: function (csv) {
37402                    var parsedCSV = csvParser(csv);
37403                    this.chart.title.update({ text: parsedCSV[0][0] });
37404                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
37405                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
37406                    this.chart.update(
37407                        {
37408							accessibility: {
37409								description: parsedCSV[4][0],
37410							},
37411                            exporting: {
37412                                menuItemDefinitions:
37413                                {
37414                                    label: {
37415                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
37416                                    }
37417                                },
37418                                buttons: {
37419                                    contextButton: {
37420                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
37421                                    }
37422                                }
37423                            }
37424                        }
37425                    );
37426                    return csv;
37427                }
37428            },
37429			colors: [Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.blue, Highcharts.eiaColors.green, Highcharts.eiaColors.red, Highcharts.eiaColors.brown],
37430			legend: {
37431				reversed: true
37432			},
37433            xAxis: {
37434                labels: {
37435                    format: "{value}"
37436                },
37437                type: 'category'
37438            },
37439            yAxis: {
37440                tickInterval: 200,
37441                labels: {
37442                    format: "{value:,.0f}"
37443                },
37444				reversedStacks: false
37445            },
37446            plotOptions: {
37447                column: {
37448                    stacking: 'normal',
37449                    dataLabels: {
37450                        enabled: false
37451                    }
37452                }
37453            },
37454            tooltip: {
37455                shared: true,
37456                useHTML: true,
37457                formatter: function () {
37458                    let html = "<b>" + this.points[0].key + "</b><br/>";
37459                    this.points.filter(function (value) {
37460                        html += '<span font-size: 16px; style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toString() + ' million kilowatts</span><br/>';
37461                    });
37462                    return html;
37463                }
37464            },
37465			responsive: {
37466                rules: [{
37467                    condition: {
37468                        maxWidth: 450
37469                    },
37470                    chartOptions: {
37471						chart: {
37472							height: 450
37473						}
37474                    }
37475                },
37476				{
37477					condition: {
37478						minWidth: 451
37479					},
37480					
37481					chartOptions: {
37482						chart: {
37483							height: '65%'
37484						}
37485					}
37486				}]
37487            }
37488        });
37489    }
37490}
37491
37492},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],192:[function(require,module,exports){
37493const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
37494const csvParser = require('../../includes/csvParser');
37495
37496module.exports = function (Highcharts, appPath) {
37497    const elementId = 'generation-major-source';
37498    var units = '';
37499
37500    if ($('#' + elementId).length > 0) {
37501        Highcharts.chart(elementId, {
37502            chart: {
37503                type: 'area',
37504				spacingBottom: 30,
37505                events: {
37506                    load: creditsSizeAndPosition,
37507                    redraw: creditsSizeAndPosition
37508                }
37509            },
37510			credits: {
37511                enabled: true,
37512                href: null,
37513                style: {
37514                    cursor: 'normal'
37515                }
37516            },
37517            data: {
37518                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
37519                startRow: 5,
37520                firstRowAsNames: true,
37521
37522                beforeParse: function (csv) {
37523                    var parsedCSV = csvParser(csv);
37524                    this.chart.title.update({ text: parsedCSV[0][0] });
37525                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
37526                    units = parsedCSV[1][0];
37527                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
37528                    this.chart.update(
37529                        {
37530							accessibility: {
37531								description: parsedCSV[4][0],
37532							},
37533                            exporting: {
37534                                menuItemDefinitions:
37535                                {
37536                                    label: {
37537                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
37538                                    }
37539                                },
37540                                buttons: {
37541                                    contextButton: {
37542                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
37543                                    }
37544                                }
37545                            }
37546                        }
37547                    );
37548                    return csv;
37549                }
37550            },
37551			colors: [Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.blue, Highcharts.eiaColors.red, Highcharts.eiaColors.green, Highcharts.eiaColors.brown],
37552			legend: {
37553				reversed: true
37554			},
37555            xAxis: {
37556                labels: {
37557                    format: "{value}",
37558                    type: 'category',
37559                },
37560                startOnTick: true,
37561                minPadding: 0,
37562                maxPadding: 0
37563            },
37564            yAxis: {
37565                tickInterval: 500,
37566                labels: {
37567                    format: "{value:,.0f}"
37568                },
37569				reversedStacks: false
37570            },
37571            plotOptions: {
37572                area: {
37573                    stacking: 'normal',
37574                }
37575            },
37576            tooltip: {
37577                useHTML: true,
37578                shared: true,
37579                formatter: function () {
37580                    var html = '<b>' + this.x + '</b><br/>';
37581                    this.points.filter(function (value) {
37582                        const yValue = value.y.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); // format with comma separator for thousands place
37583                        html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + yValue + ' ' + units + '<br/>';
37584                    });
37585                    return html;
37586                }
37587            },
37588            responsive: {
37589                rules: [{
37590                    condition: {
37591                        maxWidth: 450
37592                    },
37593                    chartOptions: {
37594						chart: {
37595							height: 450
37596						},
37597                        xAxis: {
37598                            startOnTick: false
37599                        }
37600                    }
37601                },
37602				{
37603					condition: {
37604						minWidth: 451
37605					},
37606					
37607					chartOptions: {
37608						chart: {
37609							height: '65%'
37610						}
37611					}
37612				}]
37613            }
37614        });
37615    }
37616};
37617
37618},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],193:[function(require,module,exports){
37619const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
37620const csvParser = require('../../includes/csvParser');
37621
37622module.exports = function (Highcharts, appPath) {
37623    const elementId = 'generation-renewable-sources';
37624    var units = '';
37625
37626    if ($('#' + elementId).length > 0) {
37627        Highcharts.chart(elementId, {
37628            chart: {
37629                type: 'area',
37630				spacingBottom: 30,
37631                events: {
37632                    load: creditsSizeAndPosition,
37633                    redraw: creditsSizeAndPosition
37634                }
37635            },
37636			credits: {
37637                enabled: true,
37638                href: null,
37639                style: {
37640                    cursor: 'normal'
37641                }
37642            },
37643            data: {
37644                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
37645                startRow: 5,
37646                firstRowAsNames: true,
37647
37648                beforeParse: function (csv) {
37649                    var parsedCSV = csvParser(csv);
37650                    this.chart.title.update({ text: parsedCSV[0][0] });
37651                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
37652                    units = parsedCSV[1][0];
37653                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
37654                    this.chart.update(
37655                        {
37656							accessibility: {
37657								description: parsedCSV[4][0],
37658							},
37659                            exporting: {
37660                                menuItemDefinitions:
37661                                {
37662                                    label: {
37663                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
37664                                    }
37665                                },
37666                                buttons: {
37667                                    contextButton: {
37668                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
37669                                    }
37670                                }
37671                            }
37672                        }
37673                    );
37674                    return csv;
37675                }
37676            },
37677			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.orange, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
37678			legend: {
37679				reversed: true
37680			},
37681            xAxis: {
37682                labels: {
37683                    format: "{value}",
37684                    type: 'category',
37685                },
37686                startOnTick: true,
37687                minPadding: 0,
37688                maxPadding: 0
37689            },
37690            yAxis: {
37691				tickInterval: 100,
37692                labels: {
37693                    format: "{value}"
37694                },
37695				reversedStacks: false
37696            },
37697            plotOptions: {
37698                area: {
37699                    stacking: 'normal',
37700                }
37701            },
37702            tooltip: {
37703                useHTML: true,
37704                shared: true,
37705                formatter: function () {
37706                    var html = '<b>' + this.x + '</b><br/>';
37707                    this.points.filter(function (value) {
37708                        html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>';
37709                    });
37710                    return html;
37711                }
37712            },
37713            responsive: {
37714                rules: [{
37715                    condition: {
37716                        maxWidth: 450
37717                    },
37718                    chartOptions: {
37719						chart: {
37720							height: 435
37721						},
37722                        xAxis: {
37723                            startOnTick: false
37724                        },
37725						yAxis: {
37726							tickInterval: 100
37727						}
37728                    }
37729                },
37730				{
37731					condition: {
37732						minWidth: 451
37733					},
37734					
37735					chartOptions: {
37736						chart: {
37737							height: '65%'
37738						},
37739						yAxis: {
37740							tickInterval: 50
37741						}
37742					}
37743				}]
37744            }
37745        });
37746    }
37747};
37748
37749},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],194:[function(require,module,exports){
37750const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
37751const csvParser = require('../../includes/csvParser');
37752
37753module.exports = function (Highcharts, appPath) {
37754    const elementId = 'major-components-average-price-of-electricity';
37755
37756    if ($('#' + elementId).length > 0) {
37757        Highcharts.chart(elementId, {
37758            chart: {
37759                type: 'pie',
37760				spacingBottom: 25,
37761                events: {
37762                    load: creditsSizeAndPosition,
37763                    redraw: creditsSizeAndPosition
37764                }
37765            },
37766			credits: {
37767                enabled: true,
37768                href: null,
37769                style: {
37770                    cursor: 'normal'
37771                }
37772            },
37773            title: {
37774                text: '',
37775				margin: 5
37776            },
37777            data: {
37778                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
37779                startRow: 3,
37780                firstRowAsNames: false,
37781
37782                beforeParse: function (csv) {
37783                    var parsedCSV = csvParser(csv);
37784                    this.chart.title.update({ text: parsedCSV[0][0] });
37785                    this.chart.credits.update({ text: parsedCSV[1][0] });
37786                    this.chart.update(
37787                        {
37788							accessibility: {
37789								description: parsedCSV[2][0],
37790							},
37791                            exporting: {
37792                                menuItemDefinitions:
37793                                {
37794                                    label: {
37795                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
37796                                    }
37797                                },
37798                                buttons: {
37799                                    contextButton: {
37800                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
37801                                    }
37802                                }
37803                            }
37804                        }
37805                    );
37806                    return csv;
37807                }
37808            },
37809			colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue],
37810            subtitle: {
37811                text: '',
37812                useHTML: true,
37813            },
37814            plotOptions: {
37815                pie: {
37816                    dataLabels: {
37817                        enabled: true,
37818                        format: "<strong>{point.name}</strong><br/> {point.percentage:.1f}%",
37819                        distance: 10,
37820                        color: Highcharts.eiaColors.darkGrey,
37821                        style: {
37822                            "fontSize": "12px"
37823                        }
37824                    }
37825                }
37826            },
37827            tooltip: {
37828                useHTML: true,
37829                formatter: function () {
37830                    return "<span><b>" + this.key + "</b><br/>" + this.percentage.toFixed(1) + " %</span>";
37831                }
37832            },
37833			responsive: {
37834				rules: [{
37835					condition: {
37836						maxWidth: 450
37837					},
37838					
37839					chartOptions: {
37840						chart: {
37841							height: 410
37842						},
37843						plotOptions: {
37844							pie: {
37845								size: null,
37846								dataLabels: {
37847									enabled: false
37848								},
37849								showInLegend: true
37850							}
37851						},
37852						legend: {
37853							enabled: true
37854						}
37855					}
37856				},
37857				{
37858					condition: {
37859						minWidth: 451
37860					},
37861					
37862					chartOptions: {
37863						chart: {
37864							height: '65%'
37865						},
37866						plotOptions: {
37867							pie: {
37868								size: '65%',
37869								dataLabels: {
37870									enabled: true
37871								},
37872								showInLegend: false
37873							}
37874						},
37875						legend: {
37876							enabled: false
37877						}
37878					}
37879				}]
37880			}
37881        });
37882    }
37883};
37884
37885},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],195:[function(require,module,exports){
37886const creditsSizeAndPosition = require('../../includes/creditsS
37886izeAndPosition');
37887const csvParser = require('../../includes/csvParser');
37888
37889module.exports = function (Highcharts, appPath) {
37890    const elementId = 'manufacturing-electricity-consumption-by-major-end-uses';
37891
37892    if ($('#' + elementId).length > 0) {
37893        Highcharts.chart(elementId, {
37894            chart: {
37895                type: 'pie',
37896                spacingbottom: 25,
37897                events: {
37898                    load: creditsSizeAndPosition,
37899                    redraw: creditsSizeAndPosition
37900                }
37901            },
37902			credits: {
37903                enabled: true,
37904                href: null,
37905                style: {
37906                    cursor: 'normal'
37907                }
37908            },
37909            title: {
37910                text: '',
37911				margin: 5
37912            },
37913            data: {
37914                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
37915                startRow: 3,
37916                firstRowAsNames: false,
37917
37918                beforeParse: function (csv) {
37919                    var parsedCSV = csvParser(csv);
37920                    this.chart.title.update({ text: parsedCSV[0][0] });
37921                    this.chart.credits.update({ text: parsedCSV[1][0] });
37922
37923                    this.chart.update(
37924                        {
37925							accessibility: {
37926								description: parsedCSV[2][0],
37927							},
37928                            exporting: {
37929                                menuItemDefinitions:
37930                                {
37931                                    label: {
37932                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
37933                                    }
37934                                },
37935                                buttons: {
37936                                    contextButton: {
37937                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
37938                                    }
37939                                }
37940                            }
37941                        }
37942                    );
37943                    return csv;
37944                }
37945            },
37946			colors: [Highcharts.eiaColors.red, Highcharts.eiaColors.brown, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.yellow, Highcharts.eiaColors.blue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkBlue],
37947            subtitle: {
37948                text: '',
37949                useHTML: true,
37950            },
37951            plotOptions: {
37952                pie: {
37953                    dataLabels: {
37954                        enabled: true,
37955                        format: "<strong>{point.name}</strong><br/> {point.percentage:.1f}%",
37956                        distance: 10,
37957                        color: Highcharts.eiaColors.darkGrey,
37958                        style: {
37959                            "fontSize": "12px"
37960                        }
37961                    }
37962                }
37963            },
37964            tooltip: {
37965                useHTML: true,
37966                formatter: function () {
37967                    return "<span><b>" + this.key + "</b><br/>" + this.percentage.toFixed(1) + " %</span>";
37968                }
37969            },
37970            series: [
37971                {
37972
37973                }
37974            ],
37975			responsive: {
37976				rules: [{
37977					condition: {
37978						maxWidth: 450
37979					},
37980					
37981					chartOptions: {
37982						chart: {
37983							height: 425
37984						},
37985						plotOptions: {
37986							pie: {
37987								size: '80%',
37988								dataLabels: {
37989									enabled: false
37990								},
37991								showInLegend: true
37992							}
37993						},
37994						legend: {
37995							enabled: true
37996						}
37997					}
37998				},
37999				{
38000					condition: {
38001						minWidth: 451
38002					},
38003					
38004					chartOptions: {
38005						chart: {
38006							height: '65%'
38007						},
38008						plotOptions: {
38009							pie: {
38010								size: '65%',
38011								dataLabels: {
38012									enabled: true
38013								},
38014								showInLegend: false
38015							}
38016						},
38017						legend: {
38018							enabled: false
38019						}
38020					}
38021				}]
38022			}
38023        });
38024    }
38025};
38026
38027},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],196:[function(require,module,exports){
38028const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
38029const csvParser = require('../../includes/csvParser');
38030
38031module.exports = function (Highcharts, appPath) {
38032    const elementId = 'residential-sector-electricity-consumption-by-major-end-uses';
38033
38034    if ($('#' + elementId).length > 0) {
38035        Highcharts.chart(elementId, {
38036            chart: {
38037                type: 'pie',
38038                events: {
38039                    load: creditsSizeAndPosition,
38040                    redraw: creditsSizeAndPosition
38041                }
38042            },
38043			credits: {
38044                enabled: true,
38045                href: null,
38046                style: {
38047                    cursor: 'normal'
38048                }
38049            },
38050            title: {
38051                text: '',
38052				margin: 5
38053            },
38054            data: {
38055                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
38056                startRow: 4,
38057                firstRowAsNames: false,
38058
38059                beforeParse: function (csv) {
38060                    var parsedCSV = csvParser(csv);
38061                    this.chart.title.update({ text: parsedCSV[0][0] });
38062                    this.chart.credits.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0] });
38063                    
38064                    this.chart.update(
38065                        {
38066							accessibility: {
38067								description: parsedCSV[3][0],
38068							},
38069                            exporting: {
38070                                menuItemDefinitions:
38071                                {
38072                                    label: {
38073                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
38074                                    }
38075                                },
38076                                buttons: {
38077                                    contextButton: {
38078                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
38079                                    }
38080                                }
38081                            }
38082                        }
38083                    );
38084                    return csv;
38085                }
38086            },
38087			colors: [Highcharts.eiaColors.red, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.yellow, Highcharts.eiaColors.lightGreen, Highcharts.eiaColors.darkGreen, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue, Highcharts.eiaColors.green],
38088            subtitle: {
38089                text: '',
38090                useHTML: true,
38091            },
38092            plotOptions: {
38093                pie: {
38094                    dataLabels: {
38095                        enabled: true,
38096                        format: "<strong>{point.name}</strong><br/> {point.percentage:.1f}%",
38097                        distance: 10,
38098                        color: Highcharts.eiaColors.darkGrey,
38099                        style: {
38100                            "fontSize": "12px"
38101                        }
38102                    }
38103                }
38104            },
38105            tooltip: {
38106                useHTML: true,
38107                formatter: function () {
38108                    return "<span><b>" + this.key + "</b><br/>" + this.percentage.toFixed(1) + " %</span>";
38109                }
38110            },
38111            series: [
38112                {}
38113            ],
38114			responsive: {
38115				rules: [{
38116					condition: {
38117						maxWidth: 450
38118					},
38119					
38120					chartOptions: {
38121						chart: {
38122							height: 500
38123						},
38124						plotOptions: {
38125							pie: {
38126								size: '80%',
38127								dataLabels: {
38128									enabled: false
38129								},
38130								showInLegend: true
38131							}
38132						},
38133						legend: {
38134							enabled: true
38135						}
38136					}
38137				},
38138				{
38139					condition: {
38140						minWidth: 451
38141					},
38142					
38143					chartOptions: {
38144						chart: {
38145							height: '65%'
38146						},
38147						plotOptions: {
38148							pie: {
38149								size: '65%',
38150								dataLabels: {
38151									enabled: true
38152								},
38153								showInLegend: false
38154							}
38155						},
38156						legend: {
38157							enabled: false
38158						}
38159					}
38160				}]
38161			}
38162        });
38163    }
38164};
38165
38166},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],197:[function(require,module,exports){
38167const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
38168const csvParser = require('../../includes/csvParser');
38169
38170module.exports = function (Highcharts, appPath) {
38171    const elementId = 'retail-major-sectors';
38172    var units = '';
38173
38174    if ($('#' + elementId).length > 0) {
38175        Highcharts.chart(elementId, {
38176            chart: {
38177                type: 'area',
38178				spacingBottom: 30,
38179                events: {
38180                    load: creditsSizeAndPosition,
38181                    redraw: creditsSizeAndPosition
38182                }
38183            },
38184			credits: {
38185                enabled: true,
38186                href: null,
38187                style: {
38188                    cursor: 'normal'
38189                }
38190            },
38191            data: {
38192                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
38193                startRow: 5,
38194                firstRowAsNames: true,
38195
38196                beforeParse: function (csv) {
38197                    var parsedCSV = csvParser(csv);
38198                    this.chart.title.update({ text: parsedCSV[0][0] });
38199                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
38200                    units = parsedCSV[1][0];
38201                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
38202                    this.chart.update(
38203                        {
38204							accessibility: {
38205								description: parsedCSV[4][0],
38206							},
38207                            exporting: {
38208                                menuItemDefinitions:
38209                                {
38210                                    label: {
38211                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
38212                                    }
38213                                },
38214                                buttons: {
38215                                    contextButton: {
38216                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
38217                                    }
38218                                }
38219                            }
38220                        }
38221                    );
38222                    return csv;
38223                }
38224            },
38225			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red],
38226            xAxis: {
38227                labels: {
38228                    format: "{value}",
38229                    type: 'category',
38230                },
38231                startOnTick: true,
38232                minPadding: 0,
38233                maxPadding: 0
38234            },
38235            yAxis: {
38236                tickInterval: 0.5,
38237                maxPadding: 0,
38238                labels: {
38239                    format: "{value:.1f}"
38240                },
38241				reversedStacks: false
38242            },
38243			legend: {
38244				reversed: true
38245			},
38246            plotOptions: {
38247                area: {
38248                    stacking: 'normal'
38249                }
38250            },
38251            tooltip: {
38252                useHTML: true,
38253                shared: true,
38254                formatter: function () {
38255                    var html = '<b>' + this.x + '</b><br/>';
38256                    this.points.filter(function (value) {
38257                        html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(1) + ' ' + units + '<br/>';
38258                    });
38259                    return html;
38260                }
38261            },
38262            responsive: {
38263                rules: [{
38264                    condition: {
38265                        maxWidth: 450
38266                    },
38267                    chartOptions: {
38268						chart: {
38269							height: 500
38270						}
38271                    }
38272                },
38273				{
38274					condition: {
38275						minWidth: 451
38276					},
38277					
38278					chartOptions: {
38279						chart: {
38280							height: '65%'
38281						}
38282					}
38283				}]
38284            }
38285        });
38286    }
38287};
38288
38289},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],198:[function(require,module,exports){
38290const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
38291const csvParser = require('../../includes/csvParser');
38292
38293module.exports = function (Highcharts, appPath) {
38294    const elementId = 'retail-sales-major';
38295    let units = '';
38296    if ($('#' + elementId).length > 0) {
38297        Highcharts.chart(elementId, {
38298            chart: {
38299                type: 'column',
38300				spacingBottom: 30,
38301                events: {
38302                    load: creditsSizeAndPosition,
38303                    redraw: creditsSizeAndPosition
38304                }
38305            },
38306			credits: {
38307                enabled: true,
38308                href: null,
38309                style: {
38310                    cursor: 'normal'
38311                }
38312            },
38313            data: {
38314                csvURL: appPath + '/electricity/charts/' + elementId + '.csv',
38315                startRow: 5,
38316                firstRowAsNames: true,
38317
38318                beforeParse: function (csv) {
38319                    var parsedCSV = csvParser(csv);
38320                    units = parsedCSV[1][0];
38321                    this.chart.title.update({ text: parsedCSV[0][0] });
38322                    this.chart.yAxis[0].update({ title: { text: units } });
38323                    this.chart.xAxis[0].update({ categories: parsedCSV[5] });
38324                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
38325                    this.chart.update(
38326                        {
38327							accessibility: {
38328								description: parsedCSV[4][0],
38329							},
38330                            exporting: {
38331                                menuItemDefinitions:
38332                                {
38333                                    label: {
38334                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
38335                                    }
38336                                },
38337                                buttons: {
38338                                    contextButton: {
38339                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
38340                                    }
38341                                }
38342                            }
38343                        }
38344                    );
38345                    return csv;
38346                }
38347            },
38348            xAxis: {
38349                labels: {
38350                    enabled: true
38351                }
38352            },
38353            plotOptions: {
38354                column: {
38355                    grouping: false
38356                },
38357				colorByPoint: true
38358            },
38359            yAxis: {
38360                tickInterval: 300,
38361                labels: {
38362                    format: '{value:,.0f}'
38363                }
38364            },
38365            tooltip: {
38366                useHTML: true,
38367                formatter: function () {
38368                    const value = this.y.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); // format with comma separator for thousands place
38369                    return '<b>' + this.key + '</b><br/>' + value + ' ' + units;
38370                }
38371            },
38372            legend: {
38373                enabled: false
38374            },
38375			responsive: {
38376                rules: [{
38377                    condition: {
38378                        maxWidth: 450
38379                    },
38380                    chartOptions: {
38381						chart: {
38382							height: 365
38383						}
38384                    }
38385                },
38386				{
38387					cond
38387ition: {
38388						maxWidth: 667
38389					},
38390					
38391					chartOptions: {
38392						chart: {
38393							height: 325
38394						}
38395					}
38396				},
38397				{
38398					condition: {
38399						minWidth: 668
38400					},
38401					
38402					chartOptions: {
38403						chart: {
38404							height: '65%'
38405						}
38406					}
38407				}]
38408            }
38409        });
38410    }
38411};
38412
38413},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],199:[function(require,module,exports){
38414const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
38415const csvParser = require('../../includes/csvParser');
38416
38417module.exports = function (Highcharts, appPath) {
38418    const elementId = 'carbon-dioxide-emissions-by-major-fuel-type';
38419    var firstSeries = [];
38420    var secondSeries = [];
38421
38422    (function (Highcharts) {
38423        Highcharts.seriesTypes.pie.prototype.setTitle = function (titleOption) {
38424            var chart = this.chart,
38425                center = this.center || (this.yAxis && this.yAxis.center),
38426                labelBox,
38427                box,
38428                format;
38429
38430            if (center && titleOption) {
38431                box = {
38432                    x: chart.plotLeft + center[0] - 0.5 * center[2],
38433                    y: chart.plotTop + center[1] - 0.5 * center[2],
38434                    width: center[2],
38435                    height: center[2]
38436                };
38437
38438                format = titleOption.text || titleOption.format;
38439                format = Highcharts.format(format, this);
38440
38441                if (this.title) {
38442                    this.title.attr({
38443                        text: format
38444                    });
38445
38446                } else {
38447                    this.title = this.chart.renderer.label(format)
38448                        .css(titleOption.style)
38449                        .add()
38450                }
38451                labelBox = this.title.getBBox();
38452                titleOption.width = labelBox.width;
38453                titleOption.height = labelBox.height;
38454                this.title.align(titleOption, null, box);
38455            }
38456        };
38457
38458        Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'render', function (proceed) {
38459            proceed.call(this);
38460            this.setTitle(this.options.title);
38461        });
38462
38463    }(Highcharts));
38464
38465    if ($('#' + elementId).length > 0) {
38466
38467        Highcharts.chart(elementId, {
38468            chart: {
38469                events: {
38470                    load: creditsSizeAndPosition,
38471                    redraw: creditsSizeAndPosition
38472                },
38473                spacingBottom: 20
38474            },
38475            title: {
38476                text: ''
38477            },
38478			credits: {
38479                enabled: true,
38480                href: null,
38481                style: {
38482                    cursor: 'normal'
38483                }
38484            },
38485            data: {
38486                csvURL: appPath + '/energy-and-the-environment/charts/' + elementId + '.csv',
38487                startRow: 5,
38488                firstRowAsNames: true,
38489                complete: function (options) {
38490                    options.series[0].data = firstSeries;
38491                    var newSeries = JSON.stringify(options.series[0]);
38492                    newSeries = JSON.parse(newSeries);
38493                    newSeries.data = secondSeries;
38494                    options.series.push(newSeries);
38495                    var point = '';
38496                    var i;
38497
38498                    for (i = 0; i < options.series[0].data.length; i++) {
38499                        point = { name: options.series[0].data[i][0], y: options.series[0].data[i][1] }
38500                        options.series[0].data[i] = point;
38501                        switch (i) {
38502                            case 0:
38503                                point.color = Highcharts.eiaColors.green;
38504                                break;
38505                            case 1:
38506                                point.color = Highcharts.eiaColors.yellow;
38507                                break;
38508                            case 2:
38509                                point.color = Highcharts.eiaColors.blue;
38510                                break;
38511                            case 3:
38512                                point.color = Highcharts.eiaColors.brown;
38513                                break;
38514                        }
38515                    }
38516
38517                    for (i = 0; i < options.series[1].data.length; i++) {
38518                        point = { name: options.series[1].data[i][0], y: options.series[1].data[i][1] }
38519                        options.series[1].data[i] = point;
38520                        switch (i) {
38521                            case 0:
38522                                point.color = Highcharts.eiaColors.brown;
38523                                break;
38524                            case 1:
38525                                point.color = Highcharts.eiaColors.green;
38526                                break;
38527                            case 2:
38528                                point.color = Highcharts.eiaColors.blue;
38529                                break;
38530                        }
38531                    }
38532
38533                },
38534                beforeParse: function (csv) {
38535                    var parsedCSV = csvParser(csv);
38536                    //this.chart.title.update({ text : parsedCSV[0][0]+';'+parsedCSV[1][0] });
38537                    this.chart.credits.update({ text: parsedCSV[4][0] + '<br>' + parsedCSV[5][0] + '<br>' + parsedCSV[6][0] });
38538
38539                    this.chart.series[0].update(
38540                        {
38541                            name: parsedCSV[0][0],
38542							custom: parsedCSV[2][0]
38543                        }
38544                    );
38545                    this.chart.series[1].update(
38546                        {
38547                            name: parsedCSV[1][0],
38548							custom: parsedCSV[3][0]
38549                        }
38550                    );
38551
38552                    var i = 0;
38553                    for (i = 8; i < parsedCSV.length; i++) {
38554                        if (parsedCSV[i][0] === '') {
38555                            break;
38556                        }
38557                        firstSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]);
38558                    }
38559                    for (i = 13; i < parsedCSV.length; i++) {
38560                        if (parsedCSV[i][0] === '') {
38561                            break;
38562                        }
38563                        secondSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]);
38564                    }
38565
38566                    this.chart.update(
38567                        {
38568							accessibility: {
38569								description: parsedCSV[7][0],
38570							},
38571                            exporting: {
38572                                menuItemDefinitions:
38573                                {
38574                                    label: {
38575                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
38576                                    }
38577                                },
38578                                buttons: {
38579                                    contextButton: {
38580                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
38581                                    }
38582                                }
38583                            }
38584                        }
38585                    );
38586                    return csv;
38587                }
38588            },
38589            subtitle: {
38590                text: '',
38591                useHTML: true,
38592            },
38593            responsive: {
38594                rules: [
38595                    {
38596                        condition: {
38597                            maxWidth: 450
38598                        },
38599                        chartOptions: {
38600                            chart:{
38601                                height:575
38602                            },
38603                            series:[
38604                                {
38605									size: '40%',
38606                                    dataLabels:{
38607                                        enabled:false
38608                                    },
38609                                    showInLegend:true,
38610                                    title: {
38611										align: 'left',
38612                                        style: {
38613                                            width: "240px"
38614                                        },
38615                                        y: -70,
38616                                        x: -70
38617                                    },
38618                                    center: ['50%', '29%']
38619                                },
38620                                {
38621									size: '40%',
38622                                    dataLabels:{
38623                                        enabled:false
38624                                    },
38625                                    title: {
38626										align: 'left',
38627                                        style: {
38628                                            width: "270px"
38629                                        },
38630                                        y: -70,
38631                                        x: -70
38632                                    },
38633                                    center: ['50%', '87%']
38634                                }
38635                            ]
38636                        }
38637                    },
38638                    {
38639                        condition: {
38640                            minWidth: 451,
38641							maxWidth: 667
38642                        },
38643                        chartOptions: {
38644                            chart:{
38645                                height:330
38646                            },
38647                            series:[
38648                                {
38649									size: '50%',
38650                                    dataLabels:{
38651                                        enabled:true
38652                                    },
38653                                    showInLegend: false,
38654                                    title: {
38655                                        style: {
38656											width: "275px"
38657                                        },
38658                                        y: -100,
38659                                        x: 40
38660                                    },
38661                                    center: ['22%', '60%']
38662                                },
38663                                {
38664									size: '50%',
38665                                    dataLabels:{
38666                                        enabled:true
38667                                    },
38668                                    title: {
38669                                        style: {
38670											width: "275px"
38671                                        },
38672                                        x: 0,
38673                                        y: -100
38674                                    },
38675                                    center: ['75%', '60%']
38676                                }
38677                            ]
38678                        }
38679                    },
38680					{
38681                        condition: {
38682                            minWidth: 668,
38683							maxWidth: 690
38684                        },
38685                        chartOptions: {
38686                            chart:{
38687                                height: 315
38688                            },
38689                            series:[
38690                                {
38691									size: '50%',
38692                                    dataLabels:{
38693                                        enabled:true
38694                                    },
38695                                    showInLegend: false,
38696                                    title: {
38697                                        style: {
38698                                            width: "315px"
38699                                        },
38700                                        y: -100,
38701                                        x: 40
38702                                    },
38703                                    center: ['25%', '65%']
38704                                },
38705                                {
38706									size: '50%',
38707                                    dataLabels:{
38708                                        enabled:true
38709                                    },
38710                                    title: {
38711                                        style: {
38712                                            width: "315px"
38713                                        },
38714                                        x: 0,
38715                                        y: -100
38716                                    },
38717                                    center: ['75%', '65%']
38718                                }
38719                            ]
38720                        }
38721                    },
38722                    {
38723                        condition: {
38724                            minWidth: 691
38725                        },
38726                        chartOptions: {
38727                            chart:{
38728                                height: '60%'
38729                            },
38730                            series:[
38731                                {
38732									size: '50%',
38733                                    dataLabels:{
38734                                        enabled:true
38735                                    },
38736                                    showInLegend: false,
38737                                    title: {
38738                                        style: {
38739                                            width: "325px"
38740                                        },
38741                                        y: -100,
38742                                        x: 0
38743                                    },
38744                                    center: ['25%', '50%']
38745                                },
38746                                {
38747									size: '50%',
38748                                    dataLabels:{
38749                                        enabled:true
38750                                    },
38751                                    title: {
38752                                        style: {
38753                                            width: "325px"
38754                                        },
38755                                        x: 0,
38756                                        y: -100
38757                                    },
38758                                    center: ['75%', '50%']
38759                                }
38760                            ]
38761                        }
38762                    }
38763                ]
38764            },
38765			series: [
38766                {
38767                    data: [],
38768                    type: 'pie',
38769                    name: '',
38770					custom: '',
38771                    id: 'pie1',
38772                    softThreshold: false,
38773                    title: {
38774                        align: 'right',
38775                        format: '<b>{name}</b><br><span style="font-size: 1px;">\xA0</span><br><span style="font-size: 12px; font-weight: bold; color: #888;">{options.custom}</span>',
38776                        verticalAlign: 'top',
38777                        style: {
38778                            wordwrap: 'break-word',
38779							"fontSize": "16px",
38780							color: Highcharts.eiaColors.darkGrey
38781                        }
38782                    },
38783					subtitle: {
38784						format: 'test',
38785					}
38786                },
38787                {
38788                    data: [],
38789                    type: 'pie',
38790                    name: '',
38791					custom: '',
38792                    id: 'pie2',
38793                    title: {
38794                        align: 'center',
38795                        format: '<b>{name}</b><br><span style="font-size: 1px;">\xA0</span><br><span style="font-size: 12px; font-weight: bold; color: #888;">{options.custom}</span>',
38796                        verticalAlign: 'top',
38797                        style: {
38798                            wordwrap: 'break-word',
38799							"fontSize": "16px",
38800							color: Highcharts.eiaColors.darkGrey
38801                        }
38802                    }
38803                }
38804            ],
38805            plotOptions: {
38806                pie: {
38807                    dataLabels: {
38808                        enabled: true,
38809                        format: "<strong>{point.name}</strong><br> {point.percentage:.0f}%",
38810                        distance: 10,
38811                        color: Highcharts.eiaColors.darkGrey,
38812                        style: {
38813                            "fontSize": "12px"
38814                        }
38815                    },
38816                    point: {
38817                        events: {
38818                            legendItemClick: function () {
38819                                return false;
38820                            }
38821                        }
38822                    }
38823                }
38824            },
38825            tooltip: {
38826                useHTML: true,
38827                formatter: function () {
38828                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>";
38829                }
38830            }
38831        });
38832    }
38833};
38834
38835},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],200:[function(require,module,exports){
38836const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
38837const csvParser = require('../../includes/csvParser');
38838
38839module.exports = function (Highcharts, appPath) {
38840    const elementId = 'carbon-dioxide-end-use';
38841    let units = '';
38842    if ($('#' + elementId).length > 0) {
38843        Highcharts.chart(elementId, {
38844            chart: {
38845                type: 'column',
38846                spacingBottom: 25,
38847                events: {
38848                    load: creditsSizeAndPosition,
38849                    redraw: creditsSizeAndPosition
38850                }
38851            },
38852			credits: {
38853                enabled: true,
38854                href: null,
38855                style: {
38856                    cursor: 'normal'
38857                }
38858            },
38859            data: {
38860                csvURL: appPath + '/energy-and-the-environment/charts/' + elementId + '.csv',
38861                startRow: 5,
38862                firstRowAsNames: true,
38863
38864                beforeParse: function (csv) {
38865                    var parsedCSV = csvParser(csv);
38866                    units = parsedCSV[1][0];
38867                    this.chart.title.update({ text: parsedCSV[0][0] });
38868                    this.chart.yAxis[0].update({ title: { text: units } });
38869                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
38870                    this.chart.update(
38871                        {
38872							accessibility: {
38873								description: parsedCSV[4][0],
38874							},
38875                            exporting: {
38876                                menuItemDefinitions:
38877                                {
38878                                    label: {
38879                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
38880                                    }
38881                                },
38882                                buttons: {
38883                                    contextButton: {
38884                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
38885                                    }
38886                                }
38887                            }
38888                        }
38889                    );
38890                    return csv;
38891                }
38892            },
38893            colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
38894            xAxis: {
38895                labels: {
38896                    format: "{value}",
38897                },
38898                tickMarkPlacement: "between",
38899                tickWidth: 1
38900            },
38901            yAxis: {
38902                maxPadding: 0,
38903                tickInterval: 500,
38904                labels: {
38905                    format: "{value}"
38906                },
38907				reversedStacks: false
38908            },
38909            plotOptions: {
38910                column: {
38911                    stacking: 'normal',
38912                    dataLabels: {
38913                        enabled: true,
38914                        format: "{point.y:,.0f}",
38915                        style: {
38916                            color: Highcharts.eiaColors.darkGrey,
38917                            "textOutline": "none",
38918                            "fontWeight": 800
38919                        },
38920                        y: -6
38921                    }
38922                }
38923            },
38924            tooltip: {
38925                useHTML: true,
38926                shared: true,
38927                formatter: function () {
38928                    var html = '<b>' + this.points[0].key + '</b><br/>';
38929                    this.points.filter(function (value) {
38930                        html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(0).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
38931                    });
38932                    return html;
38933                }
38934            },
38935            responsive: {
38936                rules: [{
38937                    condition: {
38938                        maxWidth: 400
38939                    },
38940                    chartOptions: {
38941                        chart: {
38942                            height: 600
38943                        },
38944                        plotOptions: {
38945                            column: {
38946                                dataLabels: {
38947                                    style: {
38948                                        "fontWeight": 800,
38949                                        "fontSize": "9px"
38950                                    },
38951                                    y: -5,
38952                                    crop: false,
38953                                    overflow: "allow"
38954                                }
38955                            }
38956                        },
38957						legend: {
38958							itemStyle: {
38959								"textOverflow": '',
38960								width: '50%',
38961								lineHeight: 13
38962							}
38963						}
38964                    }
38965                },
38966				{
38967					condition: {
38968						minWidth: 451
38969					},
38970					
38971					chartOptions: {
38972						chart: {
38973							height: '65%'
38974						}
38975					}
38976				}]
38977            }
38978        });
38979    }
38980};
38981
38982},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],201:[function(require,module,exports){
38983const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
38984const csvParser = require('../../includes/csvParser');
38985
38986module.exports = function (Highcharts, appPath) {
38987    const elementId = 'energy-end-use-sector';
38988    let units = '';
38989    if ($('#' + elementId).length > 0) {
38990        Highcharts.chart(elementId, {
38991            chart: {
38992                type: 'column',
38993                spacingBottom: 25,
38994                events: {
38995                    load: creditsSizeAndPosition,
38996                    redraw: creditsSizeAndPosition
38997                }
38998            },
38999			credits: {
39000                enabled: true,
39001                href: null,
39002                style: {
39003                    cursor: 'normal'
39004                }
39005            },
39006            data: {
39007                csvURL: appPath + '/energy-and-the-environment/ch
39007arts/' + elementId + '.csv',
39008                startRow: 5,
39009                firstRowAsNames: true,
39010
39011                beforeParse: function (csv) {
39012                    var parsedCSV = csvParser(csv);
39013                    units = parsedCSV[1][0];
39014                    this.chart.title.update({ text: parsedCSV[0][0] });
39015                    this.chart.yAxis[0].update({ title: { text: units } });
39016                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
39017                    this.chart.update(
39018                        {
39019							accessibility: {
39020								description: parsedCSV[4][0],
39021							},
39022                            exporting: {
39023                                menuItemDefinitions:
39024                                {
39025                                    label: {
39026                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
39027                                    }
39028                                },
39029                                buttons: {
39030                                    contextButton: {
39031                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
39032                                    }
39033                                }
39034                            }
39035                        }
39036                    );
39037                    return csv;
39038                }
39039            },
39040            colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.yellow],
39041            xAxis: {
39042                labels: {
39043                    format: "{value}",
39044                },
39045                tickMarkPlacement: "between",
39046                tickWidth: 1
39047            },
39048            yAxis: {
39049                maxPadding: 0,
39050                tickInterval: 5,
39051                labels: {
39052                    format: "{value}"
39053                },
39054				reversedStacks: false
39055            },
39056            plotOptions: {
39057                column: {
39058                    stacking: 'normal',
39059                    dataLabels: {
39060                        enabled: true,
39061                        format: "{point.y:.1f}",
39062                        style: {
39063                            color: Highcharts.eiaColors.darkGrey,
39064                            "textOutline": "none",
39065                            "fontWeight": 800
39066                        },
39067                        y: -3
39068                    }
39069                }
39070            },
39071            tooltip: {
39072                useHTML: true,
39073                shared: true,
39074                formatter: function () {
39075                    var html = '<b>' + this.points[0].key + '</b><br/>';
39076                    this.points.filter(function (value) {
39077                        html += '<span font-size: 16px; style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(0).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
39078                    });
39079                    return html;
39080                }
39081            },
39082            responsive: {
39083                rules: [{
39084                    condition: {
39085                        maxWidth: 400
39086                    },
39087                    chartOptions: {
39088                        chart: {
39089                            height: 550
39090                        },
39091                        plotOptions: {
39092                            column: {
39093                                dataLabels: {
39094                                    style: {
39095                                        "fontWeight": 800,
39096                                        "fontSize": "9px"
39097                                    },
39098                                    y: -6,
39099                                    crop: false,
39100                                    overflow: "allow"
39101                                }
39102                            }
39103                        }
39104                    }
39105                },
39106				{
39107					condition: {
39108						minWidth: 451
39109					},
39110					
39111					chartOptions: {
39112						chart: {
39113							height: '65%'
39114						}
39115					}
39116				}]
39117            }
39118        });
39119    }
39120};
39121
39122},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],202:[function(require,module,exports){
39123const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
39124const csvParser = require('../../includes/csvParser');
39125
39126module.exports = function (Highcharts, appPath) {
39127    const elementId = 'greenhouse-gas-emissions-by-gas';
39128
39129    if ($('#' + elementId).length > 0) {
39130        Highcharts.chart(elementId, {
39131            chart: {
39132                type: 'pie',
39133                spacingBottom: 25,
39134                events: {
39135                    load: creditsSizeAndPosition,
39136                    redraw: creditsSizeAndPosition
39137                }
39138            },
39139            title: {
39140                text: '',
39141				margin: 15
39142            },
39143			credits: {
39144                enabled: true,
39145                href: null,
39146                style: {
39147                    cursor: 'normal'
39148                }
39149            },
39150            data: {
39151                csvURL: appPath + '/energy-and-the-environment/ch
39151arts/' + elementId + '.csv',
39152                startRow: 5,
39153                firstRowAsNames: false,
39154
39155                beforeParse: function (csv) {
39156                    var parsedCSV = csvParser(csv);
39157                    this.chart.title.update({ text: parsedCSV[0][0] });
39158                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
39159                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
39160                    this.chart.update(
39161                        {
39162							accessibility: {
39163								description: parsedCSV[4][0],
39164							},
39165                            exporting: {
39166                                menuItemDefinitions:
39167                                {
39168                                    label: {
39169                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
39170                                    }
39171                                },
39172                                buttons: {
39173                                    contextButton: {
39174                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
39175                                    }
39176                                }
39177                            }
39178                        }
39179                    );
39180                    return csv;
39181                }
39182            },
39183			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown],
39184            subtitle: {
39185                text: '',
39186                useHTML: true,
39187            },
39188            plotOptions: {
39189                pie: {
39190                    startAngle: 90,
39191                    dataLabels: {
39192                        enabled: true,
39193                        format: "<strong>{point.name}</strong> {point.percentage:.1f}%",
39194                        distance: 10,
39195                        color: Highcharts.eiaColors.darkGrey,
39196                        style: {
39197                            "fontSize": "12px"
39198                        }
39199                    }
39200                }
39201            },
39202            tooltip: {
39203                useHTML: true,
39204                formatter: function () {
39205                    return "<span><b>" + this.key + "</b><br/>" + Highcharts.numberFormat(this.percentage, 1) + " %</span>";
39206                }
39207            },
39208			responsive: {
39209				rules: [{
39210					condition: {
39211						maxWidth: 450
39212					},
39213					
39214					chartOptions: {
39215						chart: {
39216							height: 410
39217						},
39218						plotOptions: {
39219							pie: {
39220								size: null,
39221								dataLabels: {
39222									enabled: false
39223								},
39224								showInLegend: true
39225							}
39226						},
39227						legend: {
39228							enabled: true
39229						}
39230					}
39231				},
39232				{
39233					condition: {
39234						minWidth: 451
39235					},
39236					
39237					chartOptions: {
39238						chart: {
39239							height: '65%'
39240						},
39241						plotOptions: {
39242							pie: {
39243								size: '65%',
39244								dataLabels: {
39245									enabled: true
39246								},
39247								showInLegend: false
39248							}
39249						},
39250						legend: {
39251							enabled: false
39252						}
39253					}
39254				}]
39255			}
39256        });
39257    }
39258};
39259
39260},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],203:[function(require,module,exports){
39261const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
39262const csvParser = require('../../includes/csvParser');
39263
39264module.exports = function (Highcharts, appPath) {
39265    const elementId = 'major-fuel-energy-sources';
39266    var firstSeries = [];
39267    var secondSeries = [];
39268
39269    (function (Highcharts) {
39270        Highcharts.seriesTypes.pie.prototype.setTitle = function (titleOption) {
39271            var chart = this.chart,
39272                center = this.center || (this.yAxis && this.yAxis.center),
39273                labelBox,
39274                box,
39275                format;
39276
39277            if (center && titleOption) {
39278                box = {
39279                    x: chart.plotLeft + center[0] - 0.5 * center[2],
39280                    y: chart.plotTop + center[1] - 0.5 * center[2],
39281                    width: center[2],
39282                    height: center[2]
39283                };
39284
39285                format = titleOption.text || titleOption.format;
39286                format = Highcharts.format(format, this);
39287
39288                if (this.title) {
39289                    this.title.attr({
39290                        text: format
39291                    });
39292
39293                } else {
39294                    this.title = this.chart.renderer.label(format)
39295                        .css(titleOption.style)
39296                        .add()
39297                }
39298                labelBox = this.title.getBBox();
39299                titleOption.width = labelBox.width;
39300                titleOption.height = labelBox.height;
39301                this.title.align(titleOption, null, box);
39302            }
39303        };
39304
39305        Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'render', function (proceed) {
39306            proceed.call(this);
39307            this.setTitle(this.options.title);
39308        });
39309
39310    }
39310(Highcharts));
39311
39312    if ($('#' + elementId).length > 0) {
39313
39314        Highcharts.chart(elementId, {
39315            chart: {
39316                spacingBottom: 25,
39317                events: {
39318                    load: creditsSizeAndPosition,
39319                    redraw: creditsSizeAndPosition
39320                }
39321            },
39322            title: {
39323                text: ''
39324            },
39325			credits: {
39326                enabled: true,
39327                href: null,
39328                style: {
39329                    cursor: 'normal'
39330                }
39331            },
39332            data: {
39333                csvURL: appPath + '/energy-and-the-environment/charts/' + elementId + '.csv',
39334                startRow: 4,
39335                firstRowAsNames: true,
39336                complete: function (options) {
39337                    options.series[0].data = firstSeries;
39338                    var newSeries = JSON.stringify(options.series[0]);
39339                    newSeries = JSON.parse(newSeries);
39340                    newSeries.data = secondSeries;
39341                    options.series.push(newSeries);
39342                    var point = '';
39343                    var i;
39344
39345                    for (i = 0; i < options.series[0].data.length; i++) {
39346                        point = { name: options.series[0].data[i][0], y: options.series[0].data[i][1] }
39347                        options.series[0].data[i] = point;
39348                        switch (i) {
39349                            case 0:
39350                                point.color = Highcharts.eiaColors.blue;
39351                                break;
39352                            case 1:
39353                                point.color = Highcharts.eiaColors.brown;
39354                                break;
39355                            case 2:
39356                                point.color = Highcharts.eiaColors.green;
39357                                break;
39358                            case 3:
39359                                point.color = Highcharts.eiaColors.yellow;
39360                                break;
39361                        }
39362                    }
39363
39364                    for (i = 0; i < options.series[1].data.length; i++) {
39365                        point = { name: options.series[1].data[i][0], y: options.series[1].data[i][1] }
39366                        options.series[1].data[i] = point;
39367                        switch (i) {
39368                            case 0:
39369                                point.color = Highcharts.eiaColors.brown;
39370                                break;
39371                            case 1:
39372                                point.color = Highcharts.eiaColors.green;
39373                                break;
39374                            case 2:
39375                                point.color = Highcharts.eiaColors.blue;
39376                                break;
39377
39378                        }
39379                    }
39380
39381                },
39382                beforeParse: function (csv) {
39383                    var parsedCSV = csvParser(csv);
39384                    this.chart.credits.update({ text: parsedCSV[4][0] + '<br>' + parsedCSV[5][0] });
39385
39386                    this.chart.series[0].update(
39387                        {
39388                            name: parsedCSV[0][0],
39389							custom: parsedCSV[2][0]
39390                        }
39391                    );
39392                    //
39393                    this.chart.series[1].update(
39394                        {
39395                            name: parsedCSV[1][0],
39396							custom: parsedCSV[3][0]
39397                        }
39398                    );
39399
39400                    var i;
39401                    for (i = 7; i < parsedCSV.length; i++) {
39402                        if (parsedCSV[i][0] === '') {
39403                            break;
39404                        }
39405                        firstSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]);
39406                    }
39407                    for (i = 12; i < parsedCSV.length; i++) {
39408                        if (parsedCSV[i][0] === '') {
39409                            break;
39410                        }
39411                        secondSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]);
39412                    }
39413
39414                    this.chart.update(
39415                        {
39416							accessibility: {
39417								description: parsedCSV[6][0],
39418							},
39419                            exporting: {
39420                                menuItemDefinitions:
39421                                {
39422                                    label: {
39423                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
39424                                    }
39425                                },
39426                                buttons: {
39427                                    contextButton: {
39428                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
39429                                    }
39430                                }
39431                            }
39432                        }
39433                    );
39434                    return csv;
39435                }
39436            },
39437            subtitle: {
39438                text: '',
39439                useHTML: true,
39440            },
39441            responsive: {
39442                rules: [
39443                    {
39444                        condition: {
39445                            maxWidth: 450
39446                        },
39447                        chartOptions: {
39448                            chart:{
39449                                height:575
39450                            },
39451                            series:[
39452                                {
39453									size: '40%',
39454                                    dataLabels:{
39455                                        enabled:false
39456                                    },
39457                                    showInLegend:true,
39458                                    title: {
39459										align: 'left',
39460                                        style: {
39461                                            width: "240px"
39462                                        },
39463                                        y: -70,
39464                                        x: -70
39465                                    },
39466                                    center: ['50%', '29%']
39467                                },
39468                                {
39469									size: '40%',
39470                                    dataLabels:{
39471                                        enabled:false
39472                                    },
39473                                    title: {
39474										align: 'left',
39475                                        style: {
39476                                            width: "270px"
39477                                        },
39478                                        y: -70,
39479                                        x: -70
39480                                    },
39481                                    center: ['50%', '87%']
39482                                }
39483                            ]
39484                        }
39485                    },
39486                    {
39487                        condition: {
39488                            minWidth: 451,
39489							maxWidth: 667
39490                        },
39491                        chartOptions: {
39492                            chart:{
39493                                height:350
39494                            },
39495                            series:[
39496                                {
39497									size: '50%',
39498                                    dataLabels:{
39499                                        enabled:true
39500                                    },
39501                                    showInLegend: false,
39502                                    title: {
39503                                        style: {
39504											width: "275px"
39505                                        },
39506                                        y: -90,
39507                                        x: 40
39508                                    },
39509                                    center: ['22%', '60%']
39510                                },
39511                                {
39512									size: '50%',
39513                                    dataLabels:{
39514                                        enabled:true
39515                                    },
39516                                    title: {
39517                                        style: {
39518											width: "275px"
39519                                        },
39520                                        x: 0,
39521                                        y: -90
39522                                    },
39523                                    center: ['75%', '60%']
39524                                }
39525                            ]
39526                        }
39527                    },
39528					{
39529                        condition: {
39530                            minWidth: 668,
39531							maxWidth: 690
39532                        },
39533                        chartOptions: {
39534                            chart:{
39535                                height:350
39536                            },
39537                            series:[
39538                                {
39539									size: '50%',
39540                                    dataLabels:{
39541                                        enabled:true
39542                                    },
39543                                    showInLegend: false,
39544                                    title: {
39545                                        style: {
39546											width: "275px"
39547                                        },
39548                                        y: -95,
39549                                        x: 20
39550                                    },
39551                                    center: ['22%', '60%']
39552                                },
39553                                {
39554									size: '50%',
39555                                    dataLabels:{
39556                                        enabled:true
39557                                    },
39558                                    title: {
39559                                        style: {
39560											width: "275px"
39561                                        },
39562                                        x: 0,
39563                                        y: -95
39564                                    },
39565                                    center: ['75%', '60%']
39566                                }
39567                            ]
39568                        }
39569                    },
39570                    {
39571                        condition: {
39572                            minWidth: 691
39573                        },
39574                        chartOptions: {
39575                            chart:{
39576                                height: '60%'
39577                            },
39578                            series:[
39579                                {
39580									size: '50%',
39581                                    dataLabels:{
39582                                        enabled:true
39583                                    },
39584                                    showInLegend: false,
39585                                    title: {
39586                                        style: {
39587                                            width: "340px"
39588                                        },
39589                                        y: -100,
39590                                        x: 10
39591                                    },
39592                                    center: ['25%', '55%']
39593                                },
39594                                {
39595									size: '50%',
39596                                    dataLabels:{
39597                                        enabled:true
39598                                    },
39599                                    title: {
39600                                        style: {
39601                                            width: "340px"
39602                                        },
39603                                        x: -10,
39604                                        y: -100
39605                                    },
39606                                    center: ['75%', '55%']
39607                                }
39608                            ]
39609                        }
39610                    }
39611                ]
39612            },
39613            series: [
39614                {
39615                    data: [],
39616                    type: 'pie',
39617                    name: '',
39618					custom: '',
39619                    id: 'pie1',
39620                    softThreshold: false,
39621                    title: {
39622                        align: 'right',
39623                        format: '<b>{name}</b><br><span style="font-size: 1px;">\xA0</span><br><span style="font-size: 12px; font-weight: bold; color: #888;">{options.custom}</span>',
39624                        verticalAlign: 'top',
39625                        style: {
39626                            wordwrap: 'break-word',
39627							"fontSize": "16px",
39628							color: Highcharts.eiaColors.darkGrey
39629                        }
39630                    }
39631                },
39632                {
39633                    data: [],
39634                    type: 'pie',
39635                    name: '',
39636					custom: '',
39637                    id: 'pie2',
39638                    title: {
39639                        align: 'center',
39640                        format: '<b>{name}</b><br><span style="font-size: 1px;">\xA0</span><br><span style="font-size: 12px; font-weight: bold; color: #888;">{options.custom}</span>',
39641                        verticalAlign: 'top',
39642                        style: {
39643                            wordwrap: 'break-word',
39644							"fontSize": "16px",
39645							color: Highcharts.eiaColors.darkGrey
39646                        }
39647                    }
39648                }
39649            ],
39650            plotOptions: {
39651                pie: {
39652                    dataLabels: {
39653                        enabled: true,
39654                        format: "<strong>{point.name}</strong><br>{point.percentage:.0f}%",
39655                        distance: 10,
39656                        color: Highcharts.eiaColors.darkGrey,
39657                        style: {
39658                            "fontSize": "12px"
39659                        }
39660                    },
39661                    point: {
39662                        events: {
39663                            legendItemClick: function () {
39664                                return false;
39665                            }
39666                        }
39667                    }
39668                }
39669            },
39670            tooltip: {
39671                useHTML: true,
39672                formatter: function () {
39673                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>";
39674                }
39675            }
39676        });
39677    }
39678};
39679
39680},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],204:[function(require,module,exports){
39681const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
39682const csvParser = require('../../includes/csvParser');
39683
39684module.exports = function (Highcharts, appPath) {
39685    const elementId = 'world-carbon-dioxide-emissions';
39686
39687    if ($('#' + elementId).length > 0) {
39688        Highcharts.chart(elementId, {
39689            chart: {
39690                type: 'scatter',
39691                spacingBottom: 30,
39692                events: {
39693                    load: creditsSizeAndPosition,
39694                    redraw: creditsSizeAndPosition
39695                }
39696            },
39697			credits: {
39698                enabled: true,
39699                href: null,
39700                style: {
39701                    cursor: 'normal'
39702                }
39703            },
39704            data: {
39705                csvURL: appPath + '/energy-and-the-environment/charts/' + elementId + '.csv',
39706                startRow: 5,
39707                firstRowAsNames: true,
39708                complete: function (options) {
39709                    if (options.series.length > 0) {
39710                        options.series[0].yAxis = 0;
39711                        options.series[1].yAxis = 1;
39712                    }
39713                },
39714                beforeParse: function (csv) {
39715                    var parsedCSV = csvParser(csv);
39716                    this.chart.title.update({ text: parsedCSV[0][0] });
39717                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
39718                    this.chart.yAxis[1].update({ title: { text: parsedCSV[1][1] } });
39719                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
39720                    this.chart.update(
39721                        {
39722							accessibility: {
39723								description: parsedCSV[4][0],
39724							},
39725                            exporting: {
39726                                menuItemDefinitions:
39727                                {
39728                                    label: {
39729                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
39730                                    }
39731                                },
39732                                buttons: {
39733                                    contextButton: {
39734                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
39735                                    }
39736                                }
39737                            }
39738                        }
39739                    );
39740                    return csv;
39741                }
39742
39743            },
39744			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
39745            xAxis: {
39746                labels: {
39747                    format: "{value}",
39748                },
39749                tickInterval: 50,
39750                startOnTick: true,
39751                minPadding: 0,
39752                maxPadding: 0
39753            },
39754            yAxis: [
39755                {
39756                    labels: {
39757                        format: "{value}",
39758						style: { "color": Highcharts.eiaColors.blue }
39759                    },
39760					title: {
39761						style: { "color": Highcharts.eiaColors.blue }
39762					}
39763                },
39764                {
39765                    opposite: true,
39766                    labels: {
39767                        format: "{value}",
39768						style: { "color": Highcharts.eiaColors.brown }
39769                    },
39770					title: {
39771						style: { "color": Highcharts.eiaColors.brown }
39772					}
39773                }
39774            ],
39775            tooltip: {
39776                useHTML: true,
39777                shared: true,
39778                formatter: function () {
39779                    const name = this.series.name;
39780                    const units = name.split(' ')[1] === 'emissions' ? 'billion metric tons' : 'parts per million';
39781                    const yValue = name.split(' ')[1] === 'emissions' ? this.y : this.y.toFixed(2);
39782                    return '<span><b>' + this.x + '</b><br/><span style="font-size: 18px;color:' + this.color + '">' + '\u2022' + '</span><b> ' + this.series.name.split(' ')[0] + '</b><br/>' + yValue + ' ' + units + '</span>';
39783                }
39784            },
39785			responsive: {
39786                rules: [{
39787                    condition: {
39788                        maxWidth: 400
39789                    },
39790                    chartOptions: {
39791                        chart: {
39792                            height: 400
39793                        }
39794                    }
39795                },
39796				{
39797					condition: {
39798						minWidth: 451
39799					},
39800					
39801					chartOptions: {
39802						chart: {
39803							height: '65%'
39804						}
39805					}
39806				}]
39807            }
39808        });
39809    }
39810};
39811
39812},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],205:[function(require,module,exports){
39813const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
39814const csvParser = require('../../includes/csvParser');
39815
39816module.exports = function (Highcharts, appPath) {
39817    const elementId = 'annual-regular-grade-gasoline-prices';
39818    var units = '';
39819
39820    if ($('#' + elementId).length > 0) {
39821        Highcharts.chart(elementId, {
39822            chart: {
39823                type: 'line',
39824                spacingBottom: 30,
39825                events: {
39826                    load: creditsSizeAndPosition,
39827                    redraw: creditsSizeAndPosition
39828                }
39829            },
39830			credits: {
39831                enabled: true,
39832                href: null,
39833                style: {
39834                    cursor: 'normal'
39835                }
39836            },
39837            data: {
39838                csvURL: appPath + '/gasoline/charts/' + elementId + '.csv',
39839                startRow: 5,
39840                firstRowAsNames: true,
39841
39842                beforeParse: function (csv) {
39843                    var parsedCSV = csvParser(csv);
39844                    this.chart.title.update({ text: parsedCSV[0][0] });
39845                    units = parsedCSV[1][0];
39846                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
39847                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
39848                    this.chart.update(
39849                        {
39850							accessibility: {
39851								description: parsedCSV[4][0],
39852							},
39853                            exporting: {
39854                                menuItemDefinitions:
39855                                {
39856                                    label: {
39857                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
39858                                    }
39859                                },
39860                                buttons: {
39861                                    contextButton: {
39862                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
39863                                    }
39864                                }
39865                            }
39866                        }
39867                    );
39868                    return csv;
39869                },
39870            },
39871			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
39872            xAxis: {
39873                labels: {
39874                    format: "{value}",
39875                    rotation: -50
39876                },
39877                tickInterval: 2,
39878            },
39879            yAxis: {
39880                min: 0,
39881                tickInterval: .50,
39882                labels: {
39883                    format: "${value:.2f}"
39884                }
39885            },
39886            tooltip: {
39887                useHTML: true,
39888                shared: true,
39889                formatter: function () {
39890                    var html = '<b>' + this.x + '</b><br/>';
39891                    this.points.filter(function (value) {
39892                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> $' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
39893                    });
39894                    return html;
39895                }
39896            },
39897            responsive: {
39898                rules: [{
39899                    condition: {
39900                        maxWidth: 450
39901                    },
39902                    chartOptions: {
39903						chart: {
39904							height: 500
39905						}
39906                    }
39907                },
39908				{
39909					condition: {
39910						minWidth: 451
39911					},
39912					
39913					chartOptions: {
39914						chart: {
39915							height: '75%'
39916						}
39917					}
39918				}]
39919            }
39920        });
39921    }
39922};
39923
39924},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],206:[function(require,module,exports){
39925const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
39926const csvParser = require('../../includes/csvParser');
39927
39928module.exports = function (Highcharts, appPath) {
39929    const elementId = 'average-monthly-prices';
39930    var units = '';
39931
39932    if ($('#' + elementId).length > 0) {
39933        Highcharts.chart(elementId, {
39934            chart: {
39935                type: 'line',
39936                spacingBottom: 30,
39937                events: {
39938                    load: creditsSizeAndPosition,
39939                    redraw: creditsSizeAndPosition
39940                }
39941            },
39942			credits: {
39943                enabled: true,
39944                href: null,
39945                style: {
39946                    cursor: 'normal'
39947                }
39948            },
39949            data: {
39950                csvURL: appPath + '/gasoline/charts/' + elementId + '.csv',
39951                startRow: 5,
39952                firstRowAsNames: true,
39953                beforeParse: function (csv) {
39954                    var parsedCSV = csvParser(csv);
39955                    this.chart.title.update({ text: parsedCSV[0][0] });
39956                    units = parsedCSV[1][0];
39957                    this.chart.yAxis[0].update({ title: { text: units } });
39958                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
39959                    this.chart.update(
39960                        {
39961							accessibility: {
39962								description: parsedCSV[4][0],
39963							},
39964                            exporting: {
39965                                menuItemDefinitions:
39966                                {
39967                                    label: {
39968                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
39969                                    }
39970                                },
39971                                buttons: {
39972                                    contextButton: {
39973                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
39974                                    }
39975                                }
39976                            }
39977                        }
39978                    );
39979                    return csv;
39980                }
39981            },
39982			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
39983            xAxis: {
39984                type: 'category',
39985                startOnTick: true,
39986                endOnTick: false,
39987                tickInterval: 12,
39988                tickWidth: 1,
39989                labels: {
39990                    rotation: -45
39991                }
39992            },
39993            yAxis: {
39994                allowDecimals: true,
39995                min: 0,
39996				maxPadding: 0.01,
39997                tickInterval: 0.25,
39998                labels: {
39999                    format: "${value:.2f}"
40000                }
40001            },
40002            tooltip: {
40003                shared: true,
40004                formatter: function () {
40005                    var toolTip = '<b>'+this.points[0].key+'</b><br/>';
40006                    toolTip += '<span style="font-size: 16px; color:' + this.points[0].series.color + '">' + '\u25AC\u2009\u2009' + '</span>';
40007                    toolTip += '<b>'+this.points[0].series.name+':</b> $'+this.points[0].y.toFixed(2)+' '+units+'<br/>';
40008                    toolTip += '<span style="font-size: 16px; color:' + this.points[1].series.color + '">' + '\u25AC\u2009\u2009' + '</span>';
40009                    toolTip += '<b>'+this.points[1].series.name+':</b> $'+this.points[1].y.toFixed(2)+' '+units+'<br/>';
40010                    return toolTip;
40011                }
40012            },
40013            responsive: {
40014                rules: [{
40015                    condition: {
40016                        maxWidth: 450
40017                    },
40018                    chartOptions: {
40019						chart: {
40020							height: 500
40021						}
40022                    }
40023                },
40024				{
40025					condition: {
40026						minWidth: 451
40027					},
40028					
40029					chartOptions: {
40030						chart: {
40031							height: '65%'
40032						}
40033					}
40034				}]
40035            }
40036        });
40037    }
40038};
40039
40040},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],207:[function(require,module,exports){
40041const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
40042const csvParser = require('../../includes/csvParser');
40043
40044module.exports = function (Highcharts, appPath) {
40045    const elementId = 'regular-grade-gasoline-demand-retail-price';
40046    var units = [];
40047
40048    if ($('#' + elementId).length > 0) {
40049        Highcharts.chart(elementId, {
40050            chart: {
40051                spacingBottom: 30,
40052                events: {
40053                    load: creditsSizeAndPosition,
40054                    redraw: creditsSizeAndPosition
40055                }
40056            },
40057			credits: {
40058                enabled: false,
40059                href: null,
40060                style: {
40061                    cursor: 'normal'
40062                }
40063            },
40064			caption: {
40065				verticalAlign: 'bottom',
40066				useHTML: true,
40067				margin: 0,
40068				style: {
40069					color: '#888',
40070					fontSize: '11px'
40071				},
40072				x: 32,
40073				y: 39
40074			},
40075            data: {
40076                csvURL: appPath + '/gasoline/charts/' + elementId + '.csv',
40077                startRow: 5,
40078                firstRowAsNa
40078mes: true,
40079                complete: function (options) {
40080                    if (options.series.length > 0) {
40081                        options.series[0].type = "column";
40082                        options.series[0].yAxis = 0;
40083                        options.series[1].type = "line";
40084                        options.series[1].yAxis = 1;
40085                    }
40086                },
40087                beforeParse: function (csv) {
40088                    var parsedCSV = csvParser(csv);
40089                    this.chart.title.update({ text: parsedCSV[0][0] });
40090                    units.push(parsedCSV[1][0], parsedCSV[1][1]);
40091
40092                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
40093                    this.chart.yAxis[1].update({ title: { text: parsedCSV[1][1] } });
40094                    this.chart.caption.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
40095                    this.chart.update(
40096                        {
40097							accessibility: {
40098								description: parsedCSV[4][0],
40099							},
40100                            exporting: {
40101                                menuItemDefinitions:
40102                                {
40103                                    label: {
40104                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
40105                                    }
40106                                },
40107                                buttons: {
40108                                    contextButton: {
40109                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
40110                                    }
40111                                }
40112                            }
40113                        }
40114                    );
40115                    return csv;
40116                }
40117            },
40118            xAxis: {
40119                labels: {
40120                    format: '{value}'
40121                }
40122            },
40123            yAxis: [
40124                {
40125                    tickInterval: 25,
40126					softMax: 450,
40127					alignTicks: false,
40128					maxPadding: 0.05,
40129                    labels: {
40130                        format: "{value}",
40131						step: 2
40132                    }
40133                },
40134                {
40135					tickInterval: .25,
40136					softMax: 4.50,
40137					linkTo: 0,
40138					alignTicks: false,
40139                    labels: {
40140                        format: "${value:.2f}",
40141						step: 2
40142                    },
40143                    opposite: true
40144                }
40145            ],
40146            tooltip: {
40147                shared: true,
40148                useHTML: true,
40149                formatter: function () {
40150                    var html = '<b>' + this.points[0].key + '</b><br/>';
40151                    this.points.filter(function (value) {
40152                        var symbol = '';
40153                        var unit = '';
40154                        if (value.series.name === 'demand') {
40155                            symbol = '\u25CF\u2004\u2009';
40156                            unit = units[0];
40157                            html += '<span style="font-size: 16px;color:' + value.series.color + '">' + symbol + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + unit + '<br/>';
40158                        }
40159                        else {
40160                            symbol = '\u25AC\u2009\u2009';
40161                            unit = units[1];
40162                            html += '<span style="font-size: 16px;color:' + value.series.color + '">' + symbol + '</span><b>' + value.series.name + ':</b> $' + value.y.toFixed(2) + ' ' + unit + '<br/>';
40163                        }
40164                    });
40165                    return html;
40166                }
40167            },
40168            responsive: {
40169                rules: [{
40170                    condition: {
40171                        maxWidth: 450
40172                    },
40173                    chartOptions: {
40174						chart: {
40175							height: 500
40176						}
40177                    }
40178                },
40179				{
40180					condition: {
40181						minWidth: 451
40182					},
40183					
40184					chartOptions: {
40185						chart: {
40186							height: '65%'
40187						}
40188					}
40189				}]
40190            }
40191        });
40192    }
40193};
40194
40195},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],208:[function(require,module,exports){
40196const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
40197const csvParser = require('../../includes/csvParser');
40198
40199module.exports = function (Highcharts, appPath) {
40200    const elementId = 'us-gasoline-stocks';
40201    var units = '';
40202
40203    if ($('#' + elementId).length > 0) {
40204        Highcharts.chart(elementId, {
40205            chart: {
40206                type: 'arearange',
40207                spacingBottom: 30,
40208                events: {
40209                    load: creditsSizeAndPosition,
40210                    redraw: creditsSizeAndPosition
40211                }
40212            },
40213			credits: {
40214                enabled: true,
40215                href: null,
40216                style: {
40217                    cursor: 'normal'
40218                }
40219            },
40220            data: {
40221                csvURL: appPath + '/gasoline/charts/' + elementId + '.csv',
40222                startRow: 5,
40223                firstRowAsNames: true,
40224                parsed : function(columns) {
40225                    console.log(columns);
40226                },
40227                beforeParse: function (csv) {
40228                    var parsedCSV = csvParser(csv);
40229                    this.chart.title.update({ text: parsedCSV[0][0] });
40230                    units = parsedCSV[1][0];
40231                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
40232                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
40233                    this.chart.yAxis[0].update({ softMin: 170 });
40234                    
40235                    var headerRow = parsedCSV[this.chart.data.options.startRow];
40236                    var nameSplit = headerRow[2].split(' ');
40237                    this.chart.series[1].update({name : nameSplit[0] + ' ' + nameSplit[1]});
40238
40239                    this.chart.update(
40240                        {
40241							accessibility: {
40242								description: parsedCSV[4][0],
40243							},
40244                            exporting: {
40245                                menuItemDefinitions:
40246                                {
40247                                    label: {
40248                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
40249                                    }
40250                                },
40251                                buttons: {
40252                                    contextButton: {
40253                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
40254                                    }
40255                                }
40256                            }
40257                        }
40258                    );
40259                    return csv;
40260                }
40261            },
40262            xAxis: {
40263                type: 'datetime',
40264                dateTimeLabelFormats: {
40265                    month: '%b-%Y'
40266                },
40267                startOnTick: true,
40268                endOnTick: false,
40269                tickPositioner: function () {
40270                    var ticks = [],
40271                        minDate,
40272                        maxDate,
40273                        tickDate;
40274
40275                    ticks.info = this.tickPositions.info;
40276
40277                    if (this.dataMin !== null && this.dataMax !== null) {
40278                        minDate = new Date(this.dataMin);
40279                        maxDate = new Date(this.dataMax);
40280
40281                        for (
40282                            tickDate = new Date(Date.UTC(minDate.getUTCFullYear(), minDate.getUTCMonth()));
40283                            tickDate < maxDate;
40284                            tickDate = new Date(Date.UTC(tickDate.getUTCFullYear(), tickDate.getUTCMonth() + 3))) {
40285                            ticks.push(tickDate.valueOf());
40286                        }
40287                    }
40288
40289                    return ticks;
40290                }
40291            },
40292            series: [
40293                {
40294                    type: 'line',
40295                    name: '',
40296                    data: [],
40297                    color: Highcharts.eiaColors.blue,
40298                    zIndex: 1
40299                },
40300                {
40301                    data: [],
40302                    name: '',
40303                    lineWidth: 0,
40304                    color: Highcharts.eiaColors.lightGrey,
40305                    zIndex: 0
40306                }
40307            ],
40308            yAxis: {
40309                tickInterval: 30,
40310                labels: {
40311                    format: "{value}"
40312                }
40313            },
40314            tooltip: {
40315                shared: true,
40316                formatter: function () {
40317                    return this.points.reduce(function (s, point) {
40318                        var pointValue, pointChar;
40319                        if (point.point.low) {
40320                            pointValue = point.point.low.toFixed(2) + ' - ' + point.point.high.toFixed(2);
40321                            pointChar = ' \u25CF\u2004\u2009';
40322                        }
40323                        else {
40324                            pointValue = point.y.toFixed(2);
40325                            pointChar = '\u25AC\u2009\u2009';
40326                        }
40327                        return s + '<br/><span style="font-size: 16px; color:' + point.series.color + '">' + pointChar + '</span><b>' + point.series.name + ':</b> ' +
40328                            pointValue + ' ' + units;
40329                    }, '<b>' + Highcharts.dateFormat('%b-%d-%Y', this.x) + '</b>');
40330                }
40331            },
40332            responsive: {
40333                rules: [{
40334                    condition: {
40335                        maxWidth: 450
40336                    },
40337                    chartOptions: {
40338						chart: {
40339							height: 500
40340                        },
40341                        xAxis: {
40342                            labels: {
40343                                rotation: -45
40344                            }
40345                        }
40346                    }
40347                },
40348				{
40349					condition: {
40350						minWidth: 451
40351					},
40352					
40353					chartOptions: {
40354						chart: {
40355							height: '65%'
40356						}
40357					}
40358				}]
40359            }
40360        });
40361    }
40362};
40363
40364},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],209:[function(require,module,exports){
40365const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
40366const csvParser = require('../../includes/csvParser');
40367
40368
40369module.exports = function (Highcharts, map, appPath) {
40370
40371    const elementId = 'geothermal-electricity-generation';
40372    let mapData = Highcharts.geojson(map);
40373
40374    // Our own options definition as two different series, will populate the data in the complete callback
40375    var seriesOptions = [
40376        {
40377            id: "rank1",
40378            type: "map",
40379            allAreas: false,
40380            keys: ["postal-code"],
40381            joinBy: ['hc-a2', 'code'],
40382            data: [],
40383            mapData: mapData,
40384			borderWidth: 0.5,
40385            borderColor : "#cccccc",
40386            states: {
40387                hover: {
40388                    brightness: 0,
40389					borderWidth: 1,
40390					borderColor: Highcharts.eiaColors.darkGrey
40391                }
40392            },
40393			color: '#ffffff',
40394            dataLabels: {
40395                enabled: true,
40396                formatter: function () {
40397                    if (this.point.nameCode) {
40398                        if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") {
40399                            return this.point.code + " " + this.point.nameCode;
40400                        }
40401                        else {
40402                            return this.point.code + "<br/>" + this.point.nameCode;
40403                        }
40404					}
40405					else {
40406						return this.point.properties['hc-a2'];
40407					}
40408                }
40409            },
40410            tooltip: {
40411                valueSuffix: ''
40412            }
40413        }
40414    ];
40415
40416    if ($('#' + elementId).length > 0) {
40417        Highcharts.mapChart(elementId, {
40418            chart: {
40419                map: map,
40420                spacingBottom: 25,
40421                events: {
40422                    load: creditsSizeAndPosition,
40423                    redraw: creditsSizeAndPosition
40424                }
40425            },
40426			credits: {
40427                enabled: false,
40428                href: null,
40429                style: {
40430                    cursor: 'normal'
40431                }
40432            },
40433			caption: {
40434				verticalAlign: 'bottom',
40435				useHTML: true,
40436				margin: 0,
40437				style: {
40438					color: '#888',
40439					fontSize: '11px'
40440				},
40441				x: 32,
40442				y: 33
40443			},
40444            tooltip: {
40445                enabled: true,
40446                useHTML: true,
40447                formatter: function () {
40448                    var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : '';
40449                    if (html !== '')
40450                        return html
40451                }
40452            },
40453            data: {
40454                csvURL: appPath + '/geothermal/charts/' + elementId + '.csv',
40455                startRow: 4,
40456				firstRowAsNames: false,
40457                complete: function (options) {
40458                    var point;
40459                    var i;
40460
40461                    for (i = 0; i < options.series[0].data.length; i++) {
40462
40463                        point = options.series[0].data[i];
40464                        var pointValueString = Highcharts.numberFormat(point.value, 0);
40465
40466                        if (pointValueString) {
40467                            seriesOptions[0].data.push({
40468								code: point.name,
40469								nameCode: "<span>#" + pointValueString + "</span>",
40470								value: point.value
40471							});
40472                        }
40473						else {
40474							seriesOptions[0].data.push({
40475								code: point.name,
40476								value: null
40477							});
40478						}
40479
40480                    }
40481
40482                    // replace series options parsed by Highcharts with our own options definition
40483                    options.series = seriesOptions;
40484
40485                },
40486                beforeParse: function (csv) {
40487
40488                    var parsedCSV = csvParser(csv);
40489                    this.chart.title.update({ text: parsedCSV[0][0] });
40490
40491
40492                    this.chart.update(
40493                        {
40494							caption: {
40495								text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0]
40496							},
40497							accessibility: {
40498								description: parsedCSV[3][0]
40499							},
40500                            exporting: {
40501								allowHTML: true,
40502                                menuItemDefinitions:
40503                                {
40504                                    label: {
40505                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
40506                                    }
40507                                },
40508                                buttons: {
40509                                    contextButton: {
40510                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
40511                                    }
40512                                }
40513                            }
40514                        }
40515                    );
40516                    return csv;
40517                }
40518            },
40519			colorAxis: {
40520                dataClasses: [{
40521                    color: '#FFFFFF',
40522					to: 0
40523                },{
40524                    color: Highcharts.eiaColors.blue,
40525					from: 0,
40526					to: 1.0
40527                }, {
40528                    color: Highcharts.eiaColors.brown,
40529					from: 1.001,
40530					to: 2.0
40531                }, {
40532					color: Highcharts.eiaColors.red,
40533                    from: 2.001,
40534					to: 3.0
40535                }, {
40536					color: Highcharts.eiaColors.yellow,
40537                    from: 3.001,
40538					to: 4.0
40539                }, {
40540					color: Highcharts.eiaColors.yellow,
40541                    from: 4.001,
40542					to: 5.0
40543                }, {
40544					color: Highcharts.eiaColors.lightGreen,
40545                    from: 5.001,
40546					to: 6.0
40547                }, {
40548					color: Highcharts.eiaColors.darkGreen,
40549                    from: 6.001,
40550					to: 7.0
40551                }]
40552            },
40553            legend: {
40554                enabled: false
40555            },
40556			plotOptions: {
40557				map: {
40558					dataLabels: {
40559						style: {
40560							fontSize: '6.8px'
40561						}
40562					},
40563					nullColor: '#FFFFFF'
40564				}
40565			},
40566			responsive: {
40567				rules: [{
40568					condition: {
40569						maxWidth: 321
40570					},
40571					
40572					chartOptions: {
40573						chart: {
40574							height: 380
40575						},
40576						title: {
40577							margin: 20
40578						},
40579                        plotOptions: {
40580                            map: {
40581                                dataLabels: {
40582                                    style: {
40583                                        fontSize: '7px',
40584                                        lineHeight: 7
40585                                    }
40586                                }
40587                            }
40588                        }
40589					}
40590				},
40591				{
40592					condition: {
40593						minWidth: 322,
40594						maxWidth: 400
40595					},
40596					
40597					chartOptions: {
40598						chart: {
40599							height: 370
40600						},
40601						title: {
40602							margin: 5
40603						},
40604                        plotOptions: {
40605                            map: {
40606                                dataLabels: {
40607                                    style: {
40608                                        fontSize: '8px',
40609                                        lineHeight: 8
40610                                    }
40611                                }
40612                            }
40613                        }
40614					}
40615				},
40616				{
40617					condition: {
40618						minWidth: 401,
40619						maxWidth: 450
40620					},
40621					
40622					chartOptions: {
40623						chart: {
40624							height: 400
40625						},
40626						title: {
40627							margin: 5
40628						},
40629                        plotOptions: {
40630                            map: {
40631                                dataLabels: {
40632                                    style: {
40633                                        fontSize: '8px',
40634                                        lineHeight: 8
40635                                    }
40636                                }
40637                            }
40638                        }
40639					}
40640				},
40641				{
40642					condition: {
40643						minWidth: 451,
40644						maxWidth: 667
40645					},
40646					
40647					chartOptions: {
40648						chart: {
40649							height: '65%'
40650						},
40651						title: {
40652							margin: 15
40653						},
40654                        plotOptions: {
40655                            map: {
40656                                dataLabels: {
40657                                    style: {
40658                                        fontSize: '10px',
40659                                        lineHeight: 10
40660                                    }
40661                                }
40662                            }
40663                        }
40664					}
40665				},
40666				{
40667					condition: {
40668						minWidth: 668
40669					},
40670					
40671					chartOptions: {
40672						chart: {
40673							height: '65%'
40674						},
40675						title: {
40676							margin: 15
40677						},
40678						plotOptions: {
40679							map: {
40680								dataLabels: {
40681									style: {
40682                                        fontSize: '16px'
40683                                    }
40684								}
40685							}
40686						}
40687					}
40688				}]
40689			}
40690        });
40691    }
40692};
40693
40694},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],210:[function(require,module,exports){
40695const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
40696const csvParser = require('../../includes/csvParser');
40697
40698module.exports = function (Highcharts, appPath) {
40699    const elementId = 'average-monthly-heating-crude';
40700    var units = '';
40701
40702    if ($('#' + elementId).length > 0) {
40703        Highcharts.chart(elementId, {
40704            chart: {
40705                type: 'line',
40706                events: {
40707                    load: creditsSizeAndPosition,
40708                    redraw: creditsSizeAndPosition
40709                }
40710            },
40711			credits: {
40712                enabled: true,
40713                href: null,
40714                style: {
40715                    cursor: 'normal'
40716                }
40717            },
40718            data: {
40719                csvURL: appPath + '/heating-oil/charts/' + elementId + '.csv',
40720                startRow: 5,
40721                firstRowAsNames: true,
40722                beforeParse: function (csv) {
40723                    var parsedCSV = csvParser(csv);
40724                    this.chart.title.update({ text: parsedCSV[0][0] });
40725                    units = parsedCSV[1][0];
40726                    this.chart.yAxis[0].update({ title: { text: units } });
40727                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
40728                    this.chart.update(
40729                        {
40730							accessibility: {
40731								description: parsedCSV[4][0],
40732							},
40733                            exporting: {
40734                                menuItemDefinitions:
40735                                {
40736                                    label: {
40737                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
40738                                    }
40739                                },
40740                                buttons: {
40741                                    contextButton: {
40742                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
40743                                    }
40744                                }
40745                            }
40746                        }
40747                    );
40748                    return csv;
40749                }
40750            },
40751            xAxis: {
40752                type: 'category',
40753                tickInterval: 24, // every 2 years
40754                labels: {
40755                    enabled: true,
40756                    rotation: -45,
40757                    useHTML:true,
40758                    format: '{value}'
40759                },
40760                startOnTick:true,
40761                tickWidth:1
40762            },
40763            yAxis: {
40764                allowDecimals: true,
40765                tickInterval: 0.5,
40766				maxPadding: 0.01,
40767                labels: {
40768                    format: "{value:.2f}"
40769                }
40770            },
40771            tooltip: {
40772                shared: true,
40773                formatter: function () {
40774                    var toolTip = '<b>'+this.points[0].key+'</b><br>';
40775                    toolTip += '<span style="font-size: 16px;color:' + this.points[0].color + '">' + '\u25AC\u2009\u2009'+ '</span><b>'+this.points[0].series.name+': </b>$'+this.points[0].y.toFixed(2)+' '+units+'<br/>';
40776                    toolTip += '<span style="font-size: 16px;color:' + this.points[1].color + '">' + '\u25AC\u2009\u2009'+ '</span><b>'+this.points[1].series.name+': </b>$'+this.points[1].y.toFixed(2)+' '+units;
40777                    return toolTip;
40778                }
40779            },
40780            responsive: {
40781                rules: [{
40782                    condition: {
40783                        maxWidth: 450
40784                    },
40785                    chartOptions: {
40786						chart: {
40787							height: 475
40788						}
40789                    }
40790                },
40791				{
40792					condition: {
40793						minWidth: 451
40794					},
40795					
40796					chartOptions: {
40797						chart: {
40798							height: '65%'
40799						}
40800					}
40801				}]
40802            }
40803        });
40804    }
40805};
40806
40807},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],211:[function(require,module,exports){
40808const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
40809const csvParser = require('../../includes/csvParser');
40810
40811module.exports = function (Highcharts, appPath) {
40812    const elementId = 'heating-oil-sales-by-census';
40813
40814    if ($('#' + elementId).length > 0) {
40815        Highcharts.chart(elementId, {
40816            chart: {
40817                type: 'pie',
40818                spacingBottom: 25,
40819                events: {
40820                    load: creditsSizeAndPosition,
40821                    redraw: creditsSizeAndPosition
40822                }
40823            },
40824            title: {
40825                text: '',
40826                margin: 15
40827            },
40828            credits: {
40829                enabled: true,
40830                href: null,
40831                style: {
40832                    cursor: 'normal'
40833                }
40834            },
40835            data: {
40836                csvURL: appPath + '/heating-oil/charts/' + elementId + '.csv',
40837                startRow: 5,
40838                firstRowAsNames: false,
40839
40840                beforeParse: function (csv) {
40841                    var parsedCSV = csvParser(csv);
40842                    this.chart.title.update({ text: parsedCSV[0][0] });
40843                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
40844                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
40845                    this.chart.update(
40846                        {
40847							accessibility: {
40848								description: parsedCSV[4][0],
40849							},
40850                            exporting: {
40851                                menuItemDefinitions:
40852                                {
40853                                    label: {
40854                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
40855                                    }
40856                                },
40857                                buttons: {
40858                                    contextButton: {
40859                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
40860                                    }
40861                                }
40862                            }
40863                        }
40864                    );
40865                    return csv;
40866                }
40867            },
40868            colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
40869            subtitle: {
40870                text: '',
40871                useHTML: true,
40872            },
40873            plotOptions: {
40874                pie: {
40875                    startAngle: 140,
40876                    dataLabels: {
40877                        enabled: true,
40878						formatter: function () {
40879							return '<strong>' + this.key + ' ' + Highcharts.numberFormat((this.y*100), 0) + '%</strong>';
40880						},
40881                        distance: 10,
40882                        color: Highcharts.eiaColors.darkGrey,
40883                        style: {
40884                            "fontSize": "12px"
40885                        }
40886                    }
40887                }
40888            },
40889            tooltip: {
40890                useHTML: true,
40891                formatter: function () {
40892                    return "<span><b>" + this.key + "</b><br/>" + Highcharts.numberFormat((this.y*100), 0) + " %</span>";
40893                }
40894            },
40895            responsive: {
40896                rules: [{
40897                    condition: {
40898                        maxWidth: 450
40899                    },
40900
40901                    chartOptions: {
40902                        chart: {
40903                            height: 525
40904                        },
40905                        title: {
40906                            margin: 5
40907                        },
40908                        plotOptions: {
40909                            pie: {
40910                                size: null,
40911                                dataLabels: {
40912                                    enabled: false
40913                                },
40914                                showInLegend: true
40915                            }
40916                        },
40917                        legend: {
40918                            enabled: true,
40919                            itemStyle: {
40920                                textOverflow: 'none',
40921                                lineHeight: 13
40922                            }
40923                        }
40924                    }
40925                },
40926                {
40927                    condition: {
40928                        minWidth: 451
40929                    },
40930
40931                    chartOptions: {
40932                        chart: {
40933                            height: '65%'
40934                        },
40935                        plotOptions: {
40936                            pie: {
40937                                size: '65%',
40938                                dataLabels: {
40939                                    enabled: true
40940                                },
40941                                showInLegend: false
40942                            }
40943                        },
40944                        legend: {
40945                            enabled: false
40946                        }
40947                    }
40948                }]
40949            }
40950        });
40951    }
40952};
40953
40954},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],212:[function(require,module,exports){
40955const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
40956const csvParser = require('../../includes/csvParser');
40957
40958module.exports = function (Highcharts, appPath) {
40959    const elementId = 'major-price-components';
40960
40961    if ($('#' + elementId).length > 0) {
40962        Highcharts.chart(elementId, {
40963            chart: {
40964                type: 'column',
40965                spacingBottom: 30,
40966                events: {
40967                    load: creditsSizeAndPosition,
40968                    redraw: creditsSizeAndPosition
40969                }
40970            },
40971            credits: {
40972                enabled: true,
40973                href: null,
40974                style: {
40975                    cursor: 'normal'
40976                }
40977            },
40978            data: {
40979                csvURL: appPath + '/heating-oil/charts/' + elementId + '.csv',
40980                startRow: 5,
40981                firstRowAsNames: true,
40982
40983                beforeParse: function (csv) {
40984                    var parsedCSV = csvParser(csv);
40985                    this.chart.title.update({ text: parsedCSV[0][0] });
40986                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
40987                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
40988                    this.chart.update(
40989                        {
40990							accessibility: {
40991								description: parsedCSV[4][0],
40992							},
40993                            exporting: {
40994                                menuItemDefinitions:
40995                                {
40996                                    label: {
40997                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
40998                                    }
40999                                },
41000                                buttons: {
41001                                    contextButton: {
41002                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
41003                                    }
41004                                }
41005                            }
41006                        }
41007                    );
41008                    return csv;
41009                }
41010            },
41011			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green],
41012            xAxis: {
41013                labels: {
41014                    format: "{value}",
41015					autoRotation: [-45]
41016                },
41017                tickWidth: 0
41018            },
41019            yAxis: {
41020                tickInterval: 0.5,
41021                labels: {
41022                    format: "{value:.2f}"
41023                },
41024				reversedStacks: false
41025            },
41026            plotOptions: {
41027                column: {
41028                    stacking: 'normal',
41029                    dataLabels: {
41030                        enabled: false
41031                    }
41032                }
41033            },
41034            tooltip: {
41035                shared: true,
41036                useHTML: true,
41037                formatter: function () {
41038                    let html = "<b>" + this.points[0].key + "</b><br/>";
41039                    this.points.filter(function (value) {
41040                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>$' + value.y + ' / gallon</span><br/>';
41041                    });
41042                    return html;
41043                }
41044            },
41045            responsive: {
41046                rules: [{
41047                    condition: {
41048                        maxWidth: 450
41049                    },
41050                    chartOptions: {
41051						chart: {
41052							height: 475
41053						}
41054                    }
41055                },
41056				{
41057					condition: {
41058						minWidth: 451
41059					},
41060					
41061					chartOptions: {
41062						chart: {
41063							height: '65%'
41064						}
41065					}
41066				}]
41067            }
41068        });
41069    }
41070};
41071
41072},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],213:[function(require,module,exports){
41073const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
41074const csvParser = require('../../includes/csvParser');
41075
41076
41077module.exports = function (Highcharts, map, appPath) {
41078    const elementId = 'use-of-heating-oil';
41079    let mapData = Highcharts.geojson(map, 'map');
41080
41081    // Our own options definition as two different series, will populate the data in the complete callback
41082    var seriesOptions = [
41083        {
41084            id: "rank1",
41085            type: "map",
41086            keys: ["postal-code"],
41087            joinBy: ['hc-a2', 'code'],
41088            data: [],
41089            mapData: mapData,
41090            states: {
41091                hover: {
41092                    color: '#a4edba'
41093                }
41094            },
41095            dataLabels: {
41096                enabled: true,
41097                formatter: function () {
41098                    if (this.point.nameCode) {
41099                        if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") {
41100                            return this.point.code + " " + this.point.nameCode;
41101                        }
41102                        else {
41103                            return this.point.code + "<br/>" + this.point.nameCode;
41104                        }
41105                    }
41106
41107                    return this.point.code
41108                },
41109                style: {
41110                    fontSize: '10px'
41111                }
41112            },
41113            tooltip: {
41114                valueSuffix: ''
41115            },
41116            showInLegend: false
41117        },
41118        {
41119            type: 'mapline',
41120            data: Highcharts.geojson(map, 'mapline'),
41121            color: 'silver',
41122            nullColor : 'silver',
41123            lineWidth : 1,
41124            showInLegend: false,
41125			enableMouseTracking: false,
41126            states : {
41127                inactive : {
41128                    enabled : false
41129                }
41130            }
41131        }
41132    ];
41133
41134    if ($('#' + elementId).length > 0) {
41135        Highcharts.mapChart(elementId, {
41136            chart: {
41137                map: map,
41138                spacingBottom: 25,
41139                events: {
41140                    load: creditsSizeAndPosition,
41141                    redraw: creditsSizeAndPosition
41142                }
41143            },
41144            mapView : {
41145                insetOptions : {
41146                    borderWidth : 1,
41147                    borderColor : 'silver'
41148                }
41149            },
41150			credits: {
41151                enabled: false,
41152                href: null,
41153                style: {
41154                    cursor: 'normal'
41155                }
41156            },
41157			caption: {
41158				verticalAlign: 'bottom',
41159				useHTML: true,
41160				margin: 0,
41161				style: {
41162					color: '#888',
41163					fontSize: '11px'
41164				},
41165				x: 32,
41166				y: 33
41167			},
41168            tooltip: {
41169                enabled: true,
41170                useHTML: true,
41171                formatter: function () {
41172                    if (this.point.nameCode) {
41173                        return '<b>' + this.point.name + '</b><br/>' + this.point.nameCode;
41174                    }
41175                    else {
41176                        return false;
41177                    }
41178                },
41179                style: {
41180                    textAlign: 'center'
41181                }
41182            },
41183            legend: {
41184                enabled: false
41185            },
41186            data: {
41187                csvURL: appPath + '/heating-oil/charts/' + elementId + '.csv',
41188                startRow: 4,
41189				firstRowAsNames: false,
41190                complete: function (options) {
41191                    var point;
41192
41193                    for (var i = 0; i < options.series[0].data.length; i++) {
41194                        point = options.series[0].data[i];
41195
41196                        if (point.value) {
41197                            switch (point.value) {
41198                                case 1:
41199                                    seriesOptions[0].data.push({
41200                                        code: point.name,
41201                                        color: Highcharts.eiaColors.blue,
41202                                        nameCode: "<span>#" + point.value + "</span>"
41203                                    });
41204                                    break;
41205                                case 2:
41206                                    seriesOptions[0].data.push({
41207                                        code: point.name,
41208                                        color: Highcharts.eiaColors.brown,
41209                                        nameCode: "<span>#" + point.value + "</span>"
41210                                    });
41211                                    break;
41212                                case 3:
41213                                    seriesOptions[0].data.push({
41214                                        code: point.name,
41215                                        color: Highcharts.eiaColors.green,
41216                                        nameCode: "<span>#" + point.value + "</span>"
41217                                    });
41218                                    break;
41219                                case 4:
41220                                    seriesOptions[0].data.push({
41221                                        code: point.name,
41222                                        color: Highcharts.eiaColors.yellow,
41223                                        nameCode: "<span>#" + point.value + "</span>"
41224                                    });
41225                                    break;
41226                                default:
41227                                    seriesOptions[0].data.push({
41228                                        code: point.name,
41229                                        color: Highcharts.eiaColors.red,
41230                                        nameCode: "<span>#" + point.value + "</span>"
41231                                    });
41232                            }
41233                        }
41234                    }
41235                    // replace series options parsed by Highcharts with our own options definition
41236                    options.series = seriesOptions;
41237                },
41238                beforeParse: function (csv) {
41239                    var parsedCSV = csvParser(csv);
41240                    this.chart.title.update({ text: parsedCSV[0][0] });
41241                    this.chart.caption.update({ text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0] });
41242
41243                    this.chart.update(
41244                        {
41245							accessibility: {
41246								description: parsedCSV[3][0]
41247							},
41248                            exporting: {
41249								allowHTML: true,
41250                                menuItemDefinitions:
41251                                {
41252                                    label: {
41253                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
41254                                    }
41255                                },
41256                                buttons: {
41257                                    contextButton: {
41258                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
41259                                    }
41260                                }
41261                            }
41262                        }
41263                    );
41264                    return csv;
41265                }
41266            },
41267			responsive: {
41268				rules: [{
41269					condition: {
41270						maxWidth: 321
41271					},
41272					
41273					chartOptions: {
41274						chart: {
41275							height: 330
41276						},
41277						title: {
41278							margin: 5
41279						}
41280					}
41281				},
41282				{
41283					condition: {
41284						minWidth: 322,
41285						maxWidth: 400
41286					},
41287					
41288					chartOptions: {
41289						chart: {
41290							height: 350
41291						},
41292						title: {
41293							margin: 5
41294						}
41295					}
41296				},
41297				{
41298					condition: {
41299						minWidth: 401,
41300						maxWidth: 450
41301					},
41302					
41303					chartOptions: {
41304						chart: {
41305							height: 380
41306						},
41307						title: {
41308							margin: 5
41309						}
41310					}
41311				},
41312				{
41313					condition: {
41314						minWidth: 451
41315					},
41316					
41317					chartOptions: {
41318						chart: {
41319							height: '65%'
41320						},
41321						title: {
41322							margin: 15
41323						}
41324					}
41325				}]
41326			}
41327        });
41328    }
41329};
41330
41331},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],214:[function(require,module,exports){
41332const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
41333const csvParser = require('../../includes/csvParser');
41334
41335module.exports = function (Highcharts, appPath) {
41336    const elementId = 'consumption-by-end-use-sector';
41337    var units = '';
41338
41339    if ($('#' + elementId).length > 0) {
41340        Highcharts.chart(elementId, {
41341            chart: {
41342                type: 'column',
41343                spacingBottom: 25,
41344                events: {
41345                    load: creditsSizeAndPosition,
41346                    redraw: creditsSizeAndPosition
41347                }
41348            },
41349            credits: {
41350                enabled: true,
41351                href: null,
41352                style: {
41353                    cursor: 'normal'
41354                }
41355            },
41356            data: {
41357                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/consumption-by-end-use-sector.csv',
41358                startRow: 5,
41359                firstRowAsNames: true,
41360
41361                beforeParse: function (csv) {
41362                    var parsedCSV = csvParser(csv);
41363                    this.chart.title.update({ text: parsedCSV[0][0] });
41364                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
41365                    units = parsedCSV[1][0];
41366                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
41367                    this.chart.update(
41368                        {
41369							accessibility: {
41370								description: parsedCSV[4][0],
41371							},
41372                            exporting: {
41373                                menuItemDefinitions:
41374                                {
41375                                    label: {
41376                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
41377                                    }
41378                                },
41379                                buttons: {
41380                                    contextButton: {
41381                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
41382                                    }
41383                                }
41384                            }
41385                        }
41386                    );
41387                    return csv;
41388                }
41389            },
41390			colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.blue, Highcharts.eiaColors.green],
41391            xAxis: {
41392                labels: {
41393                    format: "{value}"
41394                }
41395            },
41396            yAxis: {
41397                tickInterval: 0.25,
41398                labels: {
41399                    format: "{value:.2f}"
41400                },
41401				reversedStacks: false
41402            },
41403            tooltip: {
41404                useHTML: true,
41405                shared: true,
41406                formatter: function () {
41407                    let html = "<b>" + this.points[0].key + "</b><br/>";
41408                    this.points.filter(function (value) {
41409                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
41410                    });
41411                    return html;
41412                }
41413            },
41414            plotOptions: {
41415                column: {
41416                    stacking: 'nomral',
41417                    dataLabels: {
41418                        enabled: false
41419                    }
41420                }
41421            },
41422            responsive: {
41423                rules: [{
41424                    condition: {
41425                        maxWidth: 450
41426                    },
41427                    chartOptions: {
41428						chart: {
41429							height: 410
41430						}
41431                    }
41432                },
41433				{
41434					condition: {
41435						minWidth: 451
41436					},
41437					
41438					chartOptions: {
41439						chart: {
41440							height: '65%'
41441						}
41442					}
41443				}]
41444            }
41445        });
41446    }
41447};
41448
41449},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],215:[function(require,module,exports){
41450const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
41451const csvParser = require('../../includes/csvParser');
41452
41453module.exports = function (Highcharts, appPath) {
41454    const elementId = 'consumption-by-type';
41455    var units = '';
41456
41457    if ($('#' + elementId).length > 0) {
41458        Highcharts.chart(elementId, {
41459            chart: {
41460                type: 'column',
41461                spacingBottom: 30,
41462                events: {
41463                    load: creditsSizeAndPosition,
41464                    redraw: creditsSizeAndPosition
41465                }
41466            },
41467            credits: {
41468                enabled: true,
41469                href: null,
41470                style: {
41471                    cursor: 'normal'
41472                }
41473            },
41474            data: {
41475                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/consumption-by-type.csv',
41476                startRow: 5,
41477                firstRowAsNames: true,
41478                beforeParse: function (csv) {
41479                    var parsedCSV = csvParser(csv);
41480                    units = parsedCSV[1][0];
41481                    this.chart.title.update({ text: parsedCSV[0][0] });
41482                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
41483                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
41484                    this.chart.update(
41485                        {
41486							accessibility: {
41487								description: parsedCSV[4][0],
41488							},
41489                            exporting: {
41490                                menuItemDefinitions:
41491                                {
41492                                    label: {
41493                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
41494                                    }
41495                                },
41496                                buttons: {
41497                                    contextButton: {
41498                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
41499                                    }
41500                                }
41501                            }
41502                        }
41503                    );
41504                    return csv;
41505                }
41506            },
41507			colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.blue, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.yellow, Highcharts.eiaColors.green, Highcharts.eiaColors.red],
41508            xAxis: {
41509                labels: {
41510                    format: "{value}"
41511                }
41512            },
41513            yAxis: {
41514				reversedStacks:false,
41515                tickInterval: 0.5,
41516                labels: {
41517                    format: "{value:.2f}"
41518                }
41519            },
41520            plotOptions: {
41521                column: {
41522                    stacking: 'normal',
41523                    dataLabels: {
41524                        enabled: false
41525                    }
41526                }
41527            },
41528            tooltip: {
41529                shared: true,
41530                useHTML: true,
41531                formatter: function () {
41532                    let html = "<b>" + this.points[0].key + "</b><br/>";
41533                    this.points.filter(function (value) {
41534                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
41535                    });
41536                    return html;
41537                }
41538            },
41539            responsive: {
41540                rules: [{
41541                    condition: {
41542                        maxWidth: 450
41543                    },
41544                    chartOptions: {
41545						chart: {
41546							height: 450
41547						}
41548                    }
41549                },
41550				{
41551					condition: {
41552						minWidth: 451
41553					},
41554					
41555					chartOptions: {
41556						chart: {
41557							height: '65%'
41558						}
41559					}
41560				}]
41561            }
41562        });
41563    }
41564};
41565
41566},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],216:[function(require,module,exports){
41567const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
41568const csvParser = require('../../includes/csvParser');
41569
41570module.exports = function (Highcharts, appPath) {
41571    const elementId = 'exports-by-type';
41572    var units = '';
41573
41574    if ($('#' + elementId).length > 0) {
41575        Highcharts.chart(elementId, {
41576            chart: {
41577                type: 'column',
41578                spacingBottom: 25,
41579                events: {
41580                    load: creditsSizeAndPosition,
41581                    redraw: creditsSizeAndPosition
41582                }
41583            },
41584            credits: {
41585                enabled: true,
41586                href: null,
41587                style: {
41588                    cursor: 'normal'
41589                }
41590            },
41591            data: {
41592                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
41593                startRow: 5,
41594                firstRowAsNames: true,
41595
41596                beforeParse: function (csv) {
41597                    var parsedCSV = csvParser(csv);
41598                    this.chart.title.update({ text: parsedCSV[0][0] });
41599                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
41600                    units = parsedCSV[1][0];
41601                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
41602                    this.chart.update(
41603                        {
41604							accessibility: {
41605								description: parsedCSV[4][0],
41606							},
41607                            exporting: {
41608                                menuItemDefinitions:
41609                                {
41610                                    label: {
41611                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
41612                                    }
41613                                },
41614                                buttons: {
41615                                    contextButton: {
41616                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
41617                                    }
41618                                }
41619                            }
41620                        }
41621                    );
41622                    return csv;
41623                }
41624            },
41625			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.green,Highcharts.eiaColors.brown, Highcharts.eiaColors.red],
41626            xAxis: {
41627                labels: {
41628                    format: "{value}"
41629                }
41630            },
41631            yAxis: {
41632                tickInterval: 0.25,
41633                labels: {
41634                    format: "{value:.2f}"
41635                },
41636				reversedStacks: false
41637            },
41638            plotOptions: {
41639                column: {
41640                    stacking: 'normal',
41641                    dataLabels: {
41642                        enabled: false
41643                    }
41644                }
41645            },
41646            tooltip: {
41647                shared: true,
41648                useHTML: true,
41649                formatter: function () {
41650                    let html = "<b>" + this.points[0].key + "</b><br/>";
41651                    this.points.filter(function (value) {
41652                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
41653                    });
41654                    return html;
41655                }
41656            },
41657            responsive: {
41658                rules: [{
41659                    condition: {
41660                        maxWidth: 450
41661                    },
41662                    chartOptions: {
41663						chart: {
41664							height: 400
41665						}
41666                    }
41667                },
41668				{
41669					condition: {
41670						minWidth: 451
41671					},
41672					
41673					chartOptions: {
41674						chart: {
41675							height: '65%'
41676						}
41677					}
41678				}]
41679            }
41680        });
41681    }
41682};
41683
41684},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],217:[function(require,module,exports){
41685const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
41686const csvParser = require('../../includes/csvParser');
41687
41688module.exports = function (Highcharts, appPath) {
41689    const elementId = 'production-by-source';
41690    var units = '';
41691
41692    if ($('#' + elementId).length > 0) {
41693        Highcharts.chart(elementId, {
41694            chart: {
41695                type: 'column',
41696                spacingBottom: 30,
41697                events: {
41698                    load: creditsSizeAndPosition,
41699                    redraw: creditsSizeAndPosition
41700                }
41701            },
41702            credits: {
41703                enabled: true,
41704                href: null,
41705                style: {
41706                    cursor: 'normal'
41707                }
41708            },
41709            data: {
41710                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
41711                startRow: 5,
41712                firstRowAsNames: true,
41713                beforeParse: function (csv) {
41714                    var parsedCSV = csvParser(csv);
41715
41716                    units = parsedCSV[1][0];
41717                    this.chart.title.update({ text: parsedCSV[0][0] });
41718                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
41719                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
41720                    this.chart.update(
41721                        {
41722							accessibility: {
41723								description: parsedCSV[4][0],
41724							},
41725                            exporting: {
41726                                menuItemDefinitions:
41727                                {
41728                                    label: {
41729                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
41730                                    }
41731                                },
41732                                buttons: {
41733                                    contextButton: {
41734                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
41735                                    }
41736                                }
41737                            }
41738                        }
41739                    );
41740                    return csv;
41741                }
41742            },
41743			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
41744            xAxis: {
41745                labels: {
41746                    format: "{value}"
41747                },
41748                tickInterval: 1,
41749                type: 'dateTime',
41750            },
41751            yAxis: {
41752				reversedStacks:false,
41753                labels: {
41754                    format: "{value:.1f}"
41755                },
41756                tickInterval: .5
41757            },
41758            plotOptions: {
41759                column: {
41760                    stacking: 'normal',
41761                    dataLabels: {
41762                        enabled: false
41763                    }
41764                }
41765            },
41766            tooltip: {
41767                useHTML: true,
41768                shared: true,
41769                formatter: function () {
41770                    let html = "<b>" + this.points[0].key + "</b><br/>";
41771                    this.points.filter(function (value) {
41772                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
41773                    });
41774                    return html;
41775                }
41776            },
41777            responsive: {
41778                rules: [{
41779                    condition: {
41780                        maxWidth: 450
41781                    },
41782                    chartOptions: {
41783						chart: {
41784							height: 400
41785						},
41786						legend: {
41787							itemStyle: {
41788								textOverflow: 'none',
41789								whiteSpace: 'break-word',
41790							},
41791							itemWidth: 125
41792						}
41793                    }
41794                },
41795				{
41796					condition: {
41797						minWidth: 451
41798					},
41799					
41800					chartOptions: {
41801						chart: {
41802							height: '65%'
41803						}
41804					}
41805				}]
41806            }
41807        });
41808    }
41809};
41810
41811},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],218:[function(require,module,exports){
41812const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
41813const csvParser = require('../../includes/csvParser');
41814
41815module.exports = function (Highcharts, appPath) {
41816    const elementId = 'production-by-type';
41817    var units = "";
41818
41819    if ($('#' + elementId).length > 0) {
41820        Highcharts.chart(elementId, {
41821            chart: {
41822                type: 'column',
41823                spacingBottom: 25,
41824                events: {
41825                    load: creditsSizeAndPosition,
41826                    redraw: creditsSizeAndPosition
41827                }
41828            },
41829            credits: {
41830                enabled: true,
41831                href: null,
41832                style: {
41833                    cursor: 'normal'
41834                }
41835            },
41836            data: {
41837                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
41838                startRow: 5,
41839                firstRowAsNames: true,
41840
41841                beforeParse: function (csv) {
41842                    var parsedCSV = csvParser(csv);
41843
41844                    this.chart.title.update({ text: parsedCSV[0][0] });
41845                    units = ' ' + parsedCSV[1][0];
41846                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
41847                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
41848                    this.chart.update(
41849                        {
41850							accessibility: {
41851								description: parsedCSV[4][0],
41852							},
41853                            exporting: {
41854                                menuItemDefinitions:
41855                                {
41856                                    label: {
41857                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
41858                                    }
41859                                },
41860                                buttons: {
41861                                    contextButton: {
41862                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
41863                                    }
41864                                }
41865                            }
41866                        }
41867                    );
41868                    return csv;
41869                }
41870            },
41871			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown,Highcharts.eiaColors.red, Highcharts.eiaColors.yellow, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey],
41872            xAxis: {
41873                labels: {
41874                    format: "{value}"
41875                }
41876            },
41877            yAxis: {
41878                labels: {
41879                    format: "{value:.1f}"
41880                },
41881                tickInterval: .5,
41882				reversedStacks: false
41883            },
41884            plotOptions: {
41885                column: {
41886                    stacking: 'normal',
41887                    dataLabels: {
41888                        enabled: false
41889                    }
41890                }
41891            },
41892            tooltip: {
41893                useHTML: true,
41894                shared: true,
41895                formatter: function () {
41896                    let html = "<b>" + this.points[0].key + "</b><br/>";
41897                    this.points.filter(function (value) {
41898                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + units + '</span><br/>';
41899                    });
41900                    return html;
41901                }
41902            },
41903            responsive: {
41904                rules: [{
41905                    condition: {
41906                        maxWidth: 450
41907                    },
41908                    chartOptions: {
41909						chart: {
41910							height: 394
41911						}
41912                    }
41913                },
41914				{
41915					condition: {
41916						minWidth: 451
41917					},
41918					
41919					chartOptions: {
41920						chart: {
41921							height: '65%'
41922						}
41923					}
41924				}]
41925            }
41926        });
41927    }
41928};
41929
41930},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],219:[function(require,module,exports){
41931const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
41932const csvParser = require('../../includes/csvParser');
41933
41934module.exports = function (Highcharts, appPath) {
41935    const elementId = 'production-from-petroleum-refining';
41936    var units = '';
41937
41938    if ($('#' + elementId).length > 0) {
41939        Highcharts.chart(elementId, {
41940            chart: {
41941                type: 'column',
41942                spacingBottom: 25,
41943                events: {
41944                    load: creditsSizeAndPosition,
41945                    redraw: creditsSizeAndPosition
41946                }
41947            },
41948            credits: {
41949                enabled: true,
41950                href: null,
41951                style: {
41952                    cursor: 'normal'
41953                }
41954            },
41955            data: {
41956                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
41957                startRow: 5,
41958                firstRowAsNames: true,
41959                beforeParse: function (csv) {
41960                    var parsedCSV = csvParser(csv);
41961                    this.chart.title.update({ text: parsedCSV[0][0] });
41962                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
41963                    units = parsedCSV[1][0];
41964                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
41965                    this.chart.update(
41966                        {
41967							accessibility: {
41968								description: parsedCSV[4][0],
41969							},
41970                            exporting: {
41971                                menuItemDefinitions:
41972                                {
41973                                    label: {
41974                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
41975                                    }
41976                                },
41977                                buttons: {
41978                                    contextButton: {
41979                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
41980                                    }
41981                                }
41982                            }
41983                        }
41984                    );
41985                    return csv;
41986                }
41987            },
41988			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.darkGrey, Highcharts.eiaColors.brown],
41989            xAxis: {
41990                labels: {
41991                    format: "{value}"
41992                }
41993            },
41994            yAxis: {
41995                tickInterval: 0.1,
41996				reversedStacks: false
41997            },
41998            plotOptions: {
41999                column: {
42000                    stacking: 'normal',
42001                    dataLabels: {
42002                        enabled: false
42003                    }
42004                }
42005            },
42006            tooltip: {
42007                useHTML: true,
42008                shared: true,
42009                formatter: function () {
42010                    let html = "<b>" + this.points[0].key + "</b><br/>";
42011                    this.points.filter(function (value) {
42012                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
42013                    });
42014                    return html;
42015                }
42016            },
42017            responsive: {
42018                rules: [{
42019                    condition: {
42020                        maxWidth: 450
42021                    },
42022                    chartOptions: {
42023						chart: {
42024							height: 400
42025						}
42026                    }
42027                },
42028				{
42029					condition: {
42030						minWidth: 451
42031					},
42032					
42033					chartOptions: {
42034						chart: {
42035							height: '65%'
42036						}
42037					}
42038				}]
42039            }
42040        });
42041    }
42042};
42043
42044},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],220:[function(require,module,exports){
42045const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
42046const csvParser = require('../../includes/csvParser');
42047
42048module.exports = function (Highcharts, appPath) {
42049    const elementId = 'production-natural-gas-processing';
42050    var units = '';
42051
42052    if ($('#' + elementId).length > 0) {
42053        Highcharts.chart(elementId, {
42054            chart: {
42055                type: 'column',
42056                spacingBottom: 25,
42057                events: {
42058                    load: creditsSizeAndPosition,
42059                    redraw: creditsSizeAndPosition
42060                }
42061            },
42062            credits: {
42063                enabled: true,
42064                href: null,
42065                style: {
42066                    cursor: 'normal'
42067                }
42068            },
42069            data: {
42070                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
42071                startRow: 5,
42072                firstRowAsNames: true,
42073
42074                beforeParse: function (csv) {
42075                    var parsedCSV = csvParser(csv);
42076                    this.chart.title.update({ text: parsedCSV[0][0] });
42077                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
42078                    units = parsedCSV[1][0];
42079                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
42080                    this.chart.update(
42081                        {
42082							accessibility: {
42083								description: parsedCSV[4][0],
42084							},
42085                            exporting: {
42086                                menuItemDefinitions:
42087                                {
42088                                    label: {
42089                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
42090                                    }
42091                                },
42092                                buttons: {
42093                                    contextButton: {
42094                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
42095                                    }
42096                                }
42097                            }
42098                        }
42099                    );
42100                    return csv;
42101                }
42102            },
42103			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.red, Highcharts.eiaColors.yellow, Highcharts.eiaColors.green],
42104            xAxis: {
42105                labels: {
42106                    format: "{value}"
42107                }
42108            },
42109            yAxis: {
42110                tickInterval: 0.5,
42111                labels: {
42112                    format: "{value:.2f}"
42113                },
42114				reversedStacks: false
42115            },
42116            plotOptions: {
42117                column: {
42118                    stacking: 'normal',
42119                    dataLabels: {
42120                        enabled: false
42121                    }
42122                }
42123            },
42124            tooltip: {
42125                useHTML: true,
42126                shared: true,
42127                formatter: function () {
42128                    let html = "<b>" + this.points[0].key + "</b><br/>";
42129                    this.points.filter(function (value) {
42130                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
42131                    });
42132                    return html;
42133                }
42134            },
42135            responsive: {
42136                rules: [{
42137                    condition: {
42138                        maxWidth: 450
42139                    },
42140                    chartOptions: {
42141						chart: {
42142							height: 400
42143						}
42144                    }
42145                },
42146				{
42147					condition: {
42148						minWidth: 451
42149					},
42150					
42151					chartOptions: {
42152						chart: {
42153							height: '65%'
42154						}
42155					}
42156				}]
42157            }
42158        });
42159    }
42160};
42161
42162},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],221:[function(require,module,exports){
42163const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
42164const csvParser = require('../../includes/csvParser');
42165
42166module.exports = function (Highcharts, appPath) {
42167    const elementId = 'propane-by-regionofentry';
42168    var units = '';
42169
42170    if ($('#' + elementId).length > 0) {
42171        Highcharts.chart(elementId, {
42172            chart: {
42173                type: 'column',
42174                spacingBottom: 30,
42175                events: {
42176                    load: creditsSizeAndPosition,
42177                    redraw: creditsSizeAndPosition
42178                }
42179            },
42180            credits: {
42181                enabled: true,
42182                href: null,
42183                style: {
42184                    cursor: 'normal'
42185                }
42186            },
42187            data: {
42188                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
42189                startRow: 5,
42190                firstRowAsNames: true,
42191
42192                beforeParse: function (csv) {
42193                    var parsedCSV = csvParser(csv);
42194                    this.chart.title.update({ text: parsedCSV[0][0] });
42195                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
42196                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
42197                    units = parsedCSV[1][0];
42198                    this.chart.update(
42199                        {
42200							accessibility: {
42201								description: parsedCSV[4][0],
42202							},
42203                            exporting: {
42204                                menuItemDefinitions:
42205                                {
42206                                    label: {
42207                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
42208                                    }
42209                                },
42210                                buttons: {
42211                                    contextButton: {
42212                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
42213                                    }
42214                                }
42215                            }
42216                        }
42217                    );
42218                    return csv;
42219                }
42220            },
42221			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
42222            xAxis: {
42223                labels: {
42224                    format: "{value}"
42225                },
42226                tickWidth: 1,
42227                tickmarkPlacement: 'on'
42228            },
42229            yAxis: {
42230                tickInterval: 20,
42231                type: 'category',
42232                labels: {
42233                    format: "{value}"
42234                },
42235				reversedStacks:false
42236            },
42237            plotOptions: {
42238                column: {
42239                    stacking: 'normal',
42240                }
42241            },
42242            tooltip: {
42243                useHTML: true,
42244                shared: true,
42245                formatter: function () {
42246                    let html = "<b>" + this.points[0].key + "</b><br/>";
42247                    this.points.filter(function (value) {
42248                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
42249                    });
42250                    return html;
42251                }
42252            },
42253            responsive: {
42254                rules: [{
42255                    condition: {
42256                        maxWidth: 450
42257                    },
42258                    chartOptions: {
42259						chart: {
42260							height: 400
42261						}
42262                    }
42263                },
42264				{
42265					condition: {
42266						minWidth: 451
42267					},
42268					
42269					chartOptions: {
42270						chart: {
42271							height: '65%'
42272						}
42273					}
42274				}]
42275            }
42276        });
42277    }
42278};
42279
42280},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],222:[function(require,module,exports){
42281const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
42282const csvParser = require('../../includes/csvParser');
42283
42284module.exports = function (Highcharts, appPath) {
42285    const elementId = 'propane-consumption-by-end-use-sector';
42286    var units = '';
42287
42288    if ($('#' + elementId).length > 0) {
42289        Highcharts.chart(elementId, {
42290            chart: {
42291                type: 'column',
42292                spacingBottom: 25,
42293                events: {
42294                    load: creditsSizeAndPosition,
42295                    redraw: creditsSizeAndPosition
42296                }
42297            },
42298            credits: {
42299                enabled: true,
42300                href: null,
42301                style: {
42302                    cursor: 'normal'
42303                }
42304            },
42305            data: {
42306                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
42307                startRow: 5,
42308                firstRowAsNames: true,
42309
42310                beforeParse: function (csv) {
42311                    var parsedCSV = csvParser(csv);
42312                    this.chart.title.update({ text: parsedCSV[0] });
42313                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1] } });
42314                    this.chart.credits.update({ text: parsedCSV[2] + '<br>' + parsedCSV[3] });
42315                    units = parsedCSV[1];
42316                    this.chart.update(
42317                        {
42318							accessibility: {
42319								description: parsedCSV[4][0],
42320							},
42321                            exporting: {
42322                                menuItemDefinitions:
42323                                {
42324                                    label: {
42325                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
42326                                    }
42327                                },
42328                                buttons: {
42329                                    contextButton: {
42330                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
42331                                    }
42332                                }
42333                            }
42334                        }
42335                    );
42336                    return csv;
42337                }
42338            },
42339			colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.blue, Highcharts.eiaColors.green],
42340            xAxis: {
42341                labels: {
42342                    format: "{value}"
42343                },
42344                tickWidth: 1,
42345                tickmarkPlacement: 'on'
42346            },
42347            yAxis: {
42348                labels: {
42349                    format: "{value:.1f}"
42350                },
42351                tickInterval: .1,
42352				reversedStacks: false
42353            },
42354            plotOptions: {
42355                column: {
42356                    stacking: 'normal',
42357                    dataLabels: {
42358                        enabled: false
42359                    }
42360                }
42361            },
42362            tooltip: {
42363                useHTML: true,
42364                shared: true,
42365                formatter: function () {
42366                    let html = "<b>" + this.points[0].key + "</b><br/>";
42367                    this.points.filter(function (value) {
42368                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
42369                    });
42370                    return html;
42371                }
42372            },
42373            responsive: {
42374                rules: [{
42375                    condition: {
42376                        maxWidth: 450
42377                    },
42378                    chartOptions: {
42379						chart: {
42380							height: 400
42381						}
42382                    }
42383                },
42384				{
42385					condition: {
42386						minWidth: 451
42387					},
42388					
42389					chartOptions: {
42390						chart: {
42391							height: '65%'
42392						}
42393					}
42394				}]
42395            }
42396        });
42397    }
42398};
42399
42400},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],223:[function(require,module,exports){
42401const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
42402const csvParser = require('../../includes/csvParser');
42403
42404module.exports = function (Highcharts, appPath) {
42405    const elementId = 'propane-prices-by-region';
42406    var units = '';
42407
42408    if ($('#' + elementId).length > 0) {
42409        Highcharts.chart(elementId, {
42410            chart: {
42411                type: 'line',
42412                spacingBottom: 30,
42413                events: {
42414                    load: creditsSizeAndPosition,
42415                    redraw: creditsSizeAndPosition
42416                }
42417            },
42418            credits: {
42419                enabled: true,
42420                href: null,
42421                style: {
42422                    cursor: 'normal'
42423                }
42424            },
42425            data: {
42426                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
42427                startRow: 5,
42428                firstRowAsNames: true,
42429
42430                beforeParse: function (csv) {
42431                    var parsedCSV = csvParser(csv);
42432                    this.chart.title.update({ text: parsedCSV[0][0] });
42433                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
42434                    units = parsedCSV[1][0];
42435                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
42436                    this.chart.update(
42437                        {
42438							accessibility: {
42439								description: parsedCSV[4][0],
42440							},
42441                            exporting: {
42442                                menuItemDefinitions:
42443                                {
42444                                    label: {
42445                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
42446                                    }
42447                                },
42448                                buttons: {
42449                                    contextButton: {
42450                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
42451                                    }
42452                                }
42453                            }
42454                        }
42455                    );
42456                    return csv;
42457                }
42458            },
42459			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
42460            xAxis: {
42461                min: .5,
42462                tickWidth: 1,
42463                tickmarkPlacement: 'on'
42464            },
42465            yAxis: {
42466                labels: {
42467                    format: '${value:.2f}'
42468                },
42469                tickInterval: 0.5,
42470            },
42471            tooltip: {
42472                useHTML: true,
42473                shared: true,
42474                formatter: function () {
42475                    let html = "<b>" + this.points[0].key + "</b><br/>";
42476                    this.points.filter(function (value) {
42477                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>$' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
42478                    });
42479                    return html;
42480                }
42481            },
42482            responsive: {
42483                rules: [{
42484                    condition: {
42485                        maxWidth: 450
42486                    },
42487                    chartOptions: {
42488						chart: {
42489							height: 400
42490						}
42491                    }
42492                },
42493				{
42494					condition: {
42495						minWidth: 451
42496					},
42497					
42498					chartOptions: {
42499						chart: {
42500							height: '65%'
42501						}
42502					}
42503				}]
42504            }
42505        });
42506    }
42507};
42508
42509},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],224:[function(require,module,exports){
42510const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
42511const csvParser = require('../../includes/csvParser');
42512
42513module.exports = function (Highcharts, appPath) {
42514    const elementId = 'propane-prices';
42515    const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
42516    var tickPositions = [];
42517    var units = '';
42518
42519    if ($('#' + elementId).length > 0) {
42520        Highcharts.chart(elementId, {
42521            chart: {
42522                type: 'line',
42523                spacingBottom: 25,
42524                events: {
42525                    load: creditsSizeAndPosition,
42526                    redraw: creditsSizeAndPosition
42527                }
42528            },
42529            credits: {
42530                enabled: true,
42531                href: null,
42532                style: {
42533                    cursor: 'normal'
42534                }
42535            },
42536            data: {
42537                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
42538                startRow: 5,
42539                firstRowAsNames: true,
42540                complete: function (options) {
42541                },
42542                beforeParse: function (csv) {
42543                    var parsedCSV = csvParser(csv);
42544                    this.chart.title.update({ text: parsedCSV[0][0] });
42545                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
42546                    units = parsedCSV[1][0];
42547                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
42548                    this.chart.update(
42549                        {
42550							accessibility: {
42551								description: parsedCSV[4][0],
42552							},
42553                            exporting: {
42554                                menuItemDefinitions:
42555                                {
42556                                    label: {
42557                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
42558                                    }
42559                                },
42560                                buttons: {
42561                                    contextButton: {
42562                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
42563                                    }
42564                                }
42565                            }
42566                        }
42567                    );
42568                    return csv;
42569                },
42570                parseDate: function (date) {
42571                    const dateArray = date.split('-');
42572                    const year = parseInt('20' + (dateArray[0].length === 1 ? '0' + dateArray[0] : dateArray[0]));
42573                    const month = monthNames.indexOf(dateArray[1]);
42574                    return Date.UTC(year, month, 1, 0, 0, 0);
42575                },
42576                parsed: function () {
42577                    for (var i = 1; i < this.columns[0].length; i++) {
42578                        const year = new Date(this.columns[0][i]).getUTCFullYear();
42579                        const month = new Date(this.columns[0][i]).getUTCMonth();
42580                        if (month === 3 || month === 9)
42581                            tickPositions.push(Date.UTC(year, month, 1, 0, 0, 0));
42582                    }
42583                }
42584            },
42585            xAxis: {
42586                tickPositions: tickPositions,
42587                tickInterval: 24 * 3600 * 1000 * 180,
42588                type: 'datetime',
42589                labels: {
42590                    enabled: true,
42591                    useHTML: true,
42592                    rotation: -45,
42593                    formatter: function () {
42594                        const date = new Date(this.value);
42595                        const month = monthNames[date.getUTCMonth()];
42596                        const year = date.getUTCFullYear();
42597                        return month + "-" + year;
42598                    }
42599                }
42600            },
42601            yAxis: {
42602                tickInterval: .5,
42603                labels: {
42604                    format: "${value:.2f}"
42605                }
42606            },
42607            plotOptions: {
42608                line: {
42609                }
42610            },
42611            tooltip: {
42612                shared: true,
42613                useHTML: true,
42614                formatter: function () {
42615                    const m = monthNames[new Date(this.points[0].x).getUTCMonth()];
42616                    const y = new Date(this.points[0].x).getUTCFullYear();
42617                    var html = "<b>" + m + "-" + y + "</b><br/>";
42618                    this.points.filter(function (value) {
42619                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>$' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
42620                    });
42621                    return html;
42622                }
42623            },
42624            responsive: {
42625                rules: [{
42626                    condition: {
42627                        maxWidth: 450
42628                    },
42629                    chartOptions: {
42630						chart: {
42631							height: 400
42632						}
42633                    }
42634                },
42635				{
42636					condition: {
42637						minWidth: 451
42638					},
42639					
42640					chartOptions: {
42641						chart: {
42642							height: '65%'
42643						}
42644					}
42645				}]
42646            }
42647        });
42648    }
42649};
42650
42651},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],225:[function(require,module,exports){
42652const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
42653const csvParser = require('../../includes/csvParser');
42654
42655module.exports = function (Highcharts, appPath) {
42656    const elementId = 'propane-production-by-source';
42657    var units = '';
42658
42659    if ($('#' + elementId).length > 0) {
42660        Highcharts.chart(elementId, {
42661            chart: {
42662                type: 'column',
42663                spacingBottom: 30,
42664                events: {
42665                    load: creditsSizeAndPosition,
42666                    redraw: creditsSizeAndPosition
42667                }
42668            },
42669            credits: {
42670                enabled: true,
42671                href: null,
42672                style: {
42673                    cursor: 'normal'
42674                }
42675            },
42676            data: {
42677                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
42678                startRow: 5,
42679                firstRowAsNames: true,
42680                beforeParse: function (csv) {
42681                    var parsedCSV = csvParser(csv);
42682                    units = parsedCSV[1][0];
42683                    this.chart.title.update({ text: parsedCSV[0][0] });
42684                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
42685                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
42686                    this.chart.update(
42687                        {
42688							accessibility: {
42689								description: parsedCSV[4][0],
42690							},
42691                            exporting: {
42692                                menuItemDefinitions:
42693                                {
42694                                    label: {
42695                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
42696                                    }
42697                                },
42698                                buttons: {
42699                                    contextButton: {
42700                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
42701                                    }
42702                                }
42703                            }
42704                        }
42705                    );
42706                    return csv;
42707                }
42708            },
42709			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.red],
42710            xAxis: {
42711                labels: {
42712                    format: "{value}"
42713                }
42714            },
42715            yAxis: {
42716				reversedStacks:false,
42717                labels: {
42718                    format: "{value:.2f}"
42719                },
42720                tickInterval: .20
42721            },
42722            plotOptions: {
42723                column: {
42724                    stacking: 'normal'
42725                }
42726            },
42727            tooltip: {
42728                useHTML: true,
42729                shared: true,
42730                formatter: function () {
42731                    let html = "<b>" + this.points[0].key + "</b><br/>";
42732                    this.points.filter(function (value) {
42733                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
42734                    });
42735                    return html;
42736                }
42737            },
42738            responsive: {
42739                rules: [{
42740                    condition: {
42741                        maxWidth: 450
42742                    },
42743                    chartOptions: {
42744						chart: {
42745							height: 380
42746						}
42747                    }
42748                },
42749				{
42750					condition: {
42751						minWidth: 451
42752					},
42753					
42754					chartOptions: {
42755						chart: {
42756							height: '65%'
42757						}
42758					}
42759				}]
42760            }
42761        });
42762    }
42763};
42764
42765},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],226:[function(require,module,exports){
42766const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
42767const csvParser = require('../../includes/csvParser');
42768
42769module.exports = function (Highcharts, appPath) {
42770    const elementId = 'residential-propane-consumption-by-census-region';
42771    var units = '';
42772
42773    if ($('#' + elementId).length > 0) {
42774        Highcharts.chart(elementId, {
42775            chart: {
42776                type: 'pie',
42777                spacingBottom: 25,
42778                events: {
42779                    load: creditsSizeAndPosition,
42780                    redraw: creditsSizeAndPosition
42781                }
42782            },
42783            title: {
42784                text: '',
42785				margin: 5
42786            },
42787			credits: {
42788                enabled: true,
42789                href: null,
42790                style: {
42791                    cursor: 'normal'
42792                }
42793            },
42794            data: {
42795                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
42796                startRow: 5,
42797                firstRowAsNames: false,
42798
42799                beforeParse: function (csv) {
42800                    var parsedCSV = csvParser(csv);
42801                    this.chart.title.update({ text: parsedCSV[0][0] });
42802                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
42803                    units = ' ' + parsedCSV[1][0].split(' ')[3] + ' ' + parsedCSV[1][0].split(' ')[4];
42804                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
42805                    this.chart.update(
42806                        {
42807							accessibility: {
42808								description: parsedCSV[4][0],
42809							},
42810                            exporting: {
42811                                menuItemDefinitions:
42812                                {
42813                                    label: {
42814                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
42815                                    }
42816                                },
42817                                buttons: {
42818                                    contextButton: {
42819                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
42820                                    }
42821                                }
42822                            }
42823                        }
42824                    );
42825                    return csv;
42826                }
42827            },
42828			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
42829            plotOptions: {
42830                pie: {
42831                    startAngle: 70,
42832                    dataLabels: {
42833                        enabled: true,
42834                        format: "<strong>{point.name}</strong><br/>{point.percentage:.0f}%",
42835                        distance: 30,
42836                        color: Highcharts.eiaColors.darkGrey,
42837                        style: {
42838                            "fontSize": "12px"
42839                        }
42840                    },
42841                    label: {
42842                        onArea: true
42843                    }
42844                }
42845            },
42846            tooltip: {
42847                useHTML: true,
42848                formatter: function () {
42849                    const calculation = (parseFloat(this.y) / 1000).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
42850                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + "%<br/>" + parseFloat(calculation).toFixed(2) + units + "</span>";
42851                }
42852            },
42853			responsive: {
42854				rules: [{
42855					condition: {
42856						maxWidth: 450
42857					},
42858					
42859					chartOptions: {
42860						chart: {
42861							height: 425
42862						},
42863						plotOptions: {
42864							pie: {
42865								size: '80%',
42866								dataLabels: {
42867									enabled: false
42868								},
42869								showInLegend: true
42870							}
42871						},
42872						legend: {
42873							enabled: true
42874						}
42875					}
42876				},
42877				{
42878					condition: {
42879						minWidth: 451
42880					},
42881					
42882					chartOptions: {
42883						chart: {
42884							height: '65%'
42885						},
42886						plotOptions: {
42887							pie: {
42888								size: '65%',
42889								dataLabels: {
42890									enabled: true
42891								},
42892								showInLegend: false
42893							}
42894						},
42895						legend: {
42896							enabled: false
42897						}
42898					}
42899				}]
42900			}
42901        });
42902    }
42903};
42904
42905},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],227:[function(require,module,exports){
42906const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
42907const csvParser = require('../../includes/csvParser');
42908
42909module.exports = function (Highcharts, appPath) {
42910    const elementId = 'residential-propane-consumption-by-end-use';
42911    var units = '';
42912
42913    if ($('#' + elementId).length > 0) {
42914
42915        Highcharts.chart(elementId, {
42916            chart: {
42917                type: 'pie',
42918                spacingBottom: 30,
42919                events: {
42920                    load: creditsSizeAndPosition,
42921                    redraw: creditsSizeAndPosition
42922                }
42923            },
42924            title: {
42925                text: '',
42926				margin: 15
42927            },
42928			credits: {
42929                enabled: true,
42930                href: null,
42931                style: {
42932                    cursor: 'normal'
42933                }
42934            },
42935            data: {
42936                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
42937                startRow: 5,
42938                firstRowAsNames: false,
42939
42940                beforeParse: function (csv) {
42941                    var parsedCSV = csvParser(csv);
42942                    this.chart.title.update({ text: parsedCSV[0][0] });
42943                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
42944                    units = ' ' + parsedCSV[1][0].split(' ')[3] + ' ' + parsedCSV[1][0].split(' ')[4];
42945                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
42946                    this.chart.update(
42947                        {
42948							accessibility: {
42949								description: parsedCSV[4][0],
42950							},
42951                            exporting: {
42952                                menuItemDefinitions:
42953                                {
42954                                    label: {
42955                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
42956                                    }
42957                                },
42958                                buttons: {
42959                                    contextButton: {
42960                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
42961                                    }
42962                                }
42963                            }
42964                        }
42965                    );
42966                    return csv;
42967                }
42968            },
42969			colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue],
42970            plotOptions: {
42971                pie: {
42972                    startAngle: 80,
42973                    dataLabels: {
42974                        enabled: true,
42975                        format: "<strong>{point.name}</strong><br/>{point.percentage:.0f}%",
42976                        color: Highcharts.eiaColors.darkGrey,
42977                        distance: 30,
42978                        style: {
42979                            "fontSize": "12px"
42980                        }
42981                    }
42982                }
42983            },
42984            tooltip: {
42985                useHTML: true,
42986                formatter: function () {
42987                    const calculation = (parseFloat(this.y) / 1000).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
42988                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + "%<br/>" + parseFloat(calculation).toFixed(2) + units + "</span>";
42989                }
42990            },
42991			responsive: {
42992				rules: [{
42993					condition: {
42994						maxWidth: 450
42995					},
42996					
42997					chartOptions: {
42998						chart: {
42999							height: 425
43000						},
43001						plotOptions: {
43002							pie: {
43003								size: '80%',
43004								dataLabels: {
43005									enabled: false
43006								},
43007								showInLegend: true
43008							}
43009						},
43010						legend: {
43011							enabled: true
43012						}
43013					}
43014				},
43015				{
43016					condition: {
43017						minWidth: 451
43018					},
43019					
43020					chartOptions: {
43021						chart: {
43022							height: '65%'
43023						},
43024						plotOptions: {
43025							pie: {
43026								size: '65%',
43027								dataLabels: {
43028									enabled: true
43029								},
43030								showInLegend: false
43031							}
43032						},
43033						legend: {
43034							enabled: false
43035						}
43036					}
43037				}]
43038			}
43039        });
43040    }
43041};
43042
43043},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],228:[function(require,module,exports){
43044const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
43045const csvParser = require('../../includes/csvParser');
43046
43047module.exports = function (Highcharts, appPath) {
43048    const elementId = 'spot-prices';
43049    const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
43050
43051    if ($('#' + elementId).length > 0) {
43052        Highcharts.chart(elementId, {
43053            chart: {
43054                type: 'line',
43055                spacingBottom: 25,
43056                events: {
43057                    load: creditsSizeAndPosition,
43058                    redraw: creditsSizeAndPosition
43059                }
43060            },
43061			credits: {
43062                enabled: true,
43063                href: null,
43064                style: {
43065                    cursor: 'normal'
43066                }
43067            },
43068            data: {
43069                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
43070                startRow: 5,
43071                firstRowAsNames: true,
43072
43073                beforeParse: function (csv) {
43074                    var parsedCSV = csvParser(csv);
43075                    this.chart.title.update({ text: parsedCSV[0][0] });
43076                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
43077                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
43078                    this.chart.update(
43079                        {
43080							accessibility: {
43081								description: parsedCSV[4][0],
43082							},
43083                            exporting: {
43084                                menuItemDefinitions:
43085                                {
43086                                    label: {
43087                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
43088                                    }
43089                                },
43090                                buttons: {
43091                                    contextButton: {
43092                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
43093                                    }
43094                                }
43095                            }
43096                        }
43097                    );
43098                    return csv;
43099                },
43100                parseDate: function (date) {
43101                    const dateArray = date.split('-'),
43102                        year = parseInt('20' + dateArray[1]),
43103                        month = monthNames.indexOf(dateArray[0]);
43104                    return Date.UTC(year, month, 1, 0, 0, 0);
43105                }
43106            },
43107			colors: [Highcharts.eiaColors.darkGrey, Highcharts.eiaColors.red, Highcharts.eiaColors.yellow, Highcharts.eiaColors.green, Highcharts.eiaColors.blue, Highcharts.eiaColors.grey, Highcharts.eiaColors.brown],
43108            xAxis: {
43109                type: 'datetime',
43110                tickInterval: 1000 * 60 * 60 * 24 * 365,
43111                dateTimeLabelFormats: {
43112                    year: '%b-%y'
43113                },
43114                labels: {
43115                    enabled: true,
43116                    rotation: -45
43117                }
43118            },
43119            yAxis: {
43120                labels: {
43121                    format: "${value}"
43122                },
43123				title: {
43124					style: {
43125						width: '300px'
43126					}
43127				},
43128                tickInterval: 5
43129            },
43130            tooltip: {
43131                shared: true,
43132                useHTML: true,
43133                formatter: function () {
43134                    const m = monthNames[new Date(this.points[0].x).getUTCMonth()];
43135                    const y = new Date(this.points[0].x).getUTCFullYear();
43136                    var html = "<b>" + m + "-" + y + "</b><br/>";
43137                    this.points.filter(function (value) {
43138                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>$' + value.y.toFixed(2) + '</span><br/>';
43139                    });
43140                    return html;
43141                }
43142            },
43143            responsive: {
43144                rules: [{
43145                    condition: {
43146                        maxWidth: 450
43147                    },
43148                    chartOptions: {
43149						chart: {
43150							height: 550
43151						}
43152                    }
43153                },
43154				{
43155					condition: {
43156						minWidth: 451
43157					},
43158					
43159					chartOptions: {
43160						chart: {
43161							height: '65%'
43162						}
43163					}
43164				}]
43165            }
43166        });
43167    }
43168};
43169
43170},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],229:[function(require,module,exports){
43171const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
43172const csvParser = require('../../includes/csvParser');
43173
43174module.exports = function (Highcharts, appPath) {
43175    const elementId = 'supply-disposition';
43176    var units = '';
43177
43178    if ($('#' + elementId).length > 0) {
43179        Highcharts.chart(elementId, {
43180            chart: {
43181                type: 'line',
43182                spacingBottom: 30,
43183                events: {
43184                    load: creditsSizeAndPosition,
43185                    redraw: creditsSizeAndPosition
43186                }
43187            },
43188            credits: {
43189                enabled: true,
43190                href: null,
43191                style: {
43192                    cursor: 'normal'
43193                }
43194            },
43195            data: {
43196                csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv',
43197                startRow: 5,
43198                firstRowAsNames: true,
43199                beforeParse: function (csv) {
43200                    var parsedCSV = csvParser(csv);
43201                    this.chart.title.update({ text: parsedCSV[0][0] });
43202                    units = parsedCSV[1][0];
43203                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
43204                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
43205                    this.chart.update(
43206                        {
43207							accessibility: {
43208								description: parsedCSV[4][0],
43209							},
43210                            exporting: {
43211                                menuItemDefinitions:
43212                                {
43213                                    label: {
43214                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
43215                                    }
43216                                },
43217                                buttons: {
43218                                    contextButton: {
43219                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
43220                                    }
43221                                }
43222                            }
43223                        }
43224                    );
43225                    return csv;
43226                }
43227            },
43228			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
43229            xAxis: {
43230                labels: {
43231                    format: "{value}"
43232                }
43233            },
43234            yAxis: {
43235                labels: {
43236                    format: "{value:.1f}"
43237                },
43238                tickInterval: .5,
43239				maxPadding: 0
43240            },
43241            tooltip: {
43242                useHTML: true,
43243                shared: true,
43244                formatter: function () {
43245                    let html = "<b>" + this.points[0].key + "</b><br/>";
43246                    this.points.filter(function (value) {
43247                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
43248                    });
43249                    return html;
43250                }
43251            },
43252            responsive: {
43253                rules: [{
43254                    condition: {
43255                        maxWidth: 450
43256                    },
43257                    chartOptions: {
43258						chart: {
43259							height: 400
43260						}
43261                    }
43262                },
43263				{
43264					condition: {
43265						minWidth: 451
43266					},
43267					
43268					chartOptions: {
43269						chart: {
43270							height: '65%'
43271						}
43272					}
43273				}]
43274            }
43275        });
43276    }
43277};
43278
43279},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],230:[function(require,module,exports){
43280const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
43281const csvParser = require('../../includes/csvParser');
43282
43283module.exports = function (Highcharts, appPath) {
43284    const elementId = 'generation-share-generation';
43285
43286    if ($('#' + elementId).length > 0) {
43287        Highcharts.chart(elementId, {
43288            chart: {
43289                type: 'line',
43290                spacingBottom: 25,
43291                events: {
43292                    load: creditsSizeAndPosition,
43293                    redraw: creditsSizeAndPosition
43294                }
43295            },
43296			credits: {
43297                enabled: true,
43298                href: null,
43299                style: {
43300                    cursor: 'normal'
43301                }
43302            },
43303            data: {
43304                csvURL: appPath + '/hydropower/charts/' + elementId + '.csv',
43305                startRow: 6,
43306                firstRowAsNames: true,
43307                complete: function (options) {
43308                    if (options.series.length > 0) {
43309                        options.series[0].yAxis = 0;
43310                        options.series[1].yAxis = 1;
43311                    }
43312                },
43313                beforeParse: function (csv) {
43314                    var parsedCSV = csvParser(csv);
43315                    this.chart.title.update({ text: parsedCSV[0][0] });
43316                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
43317                    this.chart.yAxis[1].update({ title: { text: parsedCSV[2][0] } });
43318                    this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] });
43319                    this.chart.update(
43320                        {
43321							accessibility: {
43322								description: parsedCSV[5][0],
43323							},
43324                            exporting: {
43325                                menuItemDefinitions:
43326                                {
43327                                    label: {
43328                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
43329                                    }
43330                                },
43331                                buttons: {
43332                                    contextButton: {
43333                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
43334                                    }
43335                                }
43336                            }
43337                        }
43338                    );
43339                    return csv;
43340                }
43341            },
43342			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
43343            xAxis: {
43344                labels: {
43345                    format: "{value}",
43346                },
43347                showLastLabel: true,
43348                startOnTick: true,
43349				min: 1950,
43350				maxPadding: 0,
43351				tickInterval: 5
43352            },
43353            yAxis: [
43354                {
43355                    alignTicks: false,
43356					maxPadding: 0,
43357					tickInterval: 40,
43358                    labels: {
43359                        format: "{value}",
43360						style: { "color": Highcharts.eiaColors.blue }
43361                    },
43362					title: {
43363						style: { "color": Highcharts.eiaColors.blue }
43364					}
43365                },
43366                {
43367                    alignTicks: false,
43368					maxPadding: 0,
43369                    opposite: true,
43370                    labels: {
43371                        format: "{value}%",
43372						style: { "color": Highcharts.eiaColors.brown }
43373                    },
43374					title: {
43375						style: { "color": Highcharts.eiaColors.brown }
43376					},
43377                    gridLineColor: 'none'
43378                }
43379            ],
43380            tooltip: {
43381                useHTML: true,
43382                shared: true,
43383                formatter: function () {
43384                    var html = '<b>' + this.x + '</b><br/>';
43385                    this.points.filter(function (value) {
43386                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y
43387                        if (value.series.name === "generation") {
43388                            html += ' ' + value.series.yAxis.axisTitle.textStr + '<br/>';
43389                        } else {
43390                            html += '%<br/>
43390';
43391                        }
43392                    });
43393                    return html;
43394                }
43395            },
43396            responsive: {
43397                rules: [{
43398                    condition: {
43399                        maxWidth: 450
43400                    },
43401                    chartOptions: {
43402						chart: {
43403							height: 450
43404						},
43405						xAxis: {
43406							labels: {
43407								rotation: -45,
43408								style: {
43409									textOverflow: 'none'
43410								}
43411							}
43412						}
43413                    }
43414                },
43415				{
43416					condition: {
43417						minWidth: 451
43418					},
43419					
43420					chartOptions: {
43421						chart: {
43422							height: '65%'
43423						}
43424					}
43425				}]
43426            }
43427        });
43428    }
43429};
43430
43431},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],231:[function(require,module,exports){
43432const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
43433const csvParser = require('../../includes/csvParser');
43434
43435
43436module.exports = function (Highcharts, map, appPath) {
43437
43438    const elementId = 'hydro-generation-by-state';
43439	let units = '';
43440        let mapData = Highcharts.geojson(map, 'map');
43441
43442    // Our own options definition as two different series, will populate the data in the complete callback
43443    var seriesOptions = [
43444        {
43445            id: "rank1",
43446            type: "map",
43447            allAreas: false,
43448            keys: ["postal-code"],
43449            joinBy: ['hc-a2', 'code'],
43450            data: [],
43451            mapData: mapData,
43452			borderWidth: 0.5,
43453            states: {
43454                hover: {
43455                    brightness: 0,
43456					borderWidth: 1,
43457					borderColor: Highcharts.eiaColors.darkGrey
43458                }
43459            },
43460			color: '#ffffff',
43461            dataLabels: {
43462                enabled: true,
43463                formatter: function () {
43464                    if (this.point.properties) {
43465                        return this.point.properties['hc-a2'];
43466                    }
43467                    return this.point.options.ucName;
43468                }
43469            },
43470            tooltip: {
43471                valueSuffix: ''
43472            }
43473        },
43474        {
43475            type: 'mapline',
43476            mapData: Highcharts.geojson(map, 'mapline'),
43477            color: 'silver',
43478            nullColor : 'silver',
43479            lineWidth : 1,
43480            showInLegend: false,
43481			enableMouseTracking: false,
43482            states : {
43483                inactive : {
43484                    enabled : false
43485                }
43486            }
43487        }
43488    ];
43489
43490    if ($('#' + elementId).length > 0) {
43491        Highcharts.mapChart(elementId, {
43492            chart: {
43493                map: map,
43494                spacingBottom: 25,
43495                events: {
43496                    load: creditsSizeAndPosition,
43497                    redraw: creditsSizeAndPosition
43498                }
43499            },
43500            mapView : {
43501                insetOptions : {
43502                    borderWidth : 1,
43503                    borderColor : 'silver'
43504                }
43505            },
43506			credits: {
43507                enabled: false,
43508                href: null,
43509                style: {
43510                    cursor: 'normal'
43511                }
43512            },
43513			caption: {
43514				verticalAlign: 'bottom',
43515				useHTML: true,
43516				margin: 0,
43517				style: {
43518					color: '#888',
43519					fontSize: '11px'
43520				},
43521				x: 32,
43522				y: 33
43523			},
43524            tooltip: {
43525                enabled: true,
43526                useHTML: true,
43527                formatter: function () {
43528                    var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : '';
43529                    if (html !== '')
43530                        return html
43531                }
43532            },
43533            data: {
43534                csvURL: appPath + '/hydropower/charts/' + elementId + '.csv',
43535                startRow: 5,
43536				firstRowAsNames: false,
43537                complete: function (options) {
43538                    var point;
43539                    var i;
43540
43541                    for (i = 0; i < options.series[0].data.length; i++) {
43542
43543                        point = options.series[0].data[i];
43544                        var pointValueString = Highcharts.numberFormat(point.value, 0, '', ',') + ' ' + units;
43545
43546                        if (pointValueString) {
43547                            seriesOptions[0].data.push({
43548								code: point.name,
43549								nameCode: "<span>" + pointValueString + "</span>",
43550								value: point.value
43551							});
43552                        }
43553
43554                    }
43555
43556                    // replace series options parsed by Highcharts with our own options definition
43557                    options.series = seriesOptions;
43558
43559                },
43560                beforeParse: function (csv) {
43561
43562                    var parsedCSV = csvParser(csv);
43563					units = parsedCSV[1][0];
43564                    this.chart.title.update({ text: parsedCSV[0][0] });
43565                    this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
43566
43567
43568                    this.chart.update(
43569                        {
43570							legend: {
43571								title: {
43572									text: parsedCSV[1][0]
43573								}
43574							},
43575							accessibility: {
43576								description: parsedCSV[4][0]
43577							},
43578                            exporting: {
43579								allowHTML: true,
43580                                menuItemDefinitions:
43581                                {
43582                                    label: {
43583                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
43584                                    }
43585                                },
43586                                buttons: {
43587                                    contextButton: {
43588                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
43589                                    }
43590                                }
43591                            }
43592                        }
43593                    );
43594                    return csv;
43595                }
43596            },
43597			colorAxis: {
43598                dataClasses: [{
43599                    color: '#FFFFFF',
43600					from: 0,
43601					to: 0,
43602					name: '= 0'
43603                }, {
43604                    color: '#E5F5FB',
43605					from: 1,
43606					to: 1000,
43607					name: '1 - 1,000'
43608                }, {
43609					color: Highcharts.eiaColors.extraLightBlue,
43610                    from: 1001,
43611					to: 5000,
43612					name: '1,000 - 5,000'
43613                }, {
43614					color: Highcharts.eiaColors.lightBlue,
43615                    from: 5001,
43616					to: 10000,
43617					name: '5,000 - 10,000'
43618                }, {
43619					color: Highcharts.eiaColors.blue,
43620                    from: 10001,
43621					to: 30000,
43622					name: '10,000 - 30,000'
43623                }, {
43624					color: Highcharts.eiaColors.darkBlue,
43625                    from: 30001,
43626					name: '> 30,000'
43627                }]
43628            },
43629            legend: {
43630                align: 'center',
43631                backgroundColor: 'white',
43632                borderColor: 'white',
43633                layout: 'horizontal',
43634                symbolPadding: 10,
43635				symbolRadius: 0,
43636				valueDecimals: 2,
43637				labelFormatter: function () {
43638                    if (this.from === 0) {
43639						$(this.legendItem.symbol.element).attr({
43640							strokeWidth: 1,
43641							stroke: '#e7e7e7',
43642							width: 11.5,
43643							height: 11.5,
43644							x: 2.5
43645						});
43646                    }
43647					return this.name;
43648				}
43649            },
43650			plotOptions: {
43651				map: {
43652					dataLabels: {
43653						style: {
43654							fontSize: '6.8px'
43655						}
43656					}
43657				}
43658			},
43659			responsive: {
43660				rules: [{
43661					condition: {
43662						maxWidth: 321
43663					},
43664					
43665					chartOptions: {
43666						chart: {
43667							height: 380
43668						},
43669						title: {
43670							margin: 20
43671						},
43672                        plotOptions: {
43673                            map: {
43674                                dataLabels: {
43675                                    style: {
43676                                        fontSize: '7px',
43677                                        lineHeight: 7
43678                                    }
43679                                }
43680                            }
43681                        }
43682					}
43683				},
43684				{
43685					condition: {
43686						minWidth: 322,
43687						maxWidth: 400
43688					},
43689					
43690					chartOptions: {
43691						chart: {
43692							height: 370
43693						},
43694						title: {
43695							margin: 5
43696						},
43697                        plotOptions: {
43698                            map: {
43699                                dataLabels: {
43700                                    style: {
43701                                        fontSize: '8px',
43702                                        lineHeight: 8
43703                                    }
43704                                }
43705                            }
43706                        }
43707					}
43708				},
43709				{
43710					condition: {
43711						minWidth: 401,
43712						maxWidth: 450
43713					},
43714					
43715					chartOptions: {
43716						chart: {
43717							height: '65%'
43718						},
43719						title: {
43720							margin: 5
43721						},
43722                        plotOptions: {
43723                            map: {
43724                                dataLabels: {
43725                                    style: {
43726                                        fontSize: '8px',
43727                                        lineHeight: 8
43728                                    }
43729                                }
43730                            }
43731                        }
43732					}
43733				},
43734				{
43735					condition: {
43736						minWidth: 451
43737					},
43738					
43739					chartOptions: {
43740						chart: {
43741							height: '65%'
43742						},
43743						title: {
43744							margin: 15
43745						},
43746						plotOptions: {
43747							map: {
43748								dataLabels: {
43749									style: {
43750										fontSize: '12px'
43751									}
43752								}
43753							}
43754						}
43755					}
43756				}]
43757			}
43758        });
43759    }
43760};
43761
43762},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],232:[function(require,module,exports){
43763const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
43764const csvParser = require('../../includes/csvParser');
43765
43766
43767module.exports = function (Highcharts, map, appPath) {
43768    const elementId = 'top-hydropower-states';
43769    let mapData = Highcharts.geojson(map);
43770
43771    // Our own options definition as two different series, will populate the data in the complete callback
43772    var seriesOptions = [
43773        {
43774            id: "rank1",
43775            type: "map",
43776            keys: ["postal-code"],
43777            joinBy: ['hc-a2', 'code'],
43778            data: [],
43779            mapData: mapData,
43780            states: {
43781                hover: {
43782                    color: '#a4edba'
43783                }
43784            },
43785            dataLabels: {
43786                enabled: true,
43787                formatter: function () {
43788                    if (this.point.nameCode) {
43789                        if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") {
43790                            return this.point.code + " " + this.point.nameCode;
43791                        }
43792                        else {
43793                            return this.point.code + "<br/>" + this.point.nameCode;
43794                        }
43795                    }
43796                    return this.point.code
43797                },
43798                style: {
43799                    fontSize: '10px'
43800                }
43801            },
43802            tooltip: {
43803                valueSuffix: ''
43804            },
43805            showInLegend: false
43806        }
43807    ];
43808
43809    if ($('#' + elementId).length > 0) {
43810        Highcharts.mapChart(elementId, {
43811            chart: {
43812                map: map,
43813                spacingBottom: 30,
43814                events: {
43815                    load: creditsSizeAndPosition,
43816                    redraw: creditsSizeAndPosition
43817                }
43818            },
43819			credits: {
43820                enabled: false,
43821                href: null,
43822                style: {
43823                    cursor: 'normal'
43824                }
43825            },
43826			caption: {
43827				verticalAlign: 'bottom',
43828				useHTML: true,
43829				margin: 0,
43830				style: {
43831					color: '#888',
43832					fontSize: '11px'
43833				},
43834				x: 32,
43835				y: 33
43836			},
43837            tooltip: {
43838                enabled: true,
43839                useHTML: true,
43840                formatter: function () {
43841                    if (this.point.nameCode) {
43842                        return '<b>' + this.point.name + '</b><br/>' + this.point.nameCode;
43843                    }
43844                    else {
43845                        return false;
43846                    }
43847                },
43848                style: {
43849                    textAlign: 'center'
43850                }
43851            },
43852            legend: {
43853                enabled: false
43854            },
43855            data: {
43856                csvURL: appPath + '/hydropower/charts/' + elementId + '.csv',
43857                startRow: 4,
43858                complete: function (options) {
43859                    var point;
43860                    for (var i = 0; i < options.series[0].data.length; i++) {
43861                        point = options.series[0].data[i];
43862
43863                        if (point.value) {
43864                            switch (point.value) {
43865                                case 1:
43866                                    seriesOptions[0].data.push({
43867                                        code: point.name,
43868                                        color: Highcharts.eiaColors.red,
43869                                        nameCode: "<span>#" + point.value + "</span>"
43870                                    });
43871                                    break;
43872                                case 2:
43873                                    seriesOptions[0].data.push({
43874                                        code: point.name,
43875                                        color: Highcharts.eiaColors.yellow,
43876                                        nameCode: "<span>#" + point.value + "</span>"
43877                                    });
43878                                    break;
43879                                case 3:
43880                                    seriesOptions[0].data.push({
43881                                        code: point.name,
43882                                        color: Highcharts.eiaColors.green,
43883                                        nameCode: "<span>#" + point.value + "</span>"
43884                                    });
43885                                    break;
43886                                case 4:
43887                                    seriesOptions[0].data.push({
43888                                        code: point.name,
43889                                        color: Highcharts.eiaColors.blue,
43890                                        nameCode: "<span>#" + point.value + "</span>"
43891                                    });
43892                                    break;
43893                                case 5:
43894                                    seriesOptions[0].data.push({
43895                                        code: point.name,
43896                                        color: Highcharts.eiaColors.brown,
43897                                        nameCode: "<span>#" + point.value + "</span>"
43898                                    });
43899                                    break;
43900                                default:
43901                                    seriesOptions[0].data.push({
43902                                        code: point.name,
43903                                        color: "none",
43904                                        nameCode: "<span>#" + point.value + "</span>"
43905                                    });
43906                            }
43907                        }
43908                    }
43909                    // replace series options parsed by Highcharts with our own options definition
43910                    options.series = seriesOptions;
43911                },
43912                beforeParse: function (csv) {
43913                    var parsedCSV = csvParser(csv);
43914                    this.chart.title.update({ text: parsedCSV[0][0] });
43915                    this.chart.caption.update({ text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0] });
43916
43917                    this.chart.update(
43918                        {
43919							accessibility: {
43920								description: parsedCSV[3][0]
43921							},
43922                            exporting: {
43923								allowHTML: true,
43924                                menuItemDefinitions:
43925                                {
43926                                    label: {
43927                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
43928                                    }
43929                                },
43930                                buttons: {
43931                                    contextButton: {
43932                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
43933                                    }
43934                                }
43935                            }
43936                        }
43937                    );
43938                    return csv;
43939                }
43940            },
43941			responsive: {
43942				rules: [{
43943					condition: {
43944						maxWidth: 321
43945					},
43946					
43947					chartOptions: {
43948						chart: {
43949							height: 330
43950						},
43951						title: {
43952							margin: 5
43953						}
43954					}
43955				},
43956				{
43957					condition: {
43958						minWidth: 322,
43959						maxWidth: 400
43960					},
43961					
43962					chartOptions: {
43963						chart: {
43964							height: 350
43965						},
43966						title: {
43967							margin: 5
43968						}
43969					}
43970				},
43971				{
43972					condition: {
43973						minWidth: 401,
43974						maxWidth: 450
43975					},
43976					
43977					chartOptions: {
43978						chart: {
43979							height: 380
43980						},
43981						title: {
43982							margin: 5
43983						}
43984					}
43985				},
43986				{
43987					condition: {
43988						minWidth: 451
43989					},
43990					
43991					chartOptions: {
43992						chart: {
43993							height: '65%'
43994						},
43995						title: {
43996							margin: 15
43997						}
43998					}
43999				}]
44000			}
44001
44002        });
44003
44004    }
44005};
44006
44007},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],233:[function(require,module,exports){
44008require('es6-shim');
44009require('es7-shim');
44010//Used for IE to export svg to png
44011require('blueimp-canvas-to-blob');
44012
44013window.proj4 = require('proj4');
44014const Highcharts = require('highcharts');
44015window.Highcharts = Highcharts;
44016require('highcharts/modules/data')(Highcharts);
44017require('highcharts/modules/exporting')(Highcharts);
44018require('highcharts/modules/map')(Highcharts);
44019require('highcharts/modules/accessibility')(Highcharts);
44020require('eia-highcharts-modules/eia-theme')(Highcharts);
44021require('highcharts/highcharts-more')(Highcharts);
44022
44023
44024const usAllTopo = require('@highcharts/map-collection/countries/us/us-all.topo.json');
44025const usSmallTopo = require('@highcharts/map-collection/countries/us/custom/us-small.topo.json');
44026const usSmallWithOffshoreGeo = require("eia-highcharts-modules/maps/us-small-with-offshore.geo.json");
44027
44028const ENERGY_CALCULATOR = require('./energy_calculator');
44029// #coalCalculator is unique to the calculator page, so the ENERGY_CACLULATOR functionality will only work there
44030if (document.getElementById('coalCalculator') !== null) ENERGY_CALCULATOR();
44031
44032// Use UTC Dates with highcharts to avoid locality issues with dates
44033Highcharts.setOptions({
44034    global: {
44035        useUTC: true
44036    },
44037    time: {
44038        useUTC: true
44039    },
44040    lang: {
44041        thousandsSep: ','
44042    }
44043});
44044
44045// Make this case insensitive by lower casing everything
44046const href = window.location.href.toLowerCase();
44047const baseHref = $('base').attr('href').toLowerCase();
44048
44049const appPath = window.location.href.substring(0, href.lastIndexOf(baseHref) + baseHref.length);
44050
44051const exportSVG = require('./svgExport');
44052
44053//Engery and the environment
44054const greenhouse_gas_emissions_by_gas = require('../energy-and-the-environment/charts/greenhouse-gas-emissions-by-gas');
44055greenhouse_gas_emissions_by_gas(Highcharts, appPath);
44056
44057const carbon_dioxide_emissions_by_major_fuel_type = require('../energy-and-the-environment/charts/carbon-dioxide-emissions-by-major-fuel-type');
44058carbon_dioxide_emissions_by_major_fuel_type(Highcharts, appPath);
44059
44060const major_fuel_energy_sources = require('../energy-and-the-environment/charts/major-fuel-energy-sources');
44061major_fuel_energy_sources(Highcharts, appPath);
44062
44063const ENERGY_END_USE_SECTOR = require('../energy-and-the-environment/charts/energy-end-use-sector');
44064ENERGY_END_USE_SECTOR(Highcharts, appPath);
44065
44066const CARBON_DIOXIDE_END_USE = require('../energy-and-the-environment/charts/carbon-dioxide-end-use');
44067CARBON_DIOXIDE_END_USE(Highcharts, appPath);
44068
44069const WORLD_CARBON_DIOXIDE_EMISSIONS = require('../energy-and-the-environment/charts/world-carbon-dioxide-emissions');
44070WORLD_CARBON_DIOXIDE_EMISSIONS(Highcharts, appPath);
44071
44072
44073//Biomass
44074const total_msw_generation_by_type_of_waste = require('../biomass/charts/total-msw-generation-by-type-of-waste');
44075total_msw_generation_by_type_of_waste(Highcharts, appPath);
44076
44077const management_of_msw_us = require('../biomass/charts/management-of-msw-us');
44078management_of_msw_us(Highcharts, appPath);
44079
44080const PERCENT_WASTE_BURNED = require('../biomass/charts/percent-waste-burned');
44081PERCENT_WASTE_BURNED(Highcharts, appPath);
44082
44083//Biofuels: Ethanol and Biodiesel
44084const biofuels_trade_by_type = require('../biofuels/charts/biofuels-trade-by-type');
44085biofuels_trade_by_type(Highcharts, appPath);
44086
44087const biofuels_consumption_major_type = require('../biofuels/charts/biofuels-consumption-major-type');
44088biofuels_consumption_major_type(Highcharts, appPath);
44089
44090const biofuels_production_major_type = require('../biofuels/charts/biofuels-production-major-type');
44091biofuels_production_major_type(Highcharts, appPath);
44092
44093const biodiesel_renewdiesel_other_consumption = require('../biofuels/charts/biodiesel-renewdiesel-other-consumption');
44094biodiesel_renewdiesel_other_consumption(Highcharts, appPath);
44095
44096const biodiesel_renewdiesel_other_production = require('../biofuels/charts/biodiesel-renewdiesel-other-production');
44097biodiesel_renewdiesel_other_production(Highcharts, appPath);
44098
44099const us_biodiesel_consumption = require('../biofuels/charts/us-biodiesel-consumption');
44100us_biodiesel_consumption(Highcharts, appPath);
44101
44102const feedstock_inputs_biodiesel_production = require('../biofuels/charts/feedstock-inputs-biodiesel-production');
44103feedstock_inputs_biodiesel_production(Highcharts, appPath);
44104
44105const feedstocks_for_biofuels_production = require('../biofuels/charts/feedstocks-for-biofuels-production');
44106feedstocks_for_biofuels_production(Highcharts, appPath);
44107
44108const FUEL_ETHANOL_MOTOR_GASOLINE = require('../biofuels/charts/fuel-ethanol-motor-gasoline');
44109FUEL_ETHANOL_MOTOR_GASOLINE(Highcharts, appPath);
44110
44111const ethanol_supply_production_states = require('../biofuels/charts/ethanol-supply-production-states');
44112ethanol_supply_production_states(Highcharts, appPath);
44113
44114
44115//Diesel-fuels
44116const CRUDE_RETAIL_PRICES = require('../diesel-fuel/charts/crude-retail-prices');
44117CRUDE_RETAIL_PRICES(Highcharts, appPath);
44118
44119
44120// HGL
44121const PRODUCTION_BY_SOURCE = require('../hydrocarbon-gas-liquids/charts/production-by-source');
44122PRODUCTION_BY_SOURCE(Highcharts, appPath);
44123
44124const CONSUMPTION_BY_TYPE = require('../hydrocarbon-gas-liquids/charts/consumption-by-type');
44125CONSUMPTION_BY_TYPE(Highcharts, appPath);
44126
44127const productionByType = require('../hydrocarbon-gas-liquids/charts/production-by-type');
44128productionByType(Highcharts, appPath);
44129
44130const supplyDisposition = require('../hydrocarbon-gas-liquids/charts/supply-disposition');
44131supplyDisposition(Highcharts, appPath);
44132
44133const spotPrices = require('../hydrocarbon-gas-liquids/charts/spot-prices.js');
44134spotPrices(Highcharts, appPath);
44135
44136const CONSUMPTION_BY_END_USE_SECTOR = require('../hydrocarbon-gas-liquids/charts/consumption-by-end-use-sector');
44137CONSUMPTION_BY_END_USE_SECTOR(Highcharts, appPath);
44138
44139const PRODUCTION_NATURAL_GAS_PROCESSING = require('../hydrocarbon-gas-liquids/charts/production-natural-gas-processing');
44140PRODUCTION_NATURAL_GAS_PROCESSING(Highcharts, appPath);
44141
44142const EXPORTS_BY_TYPE = require('../hydrocarbon-gas-liquids/charts/exports-by-type');
44143EXPORTS_BY_TYPE(Highcharts, appPath);
44144
44145const PRODUCTION_FROM_PETROLEUM_REFINING = require('../hydrocarbon-gas-liquids/charts/production-from-petroleum-refining');
44146PRODUCTION_FROM_PETROLEUM_REFINING(Highcharts, appPath);
44147
44148const propane_production_by_source = require('../hydrocarbon-gas-liquids/charts/propane-production-by-source');
44149propane_production_by_source(Highcharts, appPath);
44150
44151const propane_by_regionofentry = require('../hydrocarbon-gas-liquids/charts/propane-by-regionofentry');
44152propane_by_regionofentry(Highcharts, appPath);
44153
44154const propane_consumption_by_end_use_sector = require('../hydrocarbon-gas-liquids/charts/propane-consumption-by-end-use-sector');
44155propane_consumption_by_end_use_sector(Highcharts, appPath);
44156
44157const residential_propane_consumption_by_census_region = require('../hydrocarbon-gas-liquids/charts/residential-propane-consumption-by-census-region');
44158residential_propane_consumption_by_census_region(Highcharts, appPath);
44159
44160const PROPANE_PRICES_BY_REGION = require('../hydrocarbon-gas-liquids/charts/propane-prices-by-region');
44161PROPANE_PRICES_BY_REGION(Highcharts, appPath);
44162
44163const residential_propane_consumption_by_end_use = require('../hydrocarbon-gas-liquids/charts/residential-propane-consumption-by-end-use');
44164residential_propane_consumption_by_end_use(Highcharts, appPath);
44165
44166const propane_prices = require('../hydrocarbon-gas-liquids/charts/propane-prices');
44167propane_prices(Highcharts, appPath);
44168
44169//Oil and Petroleum Products
44170const TOP_OIL_COUNTRIES = require('../oil-and-petroleum-products/charts/top-oil-countries');
44171TOP_OIL_COUNTRIES(Highcharts, appPath);
44172
44173const PETROLEUM_IMPORTS = require('../oil-and-petroleum-products/charts/petroleum-imports');
44174PETROLEUM_IMPORTS(Highcharts, appPath);
44175
44176const PETROLEUM_CONSUMPTION = require('../oil-and-petroleum-products/charts/petroleum-consumption');
44177PETROLEUM_CONSUMPTION(Highcharts, appPath);
44178
44179const REFINER_AQUISITION_COST = require('../oil-and-petroleum-products/charts/refiner-acquisition-cost');
44180REFINER_AQUISITION_COST(Highcharts, appPath);
44181
44182const top_crude_oil_producing_states = require('../oil-and-petroleum-products/charts/top-crude-oil-producing-states');
44183top_crude_oil_producing_states(Highcharts, usAllTopo, appPath);
44184
44185const REFINER_BLENDER_NET_PRODUCTION = require('../oil-and-petroleum-products/charts/refiner-blender-net-production');
44186REFINER_BLENDER_NET_PRODUCTION(Highcharts, appPath);
44187
44188const net_imports_petroleum_shares_consumption = require('../oil-and-petroleum-products/charts/net-imports-petroleum-shares-consumption');
44189net_imports_petroleum_shares_consumption(Highcharts, appPath);
44190
44191const refiner_blender_netinput_by_type_share_total = require('../oil-and-petroleum-products/charts/refiner-blender-netinput-by-type-share-total');
44192refiner_blender_netinput_by_type_share_total(Highcharts, appPath);
44193
44194const crude_oil_production = require("../oil-and-petroleum-products/charts/crude-oil-production");
44195crude_oil_production(Highcharts, usSmallWithOffshoreGeo, appPath);
44196
44197const net_petroleum_imports_by_type = require("../oil-and-petroleum-products/charts/net-petroleum-imports-by-type");
44198net_petroleum_imports_by_type(Highcharts, appPath);
44199
44200//Gasoline
44201const annual_regular_grade_gasoline_prices = require("../gasoline/charts/annual-regular-grade-gasoline-prices");
44202annual_regular_grade_gasoline_prices(Highcharts, appPath);
44203
44204const AVERAGE_MONTHLY_PRICES = require("../gasoline/charts/average-monthly-prices");
44205AVERAGE_MONTHLY_PRICES(Highcharts, appPath);
44206
44207const regular_grade_gasoline_demand_retail_price = require("../gasoline/charts/regular-grade-gasoline-demand-retail-price");
44208regular_grade_gasoline_demand_retail_price(Highcharts, appPath);
44209
44210const us_gasoline_stocks = require("../gasoline/charts/us-gasoline-stocks");
44211us_gasoline_stocks(Highcharts, appPath);
44212
44213//Heating oil
44214const heating_oil_sales_by_census = require("../heating-oil/charts/heating-oil-sales-by-census");
44215heating_oil_sales_by_census(Highcharts, appPath);
44216
44217const MAJOR_PRICE_COMPONENTS = require('../heating-oil/charts/major-price-components');
44218MAJOR_PRICE_COMPONENTS(Highcharts, appPath);
44219
44220const AVERAGE_MONTHLY_HEATING_CRUDE = require('../heating-oil/charts/average-monthly-heating-crude');
44221AVERAGE_MONTHLY_HEATING_CRUDE(Highcharts, appPath);
44222
44223const use_of_heating_oil = require('../heating-oil/charts/use-of-heating-oil');
44224use_of_heating_oil(Highcharts, usSmallTopo, appPath);
44225
44226//coal
44227const annual_prices_delivered_end_use_sectors = require("../coal/charts/annual-prices-delivered-end-use-sectors");
44228annual_prices_delivered_end_use_sectors(Highcharts, appPath);
44229
44230const reserves_by_type_mining_method = require("../coal/charts/reserves-by-type-mining-method");
44231reserves_by_type_mining_method(Highcharts, appPath);
44232
44233const coal_consumption_by_major_end_users = require("../coal/charts/coal-consumption-by-major-end-users");
44234coal_consumption_by_major_end_users(Highcharts, appPath);
44235
44236const coal_imports_exports = require("../coal/charts/coal-imports-exports");
44237coal_imports_exports(Highcharts, appPath);
44238
44239const coal_production_consumption_net_exports = require("../coal/charts/coal-production-consumption-net-exports");
44240coal_production_consumption_net_exports(Highcharts, appPath);
44241
44242const TOP_COAL_STATES = require("../coal/charts/top-coal-states");
44243TOP_COAL_STATES(Highcharts, usAllTopo, appPath);
44244
44245//Natural Gas
44246const average_wellhead_citygate_residential_prices = require("../natural-gas/charts/average-wellhead-citygate-residential-prices");
44247average_wellhead_citygate_residential_prices(Highcharts, appPath);
44248
44249const customer_choice_program = require("../natural-gas/charts/customer-choice-program");
44250customer_choice_program(Highcharts, appPath);
44251
44252const nat_gas_consumption_by_sector = require("../natural-gas/charts/nat-gas-consumption-by-sector");
44253nat_gas_consumption_by_sector(Highcharts, appPath);
44254
44255const total_natgas_proved_reserves = require("../natural-gas/charts/total-natgas-proved-reserves");
44256total_natgas_proved_reserves(Highcharts, appPath);
44257
44258const lng_imports_exports = require("../natural-gas/charts/lng-imports-exports");
44259lng_imports_exports(Highcharts, appPath);
44260
44261const ng_consumption_dryprod_netimports = require("../natural-gas/charts/ng-consumption-dryprod-netimports");
44262ng_consumption_dryprod_netimports(Highcharts, appPath);
44263
44264const natgas_imports_exports_netimports = require("../natural-gas/charts/natgas-imports-exports-netimports");
44265natgas_imports_exports_netimports(Highcharts, appPath);
44266
44267const MONTHLY_SHALE_PRODUCTION = require("../natural-gas/charts/monthly-shale-production");
44268MONTHLY_SHALE_PRODUCTION(Highcharts, appPath);
44269
44270const comsumption_by_sector_area_chart = require("../natural-gas/charts/comsumption-by-sector-area-chart");
44271comsumption_by_sector_area_chart(Highcharts, appPath);
44272
44273const MONTHLY_DRY_CITYGATE = require("../natural-gas/charts/monthly-dry-citygate");
44274MONTHLY_DRY_CITYGATE(Highcharts, appPath);
44275
44276const top_nat_gas_producing_states = require("../natural-gas/charts/top-nat-gas-producing-states");
44277top_nat_gas_producing_states(Highcharts, usSmallWithOffshoreGeo, appPath);
44278
44279const average_annual_residential_natgas_prices_by_state = require("../natural-gas/charts/average-annual-residential-natgas-prices-by-state");
44280average_annual_residential_natgas_prices_by_state(Highcharts, usSmallTopo, appPath);
44281
44282const natgas_proved_reserves_by_statearea = require("../natural-gas/charts/natgas-proved-reserves-by-statearea");
44283natgas_proved_reserves_by_statearea(Highcharts, usSmallWithOffshoreGeo, appPath);
44284
44285const dry_natgas_production_by_source_refcase = require('../natural-gas/charts/dry-natgas-production-by-source-refcase');
44286dry_natgas_production_by_source_refcase(Highcharts, appPath);
44287
44288//solar
44289const utility_scale_generation = require("../solar/charts/utility-scale-generation");
44290utility_scale_generation(Highcharts, usSmallTopo, appPath);
44291
44292const small_scale_photovoltaic_generation = require("../solar/charts/small-scale-photovoltaic-generation");
44293small_scale_photovoltaic_generation(Highcharts, usSmallTopo, appPath);
44294
44295//Renewable Resource renewable-energy-consumption-major-sources
44296const renewable_energy_consumption_major_sources = require("../renewable-sources/charts/renewable-energy-consumption-major-sources");
44297renewable_energy_consumption_major_sources(Highcharts, appPath);
44298
44299const PORTFOLIO_STANDARDS_AND_GOALS = require("../renewable-sources/charts/portfolio-standards-and-goals");
44300PORTFOLIO_STANDARDS_AND_GOALS(Highcharts, usSmallTopo, appPath);
44301
44302//Use of energy
44303const motor_gasoline_consumption_trans_light_fuel = require("../use-of-energy/charts/motor-gasoline-consumption-trans-light-fuel");
44304motor_gasoline_consumption_trans_light_fuel(Highcharts, appPath);
44305
44306const transportation_energy_source_fuels = require("../use-of-energy/charts/transportation-energy-source-fuels");
44307transportation_energy_source_fuels(Highcharts, appPath);
44308
44309const us_energy_used_for_transportation = require("../use-of-energy/charts/us-energy-used-for-transportation");
44310us_energy_used_for_transportation(Highcharts, appPath);
44311
44312const total_energy_consumption_by_end_use_sector = require("../use-of-energy/charts/total-energy-consumption-by-end-use-sector");
44313total_energy_consumption_by_end_use_sector(Highcharts, appPath);
44314
44315const industrial_sector_energy_use_by_source = require("../use-of-energy/charts/industrial-sector-energy-use-by-source");
44316industrial_sector_energy_use_by_source(Highcharts, appPath);
44317
44318const industrial_sector_energy_consumption_by_type_industry = require("../use-of-energy/charts/industrial-sector-energy-consumption-by-type-industry");
44319industrial_sector_energy_consumption_by_type_industry(Highcharts, appPath);
44320
44321const CONSUMPTION_BY_SOURCE = require("../use-of-energy/charts/residential-energy-consumption-by-source");
44322CONSUMPTION_BY_SOURCE(Highcharts, appPath);
44323
44324const TRANSPORTATION_BY_TYPE = require("../use-of-energy/charts/transportation-by-type");
44325TRANSPORTATION_BY_TYPE(Highcharts, appPath);
44326
44327const AIR_CONDITIONING_YEAR_CONSTRUCTED = require("../use-of-energy/charts/air-conditioning-year-constructed");
44328AIR_CONDITIONING_YEAR_CONSTRUCTED(Highcharts, appPath);
44329
44330const us_average_by_census_region_selected_years = require("../use-of-energy/charts/us-average-by-census-region-selected-years");
44331us_average_by_census_region_selected_years(Highcharts, appPath);
44332
44333const us_households_total_by_census_region = require("../use-of-energy/charts/us-households-total-by-census-region");
44334us_households_total_by_census_region(Highcharts, appPath);
44335
44336const CONSUMPTION_HOME_CENSUS_REGION = require("../use-of-energy/charts/consumption-home-census-region");
44337CONSUMPTION_HOME_CENSUS_REGION(Highcharts, appPath);
44338
44339const end_use_consumption_by_housing_type = require("../use-of-energy/charts/end-use-consumption-by-housing-type");
44340end_use_consumption_by_housing_type(Highcharts, appPath);
44341
44342const residential_site_electricity_consumption_by_enduse = require("../use-of-energy/charts/residential-site-electricity-consumption-by-enduse");
44343residential_site_electricity_consumption_by_enduse(Highcharts, appPath);
44344
44345const percentage_of_homes_with_refrigerators_freezers = require("../use-of-energy/charts/percentage-of-homes-with-refrigerators-freezers");
44346percentage_of_homes_with_refrigerators_freezers(Highcharts, appPath);
44347
44348const energy_consumption_by_end_use_sectors = require("../use-of-energy/charts/energy-consumption-by-end-use-sectors");
44349energy_consumption_by_end_use_sectors(Highcharts, appPath);
44350
44351const energy_consumption_by_end_use_sectors_column = require("../use-of-energy/charts/total-energy-consumption-by-end-use-sector-column");
44352energy_consumption_by_end_use_sectors_column(Highcharts, appPath);
44353
44354const total_fuel_consumption_in_manufacturing = require("../use-of-energy/charts/total-fuel-consumption-in-manufacturing");
44355total_fuel_consumption_in_manufacturing(Highcharts, appPath);
44356
44357const consumption_of_electricity_has_generally_declined = require("../use-of-energy/charts/consumption-of-electricity-has-generally-declined");
44358consumption_of_electricity_has_generally_declined(Highcharts, appPath);
44359
44360const commercial_buildings_by_major_end_uses = require("../use-of-energy/charts/commercial-buildings-by-major-end-uses");
44361commercial_buildings_by_major_end_uses(Highcharts, appPath);
44362
44363const major_energy_sources_used_in_commercial_buildings = require("../use-of-energy/charts/major-energy-sources-used-in-commercial-buildings");
44364major_energy_sources_used_in_commercial_buildings(Highcharts, appPath);
44365
44366const energy_use_by_type_commercial_building = require("../use-of-energy/charts/energy-use-by-type-commercial-building");
44367energy_use_by_type_commercial_building(Highcharts, appPath);
44368
44369const electricity_use_commercial_buildings_by_major_enduse = require("../use-of-energy/charts/electricity-use-commercial-buildings-by-major-enduse");
44370electricity_use_commercial_buildings_by_major_enduse(Highcharts, appPath);
44371
44372const commercial_buildings_number = require("../use-of-energy/charts/commercial-buildings-number");
44373commercial_buildings_number(Highcharts, appPath);
44374
44375const commercial_buildings_floorspace = require("../use-of-energy/charts/commercial-buildings-floorspace");
44376commercial_buildings_floorspace(Highcharts, appPath);
44377
44378const commercial_buildings_fuel_use = require("../use-of-energy/charts/commercial-buildings-fuel-use");
44379commercial_buildings_fuel_use(Highcharts, appPath);
44380
44381const commercial_buildings_electricity_natgas_use = require("../use-of-energy/charts/commercial-buildings-electricity-natgas-use");
44382commercial_buildings_electricity_natgas_use(Highcharts, appPath);
44383
44384const commercial_buildings_energy_end_use_type = require("../use-of-energy/charts/commercial-buildings-energy-end-use-type");
44385commercial_buildings_energy_end_use_type(Highcharts, appPath);
44386
44387const commercial_buildings_energy_use_type = require("../use-of-energy/charts/commercial-buildings-energy-use-type");
44388commercial_buildings_energy_use_type(Highcharts, appPath);
44389
44390const commercial_buildings_electricity_end_uses = require("../use-of-energy/charts/commercial-buildings-electricity-end-uses");
44391commercial_buildings_electricity_end_uses(Highcharts, appPath);
44392
44393const commercial_buildings_census_region_energy_use_type = require("../use-of-energy/charts/commercial-buildings-census-region-energy-use-type");
44394commercial_buildings_census_region_energy_use_type(Highcharts, appPath);
44395
44396const commercial_building_floorspace_by_census_region = require("../use-of-energy/charts/commercial-building-floorspace-by-census-region");
44397commercial_building_floorspace_by_census_region(Highcharts, appPath);
44398
44399const commercial_bldgs_intensity_trend = require("../use-of-energy/charts/commercial-bldgs-intensity-trend");
44400commercial_bldgs_intensity_trend(Highcharts, appPath);
44401
44402const commercial_buildings_types_intensity = require("../use-of-energy/charts/commercial-buildings-types-intensity");
44403commercial_buildings_types_intensity(Highcharts, appPath);
44404
44405const energy_consumption_commercial_buildings_by_census_region = require("../use-of-energy/charts/energy-consumption-commercial-buildings-by-census-region");
44406energy_consumption_commercial_buildings_by_census_region(Highcharts, appPath);
44407
44408const energy_indicators_ratio = require("../use-of-energy/charts/energy-indicators-ratio");
44409energy_indicators_ratio(Highcharts, appPath);
44410
44411const energy_indicators_index = require("../use-of-energy/charts/energy-indicators-index");
44412energy_indicators_index(Highcharts, appPath);
44413
44414const energy_indicators_absolute = require("../use-of-energy/charts/energy-indicators-absolute");
44415energy_indicators_absolute(Highcharts, appPath);
44416
44417const ev_cars_projections = require("../use-of-energy/charts/ev-cars-projections");
44418ev_cars_projections(Highcharts, appPath);
44419
44420// US Energy Facts
44421const state_energy_data_system_map = require('../us-energy-facts/charts/state-energy-data-system-map');
44422state_energy_data_system_map(Highcharts, usSmallTopo, appPath);
44423
44424const state_energy_profile_map = require('../us-energy-facts/charts/state-energy-profile-map');
44425state_energy_profile_map(Highcharts, usSmallTopo, appPath);
44426
44427const ENERGY_PRODUCTION_BY_MAJOR_SOURCES = require("../us-energy-facts/charts/primary-energy-production-by-major-sources");
44428ENERGY_PRODUCTION_BY_MAJOR_SOURCES(Highcharts, appPath);
44429
44430const energy_net_imports_by_major_sources_totals = require("../us-energy-facts/charts/energy-net-imports-by-major-sources-totals");
44431energy_net_imports_by_major_sources_totals(Highcharts, appPath);
44432
44433const import_exports_primary_energy_overview = require("../us-energy-facts/charts/import-exports-primary-energy-overview");
44434import_exports_primary_energy_overview(Highcharts, appPath);
44435
44436const primary_consumption_by_major_source = require("../us-energy-facts/charts/primary-consumption-by-major-source");
44437primary_consumption_by_major_source(Highcharts, appPath);
44438
44439const primary_energy_production_by_major_source = require("../us-energy-facts/charts/primary-energy-production-by-major-source-history");
44440primary_energy_production_by_major_source(Highcharts, appPath);
44441
44442// Electricity
44443const GENERATION_CAPACITY_BY_TYPE = require("../electricity/charts/generation-capacity-by-type");
44444GENERATION_CAPACITY_BY_TYPE(Highcharts, appPath);
44445
44446const RETAIL_SALES_MAJOR = require("../electricity/charts/retail-sales-major");
44447RETAIL_SALES_MAJOR(Highcharts, appPath);
44448
44449const GENERATION_CAPACITY_MAJOR = require("../electricity/charts/generation-capacity-major");
44450GENERATION_CAPACITY_MAJOR(Highcharts, appPath);
44451
44452const GENERATING_CAPACITY_MAJOR_SOURCE = require("../electricity/charts/generating-capacity-major-source");
44453GENERATING_CAPACITY_MAJOR_SOURCE(Highcharts, appPath);
44454
44455const GENERATION_RENEWABLE_SOURCES = require("../electricity/charts/generation-renewable-sources");
44456GENERATION_RENEWABLE_SOURCES(Highcharts, appPath);
44457
44458const GENERATION_MAJOR_SOURCE = require("../electricity/charts/generation-major-source");
44459GENERATION_MAJOR_SOURCE(Highcharts, appPath);
44460
44461const electric_storage_psh_gen = require("../electricity/charts/electric-storage-psh-gen");
44462electric_storage_psh_gen(Highcharts, appPath);
44463
44464const electric_storage_bess_capacity = require("../electricity/charts/electric-storage-bess-capacity");
44465electric_storage_bess_capacity(Highcharts, appPath);
44466
44467const residential_sector_electricity_consumption_by_major_end_uses = require("../electricity/charts/residential-sector-electricity-consumption-by-major-end-uses");
44468residential_sector_electricity_consumption_by_major_end_uses(Highcharts, appPath);
44469
44470const RETAIL_MAJOR_SECTORS = require("../electricity/charts/retail-major-sectors");
44471RETAIL_MAJOR_SECTORS(Highcharts, appPath);
44472
44473const commercial_sector_electricity_consumption_by_major_end_uses = require("../electricity/charts/commercial-sector-electricity-consumption-by-major-end-uses");
44474commercial_sector_electricity_consumption_by_major_end_uses(Highcharts, appPath);
44475
44476const manufacturing_electricity_consumption_by_major_end_uses = require("../electricity/charts/manufacturing-electricity-consumption-by-major-end-uses");
44477manufacturing_electricity_consumption_by_major_end_uses(Highcharts, appPath);
44478
44479const major_components_average_price_of_electricity = require("../electricity/charts/major-components-average-price-of-electricity");
44480major_components_average_price_of_electricity(Highcharts, appPath);
44481
44482
44483// Nuclear
44484const GENERATION_CAPACITY_GENERATION = require("../nuclear/charts/generation-capacity-generation");
44485GENERATION_CAPACITY_GENERATION(Highcharts, appPath);
44486
44487const sources_of_uranium = require("../nuclear/charts/sources-of-uranium");
44488sources_of_uranium(Highcharts, appPath);
44489
44490const available_generating_capacity_annual_basis = require("../nuclear/charts/available-generating-capacity-annual-basis");
44491available_generating_capacity_annual_basis(Highcharts, appPath);
44492
44493// Wind
44494const GENERATION_SHARE_TOTAL = require("../wind/charts/generation-share-total");
44495GENERATION_SHARE_TOTAL(Highcharts, appPath);
44496
44497const TOP_WIND_STATES = require("../wind/charts/top-wind-states");
44498TOP_WIND_STATES(Highcharts, usAllTopo, appPath);
44499
44500const utility_scale_wind_generation = require("../wind/charts/utility-scale-wind-generation");
44501utility_scale_wind_generation(Highcharts, usSmallTopo, appPath);
44502
44503// Hydropower
44504const GENERATION_SHARE_GENERATION = require("../hydropower/charts/generation-share-generation");
44505GENERATION_SHARE_GENERATION(Highcharts, appPath);
44506
44507const TOP_HYDROPOWER_STATES = require("../hydropower/charts/top-hydropower-states");
44508TOP_HYDROPOWER_STATES(Highcharts, usAllTopo, appPath);
44509
44510const hydro_generation_by_state = require("../hydropower/charts/hydro-generation-by-state");
44511hydro_generation_by_state(Highcharts, usSmallTopo, appPath);
44512
44513//Geothermal
44514const GEOTHERMAL_ELECTRICITY_GENERATION = require("../geothermal/charts/geothermal-electricity-generation");
44515GEOTHERMAL_ELECTRICITY_GENERATION(Highcharts, usAllTopo, appPath);
44516
44517
44518
44519// Toggles class on the clicked main menu item
44520$('.tray-item').click(function () {
44521    $(this).toggleClass("active");
44522    $('#d-' + this.id).toggleClass("active");
44523    $('.tray-display:not(#d-' + this.id + ')').removeClass("active");
44524    $('.tray-item:not(#' + this.id + ')').removeClass("active");
44525});
44526$('.menu-controls button').click(function () {
44527    $(this).parents('.active').removeClass("active");
44528    $('.tray-item').removeClass("active");
44529});
44530
44531
44532},{"../biofuels/charts/biodiesel-renewdiesel-other-consumption":166,"../biofuels/charts/biodiesel-renewdiesel-other-production":167,"../biofuels/charts/biofuels-consumption-major-type":168,"../biofuels/charts/biofuels-production-major-type":169,"../biofuels/charts/biofuels-trade-by-type":170,"../biofuels/charts/ethanol-supply-production-states":171,"../biofuels/charts/feedstock-inputs-biodiesel-production":172,"../biofuels/charts/feedstocks-for-biofuels-production":173,"../biofuels/charts/fuel-ethanol-motor-gasoline":174,"../biofuels/charts/us-biodiesel-consumption":175,"../biomass/charts/management-of-msw-us":176,"../biomass/charts/percent-waste-burned":177,"../biomass/charts/total-msw-generation-by-type-of-waste":178,"../coal/charts/annual-prices-delivered-end-use-sectors":179,"../coal/charts/coal-consumption-by-major-end-users":180,"../coal/charts/coal-imports-exports":181,"../coal/charts/coal-production-consumption-net-exports":182,"../coal/charts/reserves-by-type-mining-method":183,"../coal/charts/top-coal-states":184,"../diesel-fuel/charts/crude-retail-prices":185,"../electricity/charts/commercial-sector-electricity-consumption-by-major-end-uses":186,"../electricity/charts/electric-storage-bess-capacity":187,"../electricity/charts/electric-storage-psh-gen":188,"../electricity/charts/generating-capacity-major-source":189,"../electricity/charts/generation-capacity-by-type":190,"../electricity/charts/generation-capacity-major":191,"../electricity/charts/generation-major-source":192,"../electricity/charts/generation-renewable-sources":193,"../electricity/charts/major-components-average-price-of-electricity":194,"../electricity/charts/manufacturing-electricity-consumption-by-major-end-uses":195,"../electricity/charts/residential-sector-electricity-consumption-by-major-end-uses":196,"../electricity/charts/retail-major-sectors":197,"../electricity/charts/retail-sales-major":198,"../energy-and-the-environment/charts/carbon-dioxide-emissions-by-major-fuel-type":199,"../energy-and-the-environment/charts/carbon-dioxide-end-use":200,"../energy-and-the-environment/charts/energy-end-use-sector":201,"../energy-and-the-environment/charts/greenhouse-gas-emissions-by-gas":202,"../energy-and-the-environment/charts/major-fuel-energy-sources":203,"../energy-and-the-environment/charts/world-carbon-dioxide-emissions":204,"../gasoline/charts/annual-regular-grade-gasoline-prices":205,"../gasoline/charts/average-monthly-prices":206,"../gasoline/charts/regular-grade-gasoline-demand-retail-price":207,"../gasoline/charts/us-gasoline-stocks":208,"../geothermal/charts/geothermal-electricity-generation":209,"../heating-oil/charts/average-monthly-heating-crude":210,"../heating-oil/charts/heating-oil-sales-by-census":211,"../heating-oil/charts/major-price-components":212,"../heating-oil/charts/use-of-heating-oil":213,"../hydrocarbon-gas-liquids/charts/consumption-by-end-use-sector":214,"../hydrocarbon-gas-liquids/charts/consumption-by-type":215,"../hydrocarbon-gas-liquids/charts/exports-by-type":216,"../hydrocarbon-gas-liquids/charts/production-by-source":217,"../hydrocarbon-gas-liquids/charts/production-by-type":218,"../hydrocarbon-gas-liquids/charts/production-from-petroleum-refining":219,"../hydrocarbon-gas-liquids/charts/production-natural-gas-processing":220,"../hydrocarbon-gas-liquids/charts/propane-by-regionofentry":221,"../hydrocarbon-gas-liquids/charts/propane-consumption-by-end-use-sector":222,"../hydrocarbon-gas-liquids/charts/propane-prices":224,"../hydrocarbon-gas-liquids/charts/propane-prices-by-region":223,"../hydrocarbon-gas-liquids/charts/propane-production-by-source":225,"../hydrocarbon-gas-liquids/charts/residential-propane-consumption-by-census-region":226,"../hydrocarbon-gas-liquids/charts/residential-propane-consumption-by-end-use":227,"../hydrocarbon-gas-liquids/charts/spot-prices.js":228,"../hydrocarbon-gas-liquids/charts/supply-disposition":229,"../hydropower/charts/generation-share-generation":230,"../hydropower/charts/hydro-generation-by-state":231,"../hydropower/charts/top-hydropower-states":232,"../natural-gas/charts/average-annual-residential-natgas-prices-by-state":239,"../natural-gas/charts/average-wellhead-citygate-residential-prices":240,"../natural-gas/charts/comsumption-by-sector-area-chart":241,"../natural-gas/charts/customer-choice-program":242,"../natural-gas/charts/dry-natgas-production-by-source-refcase":243,"../natural-gas/charts/lng-imports-exports":244,"../natural-gas/charts/monthly-dry-citygate":245,"../natural-gas/charts/monthly-shale-production":246,"../natural-gas/charts/nat-gas-consumption-by-sector":247,"../natural-gas/charts/natgas-imports-exports-netimports":248,"../natural-gas/charts/natgas-proved-reserves-by-statearea":249,"../natural-gas/charts/ng-consumption-dryprod-netimports":250,"../natural-gas/charts/top-nat-gas-producing-states":251,"../natural-gas/charts/total-natgas-proved-reserves":252,"../nuclear/charts/available-generating-capacity-annual-basis":253,"../nuclear/charts/generation-capacity-generation":254,"../nuclear/charts/sources-of-uranium":255,"../oil-and-petroleum-products/charts/crude-oil-production":256,"../oil-and-petroleum-products/charts/net-imports-petroleum-shares-consumption":257,"../oil-and-petroleum-products/charts/net-petroleum-imports-by-type":258,"../oil-and-petroleum-products/charts/petroleum-consumption":259,"../oil-and-petroleum-products/charts/petroleum-imports":260,"../oil-and-petroleum-products/charts/refiner-acquisition-cost":261,"../oil-and-petroleum-products/charts/refiner-blender-net-production":262,"../oil-and-petroleum-products/charts/refiner-blender-netinput-by-type-share-total":263,"../oil-and-petroleum-products/charts/top-crude-oil-producing-states":264,"../oil-and-petroleum-products/charts/top-oil-countries":265,"../renewable-sources/charts/portfolio-standards-and-goals":266,"../renewable-sources/charts/renewable-energy-consumption-major-sources":267,"../solar/charts/small-scale-photovoltaic-generation":268,"../solar/charts/utility-scale-generation":269,"../us-energy-facts/charts/energy-net-imports-by-major-sources-totals":270,"../us-energy-facts/charts/import-exports-primary-energy-overview":271,"../us-energy-facts/charts/primary-consumption-by-major-source":272,"../us-energy-facts/charts/primary-energy-production-by-major-source-history":273,"../us-energy-facts/charts/primary-energy-production-by-major-sources":274,"../us-energy-facts/charts/state-energy-data-system-map":275,"../us-energy-facts/charts/state-energy-profile-map":276,"../use-of-energy/charts/air-conditioning-year-constructed":277,"../use-of-energy/charts/commercial-bldgs-intensity-trend":278,"../use-of-energy/charts/commercial-building-floorspace-by-census-region":279,"../use-of-energy/charts/commercial-buildings-by-major-end-uses":280,"../use-of-energy/charts/commercial-buildings-census-region-energy-use-type":281,"../use-of-energy/charts/commercial-buildings-electricity-end-uses":282,"../use-of-energy/charts/commercial-buildings-electricity-natgas-use":283,"../use-of-energy/charts/commercial-buildings-energy-end-use-type":284,"../use-of-energy/charts/commercial-buildings-energy-use-type":285,"../use-of-energy/charts/commercial-buildings-floorspace":286,"../use-of-energy/charts/commercial-buildings-fuel-use":287,"../use-of-energy/charts/commercial-buildings-number":288,"../use-of-energy/charts/commercial-buildings-types-intensity":289,"../use-of-energy/charts/consumption-home-census-region":290,"../use-of-energy/charts/consumption-of-electricity-has-generally-declined":291,"../use-of-energy/charts/electricity-use-commercial-buildings-by-major-enduse":292,"../use-of-energy/charts/end-use-consumption-by-housing-type":293,"../use-of-energy/charts/energy-consumption-by-end-use-sectors":294,"../use-of-energy/charts/energy-consumption-commercial-buildings-by-census-region":295,"../use-of-energy/charts/energy-indicators-absolute":296,"../use-of-energy/charts/energy-indicators-index":297,"../use-of-energy/charts/energy-indicators-ratio":298,"../use-of-energy/charts/energy-use-by-type-commercial-building":299,"../use-of-energy/charts/ev-cars-projections":300,"../use-of-energy/charts/industrial-sector-energy-consumption-by-type-industry":301,"../use-of-energy/charts/industrial-sector-energy-use-by-source":302,"../use-of-energy/charts/major-energy-sources-used-in-commercial-buildings":303,"../use-of-energy/charts/motor-gasoline-consumption-trans-light-fuel":304,"../use-of-energy/charts/percentage-of-homes-with-refrigerators-freezers":305,"../use-of-energy/charts/residential-energy-consumption-by-source":306,"../use-of-energy/charts/residential-site-electricity-consumption-by-enduse":307,"../use-of-energy/charts/total-energy-consumption-by-end-use-sector":309,"../use-of-energy/charts/total-energy-consumption-by-end-use-sector-column":308,"../use-of-energy/charts/total-fuel-consumption-in-manufacturing":310,"../use-of-energy/charts/transportation-by-type":311,"../use-of-energy/charts/transportation-energy-source-fuels":312,"../use-of-energy/charts/us-average-by-census-region-selected-years":313,"../use-of-energy/charts/us-energy-used-for-transportation":314,"../use-of-energy/charts/us-households-total-by-census-region":315,"../wind/charts/generation-share-total":316,"../wind/charts/top-wind-states":317,"../wind/charts/utility-scale-wind-generation":318,"./energy_calculator":237,"./svgExport":238,"@highcharts/map-collection/countries/us/custom/us-small.topo.json":1,"@highcharts/map-collection/countries/us/us-all.topo.json":2,"blueimp-canvas-to-blob":11,"eia-highcharts-modules/eia-theme":17,"eia-highcharts-modules/maps/us-small-with-offshore.geo.json":18,"es6-shim":85,"es7-shim":97,"highcharts":110,"highcharts/highcharts-more":109,"highcharts/modules/accessibility":111,"highcharts/modules/data":112,"highcharts/modules/exporting":113,"highcharts/modules/map":114,"proj4":138}],234:[function(require,module,exports){
44533const numeral = require('numeral');
44534
44535exports.convertForm = function(form) {
44536    let firstValue = 0;
44537    let initialPosition = 0;
44538    let noEntries = true;
44539    // select all child elements of formSection
44540    const formChildren = form.target.children;
44541
44542    for (let i = 1; i < 5; i++) {
44543        // Find first non-blank entry; if multiple entries, clearForm and return false
44544        if (
44545            formChildren[i].firstElementChild.value !== null &&
44546            formChildren[i].firstElementChild.value.length !== 0 &&
44547            noEntries
44548        ) {
44549            initialPosition = i;
44550            firstValue =
44551                formChildren[i].firstElementChild.value /
44552                determineFactor(i, formChildren);
44553            noEntries = false;
44554        } else if (formChildren[i].firstElementChild.value.length !== 0) {
44555            clearForm(form);
44556            return false;
44557        }
44558    }
44559
44560    if (firstValue === 0) {
44561        clearForm(form);
44562        return false;
44563    }
44564
44565    for (let j = 1; j < 5; j++) {
44566        if (j === initialPosition) {
44567            formChildren[j].firstElementChild.value = formatNumber(
44568                formChildren[j].firstElementChild.value
44569            );
44570        } else {
44571            formChildren[j].firstElementChild.value = calculateValue(
44572                firstValue,
44573                determineFactor(j, formChildren)
44574            );
44575        }
44576    }
44577    return true;
44578};
44579
44580const calculateValue = (exports.calculateValue = function(firstValue, factor) {
44581    const valueToFormat = '' + firstValue * factor;
44582    return formatNumber(valueToFormat);
44583});
44584
44585function formatNumber(valueToFormat) {
44586    // sceintific notation if >= 10 digits, regular digits with commas + decimal places otherwise
44587    return valueToFormat.length > 20 || +valueToFormat < 0.001
44588        ? numeral(valueToFormat).format('0,0e+0')
44589        : numeral(valueToFormat).format('0,0.[000]');
44590}
44591
44592function determineFactor(position, formChildren) {
44593    // 1st inputs always / by 1, all other factors are value of hidden lastChild input tag
44594    return position === 1 ? 1 : formChildren[position].lastElementChild.value;
44595}
44596
44597const clearForm = (exports.clearForm = function(form) {
44598    // select all child elements of formSection
44599    const formChildren = isFormSelector(form)
44600        ? form.target.children
44601        : form.target.parentElement.parentElement.children;
44602
44603    //set all first inputs in that section to empty string
44604    for (let i = 1; i < 5; i++) {
44605        formChildren[i].firstElementChild.value = '';
44606    }
44607    return true;
44608});
44609
44610function isFormSelector(event) {
44611    return event.target.matches
44612        ? event.target.matches('form')
44613        : event.target.msMatchesSelector('form');
44614}
44615
44616},{"numeral":120}],235:[function(require,module,exports){
44617module.exports = function setCreditSizeAndPosition() {
44618
44619	if($('.highcharts-credits', this.container).get(0) !== undefined) {
44620		
44621		var creditsElem = $('.highcharts-credits', this.container).get(0);
44622		var initialCreditsBoxHeight = creditsElem.getBBox().height;
44623		this.lastCreditsBoxHeight =
44624			this.lastCreditsBoxHeight === undefined
44625				? initialCreditsBoxHeight
44626				: this.lastCreditsBoxHeight;
44627		var initialBottomSpacing = this.spacing[2];
44628
44629		// Container width - spacingLeft - spacingRight
44630		var desiredWidth =
44631			$(this.container).width() -
44632			this.spacing[1] -
44633			this.spacing[3] -
44634			this.credits.alignOptions.x +
44635			'px';
44636
44637		// check to avoid infinite loop and error resulting from exceeding the maximum call stack
44638		if (desiredWidth !== this.credits.styles.width) {
44639			this.update({
44640				credits: {
44641					style: {
44642						width: desiredWidth
44643					}
44644				}
44645			});
44646			// prevent credits cutoff on small screens
44647			if ($(this.container).width() < 400) {
44648				this.update({
44649					credits: {
44650						style: {
44651							'font-size': '9.7px'
44652						}
44653					}
44654				});
44655			}
44656		}
44657
44658		// the old element is destroyed and a new element is created by the previous update, get it again		
44659		creditsElem = $('.highcharts-credits', this.container).get(0);
44660		
44661		var heightChange = this.lastCreditsBoxHeight - creditsElem.getBBox().height;
44662		this.lastCreditsBoxHeight = creditsElem.getBBox().height; 
44663
44664		// check to avoid infinite loop and error resulting from exceeding the maximum call stack
44665		if (heightChange) {
44666			this.update({
44667				credits: {
44668					position: {
44669						y: this.credits.alignOptions.y + heightChange
44670					}
44671				},
44672				chart: {
44673					spacingBottom: initialBottomSpacing - heightChange
44674				}
44675			});
44676		}
44677	}
44678	else if($('.highcharts-caption', this.container).get(0) !== undefined) {
44679		
44680		var captionElem = $('.highcharts-caption', this.container).get(0);
44681		var chartID = $(this.container).get(0).id;
44682
44683		// Container width - spacingLeft - spacingRight
44684		var desiredWidth =
44685			$(this.container).width() -
44686			this.spacing[1] -
44687			this.spacing[3] -
44688			this.caption.alignOptions.x +
44689			'px';
44690
44691		
44692		// check to avoid infinite loop and error resulting from exceeding the maximum call stack
44693		if (desiredWidth !== $(this.container).width()) {
44694			$('#' + chartID + ' .highcharts-caption').css('width', desiredWidth);
44695		}
44696	}
44697};
44698},{}],236:[function(require,module,exports){
44699module.exports = function (csv) {
44700    var output = [];
44701
44702    function parseField(remainingText) {
44703        var ret = {
44704            remainingText: "",
44705            field: "",
44706            endOfLine: false
44707        },
44708            fieldParsed = false,
44709            i = 0,
44710            startsWithQuote = remainingText[0] === "\"";
44711
44712        if (startsWithQuote) {
44713            i++;
44714        }
44715
44716        while (!fieldParsed && i < remainingText.length) {
44717            if (remainingText[i] === "\"" && !startsWithQuote) {
44718                // Invalid format
44719                throw 'Invalid format. Fields not surrounded by double-quotes cannot contain double-quotes';
44720            }
44721            else if (startsWithQuote && remainingText[i] === "\"") {
44722                if (i === (remainingText.length - 1) || remainingText[i + 1] === "\n" || (remainingText[i + 1] === "\r" && remainingText[i + 2] === "\n")) {
44723                    // end of row or file
44724                    ret.endOfLine = true;
44725                    fieldParsed = true;
44726                    if ((remainingText[i + 1] === "\r" && remainingText[i + 2] === "\n")) {
44727                        i++;
44728                    }
44729                    i++;
44730                }
44731                else if (remainingText[i + 1] === "\"") {
44732                    // Handle escaped double-quotes
44733                    ret.field += "\"";
44734                    i++;
44735                }
44736                else if (remainingText[i + 1] === ",") {
44737                    // end of field
44738                    fieldParsed = true;
44739                    i++;
44740                }
44741                else {
44742                    // Invalid format
44743                    throw 'Invalid format. Unescaped double-quote detected.';
44744                }
44745            }
44746            else if (!startsWithQuote && remainingText[i] === ",") {
44747                // end of field, not enclosed by quotes
44748                fieldParsed = true;
44749            }
44750            else if (!startsWithQuote && (remainingText[i] === "\n" || (remainingText[i] === "\r" && remainingText[i + 1] === "\n"))) {
44751                // end of row, not enclosed by quotes
44752                ret.endOfLine = true;
44753                if ((remainingText[i] === "\r" && remainingText[i + 1] === "\n")) {
44754                    i++;
44755                }
44756                fieldParsed = true;
44757            }
44758            else {
44759                // nothing special
44760                ret.field += remainingText[i];
44761            }
44762
44763            i++;
44764        }
44765        ret.remainingText = remainingText.substr(i);
44766        return ret;
44767    }
44768
44769    var remainingCSV = csv, parsedField;
44770
44771    output.push([]);
44772
44773    while (remainingCSV.length > 0) {
44774        parsedField = parseField(remainingCSV);
44775
44776        output[output.length - 1].push(parsedField.field);
44777
44778        if (parsedField.endOfLine) {
44779            output.push([]);
44780        }
44781        remainingCSV = parsedField.remainingText;
44782    }
44783
44784    return output;
44785};
44786},{}],237:[function(require,module,exports){
44787const calculatorMethods = require('./calculatorMethods')
44788
44789module.exports = function () {
44790	// select an element unique to this page
44791	const foodCalculator = document.getElementById('foodCalculator');
44792
44793	// select document + window
44794	const calculatorDoc = foodCalculator.ownerDocument;
44795
44796	calculatorDoc.addEventListener('click', function (event) {
44797		let matches;
44798		if (event.target.matches) {
44799			matches = event.target.matches('input[type=text]') || event.target.matches('button[type=reset]');
44800		} else {
44801			matches = event.target.msMatchesSelector('input[type=text]') || event.target.msMatchesSelector('button[type=reset]'); // IE Support
44802		}
44803
44804		if (matches) {
44805			calculatorMethods.clearForm(event);
44806		}
44807
44808	}, false);
44809
44810	calculatorDoc.addEventListener('submit', function (event) {
44811		let matches;
44812		if (event.target.matches) {
44813			matches = event.target.matches('form');
44814		} else {
44815			matches = event.target.msMatchesSelector('form'); // IE Support
44816		}
44817
44818		if (matches) {
44819			event.preventDefault()
44820			calculatorMethods.convertForm(event);
44821		}
44822	}, false);
44823}
44824
44825},{"./calculatorMethods":234}],238:[function(require,module,exports){
44826function triggerDownload(imgURI) {
44827  var a = document.createElement('a');
44828  a.download = 'image.png'; // filename
44829  a.target = '_blank';
44830  a.href = imgURI;
44831
44832  // trigger download button
44833  // (set `bubbles` to false here.
44834  // or just `a.click()` if you don't care about bubbling)
44835  a.dispatchEvent(new MouseEvent('click', {
44836    view: window,
44837    bubbles: false,
44838    cancelable: true
44839  }));
44840}
44841var svgImages = document.querySelectorAll('.svg-image-download');
44842
44843if(svgImages.length > 0) {
44844	svgImages.forEach((exportButton) => {
44845		exportButton.addEventListener('click', function () {
44846		  var svgNode = document.querySelector('#'+exportButton.nextElementSibling.id);
44847		  var svgString = (new XMLSerializer()).serializeToString(svgNode);
44848		  var svgBlob = new Blob([svgString], {
44849			type: 'image/svg+xml;charset=utf-8'
44850		  });
44851
44852		  var DOMURL = window.URL || window.webkitURL || window;
44853		  var url = DOMURL.createObjectURL(svgBlob);
44854
44855		  var image = new Image();
44856		  image.width = svgNode.width.baseVal.value;
44857		  image.height = svgNode.height.baseVal.value;
44858		  image.src = url;
44859		  image.onload = function () {
44860			// get the size of the svg image
44861			var { width, height } = svgNode.getBBox();
44862			width = width*3;
44863			height = height*3;
44864			// create a canvas and set its size
44865			var canvas = document.createElement('canvas');
44866			canvas.setAttribute('width', width);
44867			canvas.setAttribute('height', height);
44868
44869			var ctx = canvas.getContext('2d');
44870			ctx.drawImage(image, 0, 0, width, height);
44871			DOMURL.revokeObjectURL(url);
44872
44873			var imgURI = canvas
44874			  .toDataURL('image/png');
44875			triggerDownload(imgURI);
44876		  };
44877		});
44878	});
44879}
44880
44881
44882
44883},{}],239:[function(require,module,exports){
44884const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
44885const csvParser = require('../../includes/csvParser');
44886
44887
44888module.exports = function (Highcharts, map, appPath) {
44889
44890    const elementId = 'average-annual-residential-natgas-prices-by-state';
44891    //let mapData = Highcharts.geojson(map);
44892
44893    // Our own options definition as two different series, will populate the data in the complete callback
44894    var seriesOptions = [
44895        {
44896            id: "rank1",
44897            type: "map",
44898            mapData : Highcharts.geojson(map, 'map'),
44899            allAreas: false,
44900            keys: ["postal-code"],
44901            joinBy: ['hc-a2', 'code'],
44902            data: [],
44903			borderWidth: 0.5,
44904            states: {
44905                hover: {
44906                    brightness: 0,
44907					borderWidth: 1,
44908					borderColor: Highcharts.eiaColors.darkGrey
44909                }
44910            },
44911            dataLabels: {
44912                enabled: true,
44913                formatter: function () {
44914                    if (this.point.properties) {
44915                        return this.point.properties['hc-a2'];
44916                    }
44917                    return this.point.options.ucName;
44918                },
44919                style: {
44920                    fontSize: '10px'
44921                }
44922            },
44923            tooltip: {
44924                valueSuffix: ''
44925            }
44926        },
44927        {
44928            type: 'mapline',
44929            mapData : Highcharts.geojson(map, 'mapline'),
44930            colorAxis : false,
44931            color: 'silver',
44932            nullColor : 'silver',
44933			lineWidth: 1,
44934            showInLegend: false,
44935			enableMouseTracking: false,
44936            states : {
44937                inactive : {
44938                    enabled : false
44939                }
44940            }
44941        }
44942    ];
44943
44944    if ($('#' + elementId).length > 0) {
44945        Highcharts.mapChart(elementId, {
44946            chart: {
44947                map: map,
44948                spacingBottom: 25,
44949                events: {
44950                    load: creditsSizeAndPosition,
44951                    redraw: creditsSizeAndPosition
44952                }
44953            },
44954            mapView : {
44955                insetOptions : {
44956                    borderWidth : 1,
44957                    borderColor : 'silver'
44958                }
44959            },
44960			credits: {
44961                enabled: false,
44962                href: null,
44963                style: {
44964                    cursor: 'normal'
44965                }
44966            },
44967			caption: {
44968				verticalAlign: 'bottom',
44969				useHTML: true,
44970				margin: 0,
44971				style: {
44972					color: '#888',
44973					fontSize: '11px'
44974				},
44975				x: 32,
44976				y: 33
44977			},
44978            tooltip: {
44979                enabled: true,
44980                useHTML: true,
44981                formatter: function () {
44982                    var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : '';
44983                    if (html !== '')
44984                        return html
44985                }
44986            },
44987            data: {
44988                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
44989                startRow: 5,
44990				firstRowAsNames: false,
44991                complete: function (options) {
44992                    var point;
44993                    var i;
44994
44995                    for (i = 0; i < options.series[0].data.length; i++) {
44996
44997                        point = options.series[0].data[i];
44998                        var pointValueString = '$' + Highcharts.numberFormat(point.value, 2);
44999
45000                        if (pointValueString) {
45001                            seriesOptions[0].data.push({
45002								code: point.name,
45003								nameCode: "<span>" + pointValueString + "</span>",
45004								value: Highcharts.numberFormat(point.value, 2)
45005							});
45006                        }
45007
45008                    }
45009
45010                    // replace series options parsed by Highcharts with our own options definition
45011                    options.series = seriesOptions;
45012
45013                },
45014                beforeParse: function (csv) {
45015
45016                    var parsedCSV = csvParser(csv);
45017                    this.chart.title.update({ text: parsedCSV[0][0] });
45018                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span><br/>' });
45019                    this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
45020
45021
45022                    this.chart.update(
45023                        {
45024							accessibility: {
45025								description: parsedCSV[4][0]
45026							},
45027                            exporting: {
45028								allowHTML: true,
45029                                menuItemDefinitions:
45030                                {
45031                                    label: {
45032                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
45033                                    }
45034                                },
45035                                buttons: {
45036                                    contextButton: {
45037                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
45038                                    }
45039                                }
45040                            }
45041                        }
45042                    );
45043                    return csv;
45044                }
45045            },
45046			colorAxis: {
45047                dataClasses: [{
45048                    color: Highcharts.eiaColors.blue,
45049					from: 7.00,
45050                    to: 8.99
45051                }, {
45052                    color: '#66C0E7',
45053					from: 9.00,
45054                    to: 10.99
45055                }, {
45056					color: '#CCEAF7',
45057                    from: 11.00,
45058                    to: 12.99
45059                }, {
45060					color: '#FFF4CC',
45061                    from: 13.00,
45062                    to: 14.99
45063                }, {
45064					color: '#FFDD67',
45065                    from: 15.00
45066                }]
45067            },
45068            legend: {
45069                align: 'center',
45070                backgroundColor: 'white',
45071                borderColor: 'white',
45072                layout: 'horizontal',
45073                symbolPadding: 10,
45074				symbolRadius: 0,
45075				valueDecimals: 2,
45076				labelFormatter: function () {
45077
45078                    if (this.to === undefined) {
45079
45080						return '> $' + Highcharts.numberFormat(this.from, 2);
45081                    }
45082					else {
45083						return '$' + Highcharts.numberFormat(this.from, 2) + ' - $' + Highcharts.numberFormat(this.to, 2);
45084					}
45085                }
45086            },
45087			responsive: {
45088				rules: [{
45089					condition: {
45090						maxWidth: 321
45091					},
45092					
45093					chartOptions: {
45094						chart: {
45095							height: 330
45096						},
45097						title: {
45098							margin: 5
45099						}
45100					}
45101				},
45102				{
45103					condition: {
45104						minWidth: 322,
45105						maxWidth: 400
45106					},
45107					
45108					chartOptions: {
45109						chart: {
45110							height: 350
45111						},
45112						title: {
45113							margin: 5
45114						}
45115					}
45116				},
45117				{
45118					condition: {
45119						minWidth: 401,
45120						maxWidth: 450
45121					},
45122					
45123					chartOptions: {
45124						chart: {
45125							height: 380
45126						},
45127						title: {
45128							margin: 5
45129						}
45130					}
45131				},
45132				{
45133					condition: {
45134						minWidth: 451
45135					},
45136					
45137					chartOptions: {
45138						chart: {
45139							height: '65%'
45140						},
45141						title: {
45142							margin: 15
45143						}
45144					}
45145				}]
45146			}
45147        });
45148    }
45149};
45150
45151},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],240:[function(require,module,exports){
45152const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
45153const csvParser = require('../../includes/csvParser');
45154
45155module.exports = function (Highcharts, appPath) {
45156    const elementId = 'average-wellhead-citygate-residential-prices';
45157    var units = '';
45158
45159    if ($('#' + elementId).length > 0) {
45160        Highcharts.chart(elementId, {
45161            chart: {
45162                type: 'line',
45163                spacingBottom: 25,
45164                events: {
45165                    load: creditsSizeAndPosition,
45166                    redraw: creditsSizeAndPosition
45167                }
45168            },
45169			credits: {
45170                enabled: true,
45171                href: null,
45172                style: {
45173                    cursor: 'normal'
45174                }
45175            },
45176            data: {
45177                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
45178                startRow: 5,
45179                firstRowAsNames: true,
45180                beforeParse: function (csv) {
45181                    var parsedCSV = csvParser(csv);
45182                    this.chart.title.update({ text: parsedCSV[0][0] });
45183                    units = parsedCSV[1][0];
45184                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
45185                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
45186                    this.chart.update(
45187                        {
45188							accessibility: {
45189								description: parsedCSV[4][0],
45190							},
45191                            exporting: {
45192                                menuItemDefinitions:
45193                                {
45194                                    label: {
45195                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
45196                                    }
45197                                },
45198                                buttons: {
45199                                    contextButton: {
45200                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
45201                                    }
45202                                }
45203                            }
45204                        }
45205                    );
45206                    return csv;
45207                }
45208            },
45209            xAxis: {
45210                labels: {
45211                    format: "{value}",
45212                },
45213                tickInterval: 5,
45214                startOnTick: true,
45215                minPadding: 0,
45216                maxPadding: 0
45217            },
45218            yAxis: {
45219                tickInterval: 2,
45220                labels: {
45221                    format: "${value:.2f}"
45222                }
45223            },
45224            tooltip: {
45225                useHTML: true,
45226                shared: true,
45227                formatter: function () {
45228                    var html = '<b>' + this.x + '</b><br/>';
45229                    this.points.filter(function (value) {
45230                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> $' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>';
45231                    });
45232                    return html;
45233                }
45234            },
45235            responsive: {
45236                rules: [{
45237                    condition: {
45238                        maxWidth: 450
45239                    },
45240                    chartOptions: {
45241						chart: {
45242							height: 410
45243						}
45244                    }
45245                },
45246				{
45247					condition: {
45248						minWidth: 451
45249					},
45250					
45251					chartOptions: {
45252						chart: {
45253							height: '65%'
45254						}
45255					}
45256				}]
45257            }
45258        });
45259    }
45260};
45261
45262},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],241:[function(require,module,exports){
45263const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
45264const csvParser = require('../../includes/csvParser');
45265
45266module.exports = function (Highcharts, appPath) {
45267    const elementId = 'comsumption-by-sector-area-chart';
45268    var units = '';
45269
45270    if ($('#' + elementId).length > 0) {
45271        Highcharts.chart(elementId, {
45272            chart: {
45273                type: 'area',
45274                spacingBottom: 30,
45275                events: {
45276                    load: creditsSizeAndPosition,
45277                    redraw: creditsSizeAndPosition
45278                }
45279            },
45280			credits: {
45281                enabled: true,
45282                href: null,
45283                style: {
45284                    cursor: 'normal'
45285                }
45286            },
45287            data: {
45288                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
45289                startRow: 5,
45290                firstRowAsNames: true,
45291                beforeParse: function (csv) {
45292                    var parsedCSV = csvParser(csv);
45293                    this.chart.title.update({ text: parsedCSV[0][0] });
45294                    units = parsedCSV[1][0];
45295                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
45296                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
45297                    this.chart.update(
45298                        {
45299							accessibility: {
45300								description: parsedCSV[4][0],
45301							},
45302                            exporting: {
45303                                menuItemDefinitions:
45304                                {
45305                                    label: {
45306                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
45307                                    }
45308                                },
45309                                buttons: {
45310                                    contextButton: {
45311                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
45312                                    }
45313                                }
45314                            }
45315                        }
45316                    );
45317                    return csv;
45318                }
45319            },
45320            colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue, Highcharts.eiaColors.red],
45321            xAxis: {
45322                labels: {
45323                    format: "{value}",
45324                },
45325                tickInterval: 5,
45326                startOnTick: true,
45327                minPadding: 0,
45328                maxPadding: 0
45329            },
45330            yAxis: {
45331                reversedStacks: false,
45332                tickInterval: 5,
45333                labels: {
45334                    format: "{value}"
45335                }
45336            },
45337            plotOptions: {
45338                series: {
45339                    stacking: 'normal'
45340                }
45341            },
45342            legend: {
45343                reversed: false
45344            },
45345            tooltip: {
45346                useHTML: true,
45347                shared: true,
45348                formatter: function () {
45349                    var html = '<b>' + this.x + '</b><br/>';
45350                    this.points.filter(function (value) {
45351                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>';
45352                    });
45353                    return html;
45354                }
45355            },
45356            responsive: {
45357                rules: [{
45358                    condition: {
45359                        maxWidth: 450
45360                    },
45361                    chartOptions: {
45362						chart: {
45363							height: 410
45364						}
45365                    }
45366                },
45367				{
45368					condition: {
45369						minWidth: 451
45370					},
45371					
45372					chartOptions: {
45373						chart: {
45374							height: '65%'
45375						}
45376					}
45377				}]
45378            }
45379        });
45380    }
45381};
45382
45383},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],242:[function(require,module,exports){
45384const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
45385const csvParser = require('../../includes/csvParser');
45386
45387module.exports = function (Highcharts, appPath) {
45388    const elementId = 'customer-choice-program';
45389    var percentage = [], values = [];
45390    var units1 = '', units2 = '';
45391
45392    if ($('#' + elementId).length > 0) {
45393        Highcharts.chart(elementId, {
45394            chart: {
45395                spacingBottom: 30,
45396                events: {
45397                    load: creditsSizeAndPosition,
45398                    redraw: creditsSizeAndPosition
45399                }
45400            },
45401			credits: {
45402                enabled: false,
45403                href: null,
45404                style: {
45405                    cursor: 'normal'
45406                }
45407            },
45408			caption: {
45409				verticalAlign: 'bottom',
45410				useHTML: true,
45411				margin: 0,
45412				style: {
45413					color: '#888',
45414					fontSize: '11px'
45415				},
45416				x: 32,
45417				y: 39
45418			},
45419			title: {
45420				margin: 25
45421			},
45422            data: {
45423                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
45424                startRow: 5,
45425                firstRowAsNames: true,
45426                complete: function (options) {
45427                    if (options.series.length > 0) {
45428                        options.series[0].type = "column";
45429                        options.series[0].yAxis = 0;
45430                        options.series[1].type = "line";
45431                        options.series[1].yAxis = 1;
45432                        for (var i = 0; i < options.series.length; i++) {
45433                            if (options.series[i].data[0][1] === null) {
45434                                options.series[i].showInLegend = false;
45435                            }
45436                        }
45437                    }
45438                },
45439                beforeParse: function (csv) {
45440                    var parsedCSV = csvParser(csv);
45441					units1 = parsedCSV[1][1];
45442					units2 = parsedCSV[1][2];
45443                    this.chart.title.update({ text: parsedCSV[0][0] });
45444                    this.chart.yAxis[0].update({ title: { text: units1 } });
45445                    this.chart.yAxis[1].update({ title: { text: units2 } });
45446                    this.chart.caption.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
45447                    for (var i = 6; i < parsedCSV.length - 1; i++) {
45448                        values.push(Number(parsedCSV[i][1]));
45449                        percentage.push(parsedCSV[i][2]);
45450                    }
45451                    
45452                    this.chart.update(
45453                        {
45454							accessibility: {
45455								description: parsedCSV[4][0],
45456							},
45457                            exporting: {
45458								allowHTML: true,
45459                                menuItemDefinitions:
45460                                {
45461                                    label: {
45462                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
45463                                    }
45464                                },
45465                                buttons: {
45466                                    contextButton: {
45467                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
45468                                    }
45469                                }
45470                            }
45471                        }
45472                    );
45473                    return csv;
45474                }
45475            },
45476            xAxis: {
45477                labels: {
45478                    format: "{value}",
45479					autoRotation: [0, -45]
45480                },
45481                tickInterval: 1,
45482                type: 'dateTime',
45483                minPadding: 0,
45484                maxPadding: 0
45485            },
45486            yAxis: [{
45487                maxPadding: 0,
45488				alignTicks: false,
45489				tickInterval: 0.5,
45490                labels: {
45491                    format: "{value:.1f}"
45492                }
45493            }, {
45494                gridLineColor: 'none',
45495				opposite: true,
45496				maxPadding: 0,
45497				alignTicks: false,
45498				tickInterval: 5,
45499                labels: {
45500                    format: "{value}%"
45501                }
45502            }],
45503            tooltip: {
45504                useHTML: true,
45505                shared: true,
45506                formatter: function () {
45507                    var html = '<b>' + this.x + '</b><br/>';
45508                    this.points.filter(function (value) {
45509                        const legendItem = value.colorIndex === 1 ? '\u25AC\u2009\u2009' : ' \u25CF\u2004\u2009';
45510                        const sum = value.colorIndex === 1 ? Highcharts.numberFormat(value.y, 0) + '%' : Highcharts.numberFormat(value.y, 2);
45511                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + legendItem + '</span><b>' + value.series.name + ':</b> ' + sum + ' ' + units1 + '<br/>';
45512                    });
45513                    return html;
45514                }
45515            },
45516            responsive: {
45517                rules: [{
45518                    condition: {
45519                        maxWidth: 450
45520                    },
45521                    chartOptions: {
45522						chart: {
45523							height: 500
45524						},
45525						title: {
45526							margin: 35
45527						}
45528                    }
45529                },
45530				{
45531					condition: {
45532						minWidth: 451,
45533						maxWidth: 666
45534					},
45535					
45536					chartOptions: {
45537						chart: {
45538							height: '65%'
45539						},
45540						title: {
45541							margin: 30
45542						}
45543					}
45544				},
45545				{
45546					condition: {
45547						minWidth: 667,
45548						maxWidth: 667
45549					},
45550					
45551					chartOptions: {
45552						chart: {
45553							height: '65%'
45554						},
45555						title: {
45556							margin: 30
45557						}
45558					}
45559				},
45560				{
45561					condition: {
45562						minWidth: 668
45563					},
45564					
45565					chartOptions: {
45566						chart: {
45567							height: '65%'
45568						},
45569						title: {
45570							margin: 35
45571						}
45572					}
45573				}]
45574            }
45575        });
45576    }
45577};
45578
45579},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],243:[function(require,module,exports){
45580const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
45581const csvParser = require('../../includes/csvParser'
45581);
45582
45583module.exports = function (Highcharts, appPath) {
45584    const elementId = 'dry-natgas-production-by-source-refcase';
45585    var units = '';
45586    var projectionLine;
45587
45588    if ($('#' + elementId).length > 0) {
45589        Highcharts.chart(elementId, {
45590            chart: {
45591                type: 'area',
45592                spacingBottom: 30,
45593                events: {
45594                    load: creditsSizeAndPosition,
45595                    redraw: creditsSizeAndPosition
45596                }
45597            },
45598			credits: {
45599                enabled: true,
45600                href: null,
45601                style: {
45602                    cursor: 'normal'
45603                }
45604            },
45605            data: {
45606                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
45607                startRow: 6,
45608                firstRowAsNames: true,
45609
45610                beforeParse: function (csv) {
45611                    var parsedCSV = csvParser(csv);
45612                    this.chart.title.update({ text: parsedCSV[0][0] });
45613                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
45614                    units = parsedCSV[1][0];
45615                    projectionLine = parsedCSV[4][1];
45616					this.chart.xAxis[0].update(
45617						{ 
45618							plotLines: [
45619								{
45620									id: 'Divider',
45621									color: Highcharts.eiaColors.lightGrey,
45622									value: projectionLine,
45623									width: 1,
45624									label: {
45625										text: projectionLine,
45626										rotation: 360,
45627										x: -15,
45628										y: -5,
45629										style: {
45630											color: Highcharts.eiaColors.darkGrey
45631										}
45632									},
45633									zIndex: 8
45634								}
45635							],
45636							plotBands: [
45637								{
45638									id: 'History',
45639									from: parsedCSV[4][0],
45640									to: projectionLine,
45641									color: '#ffffff',
45642									label: {
45643										text: 'history',
45644										align: 'center',
45645										y: -5,
45646										style: {
45647											color: Highcharts.eiaColors.darkGrey
45648										}
45649									}
45650								},
45651								{
45652									id: 'Projections',
45653									from: projectionLine,
45654									to: parsedCSV[4][2],
45655									color: '#ffffff',
45656									label: {
45657										text: 'projections',
45658										align: 'center',
45659										y: -5,
45660										style: {
45661											color: Highcharts.eiaColors.darkGrey
45662										}
45663									}
45664								}
45665							]
45666						}
45667					);
45668                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
45669                    this.chart.update(
45670                        {
45671							accessibility: {
45672								description: parsedCSV[5][0],
45673							},
45674                            exporting: {
45675                                menuItemDefinitions:
45676                                {
45677                                    label: {
45678                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
45679                                    }
45680                                },
45681                                buttons: {
45682                                    contextButton: {
45683                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
45684                                    }
45685                                }
45686                            }
45687                        }
45688                    );
45689                    return csv;
45690                }
45691            },
45692			colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.brown, Highcharts.eiaColors.red, Highcharts.eiaColors.blue, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.yellow],
45693            xAxis: {
45694                labels: {
45695                    format: "{value}",
45696                    type: 'datetime'
45697                },
45698                tickInterval: 5,
45699                startOnTick: true,
45700                minPadding: 0,
45701                maxPadding: 0
45702            },
45703            yAxis: {
45704                tickInterval: 10,
45705                labels: {
45706                    format: "{value:,.0f}"
45707                },
45708				title: {
45709					reserveSpace: false,
45710					align: 'high',
45711					rotation: 0,
45712					textAlign: 'left',
45713					offset: 0,
45714					y: -20
45715				}
45716            },
45717            plotOptions: {
45718                area: {
45719                    stacking: 'normal',
45720                }
45721            },
45722            tooltip: {
45723                useHTML: true,
45724                shared: true,
45725                formatter: function () {
45726                    var html = '<b>' + this.x + '</b><br/>';
45727                    this.points.filter(function (value) {
45728                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>';
45729                    });
45730                    return html;
45731                }
45732            },
45733            responsive: {
45734                rules: [{
45735                    condition: {
45736                        maxWidth: 450
45737                    },
45738                    chartOptions: {
45739						chart: {
45740							height: 500
45741						},
45742                        xAxis: {
45743                            labels: {
45744                                rotate: -45
45745                            }
45746                        }
45747                    }
45748                },{
45749                    condition: {
45750                        minWidth: 451
45751                    },
45752                    chartOptions: {
45753						chart: {
45754							height: '65%'
45755						},
45756                        xAxis: {
45757                            labels: {
45758                                rotate: 0
45759                            }
45760                        }
45761                    }
45762                }]
45763            }
45764        });
45765    }
45766};
45767
45768},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],244:[function(require,module,exports){
45769const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
45770const csvParser = require('../../includes/csvParser');
45771
45772module.exports = function (Highcharts, appPath) {
45773    const elementId = 'lng-imports-exports';
45774    var units = '';
45775
45776    if ($('#' + elementId).length > 0) {
45777        Highcharts.chart(elementId, {
45778            chart: {
45779                type: 'line',
45780                spacingBottom: 30,
45781                events: {
45782                    load: creditsSizeAndPosition,
45783                    redraw: creditsSizeAndPosition
45784                }
45785            },
45786			credits: {
45787                enabled: true,
45788                href: null,
45789                style: {
45790                    cursor: 'normal'
45791                }
45792            },
45793            data: {
45794                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
45795                startRow: 5,
45796                firstRowAsNames: true,
45797                beforeParse: function (csv) {
45798                    var parsedCSV = csvParser(csv);
45799                    this.chart.title.update({ text: parsedCSV[0][0] });
45800                    units = parsedCSV[1][0];
45801                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
45802                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
45803                    this.chart.update(
45804                        {
45805							accessibility: {
45806								description: parsedCSV[4][0],
45807							},
45808                            exporting: {
45809                                menuItemDefinitions:
45810                                {
45811                                    label: {
45812                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
45813                                    }
45814                                },
45815                                buttons: {
45816                                    contextButton: {
45817                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
45818                                    }
45819                                }
45820                            }
45821                        }
45822                    );
45823                    return csv;
45824                }
45825            },
45826            xAxis: {
45827                labels: {
45828                    format: "{value}",
45829                },
45830                tickInterval: 5,
45831                startOnTick: true,
45832                minPadding: 0,
45833                maxPadding: 0
45834            },
45835            yAxis: {
45836                tickInterval: 100,
45837                labels: {
45838                    format: "{value:,.0f}"
45839                },
45840				maxPadding: 0
45841            },
45842            tooltip: {
45843                useHTML: true,
45844                shared: true,
45845                formatter: function () {
45846                    var html = '<b>' + this.x + '</b><br/>';
45847                    this.points.filter(function (value) {
45848                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>';
45849                    });
45850                    return html;
45851                }
45852            },
45853            responsive: {
45854                rules: [{
45855                    condition: {
45856                        maxWidth: 450
45857                    },
45858                    chartOptions: {
45859						chart: {
45860							height: 400
45861						}
45862                    }
45863                },
45864				{
45865					condition: {
45866						minWidth: 451
45867					},
45868					
45869					chartOptions: {
45870						chart: {
45871							height: '65%'
45872						}
45873					}
45874				}]
45875            }
45876        });
45877    }
45878};
45879
45880},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],245:[function(require,module,exports){
45881const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
45882const csvParser = require('../../includes/csvParser');
45883
45884module.exports = function (Highcharts, appPath) {
45885    const elementId = 'monthly-dry-citygate';
45886    let units = '';
45887    if ($('#' + elementId).length > 0) {
45888        Highcharts.chart(elementId, {
45889            chart: {
45890                type: 'line',
45891                spacingBottom: 25,
45892                events: {
45893                    load: creditsSizeAndPosition,
45894                    redraw: creditsSizeAndPosition
45895                }
45896            },
45897			credits: {
45898                enabled: true,
45899                href: null,
45900                style: {
45901                    cursor: 'normal'
45902                }
45903            },
45904            data: {
45905                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
45906                startRow: 6,
45907                firstRowAsNames: true,
45908                complete: function (options) {
45909                    if (options.series.length > 0) {
45910                        options.series[0].yAxis = 0;
45911                        options.series[1].yAxis = 1;
45912                    }
45913                },
45914                beforeParse: function (csv) {
45915                    var parsedCSV = csvParser(csv);
45916                    units = parsedCSV[1][0] + ',' + parsedCSV[2][0];
45917                    this.chart.title.update({ text: parsedCSV[0][0] });
45918                    this.chart.yAxis[0].update({ title: { text: units.split(',')[0] } });
45919                    this.chart.yAxis[1].update({ title: { text: units.split(',')[1] + ',' + units.split(',')[2] } });
45920                    this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] });
45921                    this.chart.update(
45922                        {
45923							accessibility: {
45924								description: parsedCSV[5][0],
45925							},
45926                            exporting: {
45927                                menuItemDefinitions:
45928                                {
45929                                    label: {
45930                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
45931                                    }
45932                                },
45933                                buttons: {
45934                                    contextButton: {
45935                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
45936                                    }
45937                                }
45938                            }
45939                        }
45940                    );
45941                    return csv;
45942                }
45943
45944            },
45945			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
45946            xAxis: {
45947                type: 'category',
45948                startOnTick: true,
45949                endOnTick: false,
45950                tickInterval: 24,
45951				tickWidth: 1,
45952				labels: {
45953					formatter: function() {
45954						return this.value.substring(4);
45955					}
45956				}
45957            },
45958            yAxis: [
45959                {
45960					maxPadding: 0,
45961					alignTicks: false,
45962					tickInterval: 0.5,
45963                    labels: {
45964                        format: "{value:.3f}",
45965						style: { "color": Highcharts.eiaColors.blue }
45966                    },
45967					title: {
45968						style: { "color": Highcharts.eiaColors.blue }
45969					}
45970                },
45971                {
45972
45973                    gridLineColor: 'none',
45974                    opposite: true,
45975					maxPadding: 0,
45976					alignTicks: false,
45977					tickInterval: 1.0,
45978                    labels: {
45979                        format: "${value:.2f}",
45980						style: { "color": Highcharts.eiaColors.brown }
45981                    },
45982					title: {
45983						style: { "color": Highcharts.eiaColors.brown }
45984					}
45985                }
45986            ],
45987            tooltip: {
45988                useHTML: true,
45989                shared: true,
45990                formatter: function () {
45991                    var html = '<b>' + this.points[0].point.name + '</b><br/>';
45992                    this.points.filter(function (value) {
45993                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ';
45994                        if (value.series.name.charAt(0) === 'd') { // starts with d for 'dry production', the first series
45995                            // extracts units from y[0] title
45996                            html += Highcharts.numberFormat(value.y, 3) + ' ' + units.split(',')[0].substring(13) + '<br/>';
45997                        } else {
45998                            // extracts units from y[0] title
45999                            html += "$" + Highcharts.numberFormat(value.y, 2) + ' ' + (units.split(',')[1] + ',' + units.split(',')[2]).substring(16) + '<br/>';
46000                        }
46001                    });
46002                    return html;
46003                }
46004            },
46005            responsive: {
46006                rules: [{
46007                    condition: {
46008                        maxWidth: 450
46009                    },
46010                    chartOptions: {
46011                        chart: {
46012							height: 500
46013						},
46014						xAxis: {
46015							labels: {
46016								autoRotation: [-45],
46017								rotation: -45
46018							}
46019						},
46020                        yAxis: [
46021                            {
46022                                title: {
46023                                    style: {
46024										'fontSize': '11px'
46025									},
46026									align: 'middle',
46027									margin: 8
46028                                }
46029                            },
46030                            {
46031                                title: {
46032                                    style: {
46033										'fontSize': '11px'
46034									},
46035									align: 'middle',
46036									margin: 12,
46037									rotation: 270
46038                                }
46039                            }
46040                        ]
46041                    }
46042                },
46043				{
46044					condition: {
46045						minWidth: 451
46046					},
46047					
46048					chartOptions: {
46049						chart: {
46050							height: '65%'
46051						}
46052                    }
46053                }]
46054            }
46055        });
46056    }
46057};
46058
46059},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],246:[function(require,module,exports){
46060const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
46061const csvParser = require('../../includes/csvParser');
46062
46063module.exports = function (Highcharts, appPath) {
46064    const elementId = 'monthly-shale-production';
46065    const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
46066    var units = '';
46067
46068    if ($('#' + elementId).length > 0) {
46069        Highcharts.chart(elementId, {
46070            chart: {
46071                type: 'area',
46072                spacingBottom: 30,
46073                events: {
46074                    load: creditsSizeAndPosition,
46075                    redraw: creditsSizeAndPosition
46076                }
46077            },
46078			credits: {
46079                enabled: true,
46080                href: null,
46081                style: {
46082                    cursor: 'normal'
46083                }
46084            },
46085            data: {
46086                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
46087                startRow: 5,
46088                firstRowAsNames: true,
46089                complete: function (options) {
46090                    if (options.series.length > 0) {
46091                        options.series[11].color = Highcharts.eiaColors.lightGrey;
46092                        options.series[10].color = Highcharts.eiaColors.red;
46093                        options.series[9].color = Highcharts.eiaColors.lightBrown;
46094                        options.series[8].color = Highcharts.eiaColors.lightGreen;
46095                        options.series[7].color = Highcharts.eiaColors.lightYellow;
46096                        options.series[6].color = Highcharts.eiaColors.lightRed;
46097                        options.series[5].color = Highcharts.eiaColors.brown;
46098                        options.series[4].color = Highcharts.eiaColors.blue;
46099                        options.series[3].color = Highcharts.eiaColors.darkBlue;
46100                        options.series[2].color = Highcharts.eiaColors.orange;
46101                        options.series[1].color = Highcharts.eiaColors.yellow;
46102                        options.series[0].color = Highcharts.eiaColors.green;
46103                    }
46104                },
46105                beforeParse: function (csv) {
46106                    var parsedCSV = csvParser(csv);
46107                    this.chart.title.update({ text: parsedCSV[0][0] });
46108                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
46109                    units = parsedCSV[1][0];
46110                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
46111                    this.chart.update(
46112                        {
46113							accessibility: {
46114								description: parsedCSV[4][0],
46115							},
46116                            exporting: {
46117                                menuItemDefinitions:
46118                                {
46119                                    label: {
46120                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
46121                                    }
46122                                },
46123                                buttons: {
46124                                    contextButton: {
46125                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
46126                                    }
46127                                }
46128                            }
46129                        }
46130                    );
46131                    return csv;
46132                }
46133            },
46134            xAxis: {
46135                type: 'datetime',
46136                labels: {
46137                    enabled: true,
46138                    useHTML: true,
46139                    step: 2,
46140                    formatter: function () {
46141                        const date = new Date(this.value);
46142                        return date.getUTCFullYear();
46143                    }
46144                },
46145                // using simply startOnTick + min/maxPadding to get chart to start at 0 did not work, even in conjunction with tickInterval,
46146                // so I'm using tickPositioner to place the labels properly
46147                tickPositioner: function () {
46148                    const dateMin = this.dataMin;
46149                    const dateMax = this.dataMax;
46150                    const positions = [];
46151                    for (let position = dateMin; position <= dateMax; position += 1000 * 60 * 60 * 24 * 365 * 1.01) {  // increment in 1 year periods
46152                        // slightly >1 to get the intervals perfect (365.25 days in year on avg)
46153                        positions.push(position);
46154                    }
46155                    return positions;
46156                },
46157                // startOnTick: true,
46158                minPadding: 0,
46159                maxPadding: 0
46160            },
46161            yAxis: {
46162                tickInterval: 5,
46163                maxPadding: 0,
46164                labels: {
46165                    format: "{value}"
46166                }
46167            },
46168            plotOptions: {
46169                area: {
46170                    stacking: 'normal',
46171                }
46172            },
46173            tooltip: {
46174                useHTML: true,
46175                shared: true,
46176                formatter: function () {
46177                    const date = new Date(this.x);
46178                    var html = '<b>' + monthNames[date.getUTCMonth()] + '-' + date.getUTCFullYear() + '</b><br/>';
46179                    this.points.filter(function (value) {
46180                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>';
46181                    });
46182                    return html;
46183                }
46184            },
46185            legend: {
46186                reversed: true
46187            },
46188            responsive: {
46189                rules: [{
46190                    condition: {
46191                        maxWidth: 450
46192                    },
46193                    chartOptions: {
46194						chart: {
46195							height: 550
46196						},
46197                        yAxis: {
46198                            tickInterval: 10
46199                        }
46200                    }
46201                },{
46202                    condition: {
46203                        minWidth: 451
46204                    },
46205                    chartOptions: {
46206						chart: {
46207							height: '65%'
46208						}
46209                    }
46210                }]
46211            }
46212        });
46213    }
46214};
46215
46216},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],247:[function(require,module,exports){
46217const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
46218const csvParser = require('../../includes/csvParser');
46219
46220module.exports = function (Highcharts, appPath) {
46221    const elementId = 'nat-gas-consumption-by-sector';
46222    var units = '';
46223
46224    if ($('#' + elementId).length > 0) {
46225        Highcharts.chart(elementId, {
46226            chart: {
46227                type: 'pie',
46228                spacingBottom: 30,
46229                events: {
46230                    load: creditsSizeAndPosition,
46231                    redraw: creditsSizeAndPosition
46232                },
46233                renderTo: {
46234                    id: elementId
46235                }
46236            },
46237			credits: {
46238                enabled: true,
46239                href: null,
46240                style: {
46241                    cursor: 'normal'
46242                }
46243            },
46244            title: {
46245                text: '',
46246				margin: 5
46247            },
46248            data: {
46249                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
46250                startRow: 5,
46251                firstRowAsNames: false,
46252                beforeParse: function (csv) {
46253                    var parsedCSV = csvParser(csv);
46254                    this.chart.title.update({ text: parsedCSV[0][0] });
46255                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
46256                    units = ' ' + parsedCSV[1][0].split(' ')[3] + ' ' + parsedCSV[1][0].split(' ')[4] + ' ' + parsedCSV[1][0].split(' ')[5];
46257                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
46258                    this.chart.update(
46259                        {
46260							accessibility: {
46261								description: parsedCSV[4][0],
46262							},
46263                            exporting: {
46264                                menuItemDefinitions:
46265                                {
46266                                    label: {
46267                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
46268                                    }
46269                                },
46270                                buttons: {
46271                                    contextButton: {
46272                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
46273                                    }
46274                                }
46275                            }
46276                        }
46277                    );
46278                    return csv;
46279                }
46280            },
46281            colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red],
46282            subtitle: {
46283                text: '',
46284                useHTML: true,
46285            },
46286            plotOptions: {
46287                pie: {
46288                    startAngle: 0,
46289                    dataLabels: {
46290                        enabled: true,
46291                        format: "<strong>{point.name}</strong><br>{point.percentage:.0f}%",
46292                        distance: 10,
46293                        color: Highcharts.eiaColors.darkGrey,
46294                        style: {
46295                            "fontSize": "12px"
46296                        }
46297                    }
46298                }
46299            },
46300            tooltip: {
46301                useHTML: true,
46302                formatter: function () {
46303                    return "<span><b>" + this.key + "</b><br/>" + Highcharts.numberFormat(this.percentage, 0) + "%</span><br/>" + Highcharts.numberFormat(this.y, 2) + units;
46304                }
46305            },
46306			responsive: {
46307				rules: [{
46308					condition: {
46309						maxWidth: 450
46310					},
46311					
46312					chartOptions: {
46313						chart: {
46314							height: 410
46315						},
46316						plotOptions: {
46317							pie: {
46318								size: '90%',
46319								dataLabels: {
46320									enabled: false
46321								},
46322								showInLegend: true
46323							}
46324						},
46325						legend: {
46326							enabled: true
46327						}
46328					}
46329				},
46330				{
46331					condition: {
46332						minWidth: 451
46333					},
46334					
46335					chartOptions: {
46336						chart: {
46337							height: '65%'
46338						},
46339						plotOptions: {
46340							pie: {
46341								size: '75%',
46342								dataLabels: {
46343									enabled: true
46344								},
46345								showInLegend: false
46346							}
46347						},
46348						legend: {
46349							enabled: false
46350						}
46351					}
46352				}]
46353			}
46354        });
46355    }
46356};
46357
46358},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],248:[function(require,module,exports){
46359const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
46360const csvParser = require('../../includes/csvParser');
46361
46362module.exports = function (Highcharts, appPath) {
46363    const elementId = 'natgas-imports-exports-netimports';
46364    var units = '';
46365
46366    if ($('#' + elementId).length > 0) {
46367        Highcharts.chart(elementId, {
46368            chart: {
46369                type: 'line',
46370                spacingBottom: 30,
46371                events: {
46372                    load: creditsSizeAndPosition,
46373                    redraw: creditsSizeAndPosition
46374                }
46375            },
46376			credits: {
46377                enabled: true,
46378                href: null,
46379                style: {
46380                    cursor: 'normal'
46381                }
46382            },
46383            data: {
46384                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
46385                startRow: 5,
46386                firstRowAsNames: true,
46387                beforeParse: function (csv) {
46388                    var parsedCSV = csvParser(csv);
46389                    this.chart.title.update({ text: parsedCSV[0][0] });
46390                    units = parsedCSV[1][0];
46391                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
46392                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
46393                    this.chart.update(
46394                        {
46395							accessibility: {
46396								description: parsedCSV[4][0],
46397							},
46398                            exporting: {
46399                                menuItemDefinitions:
46400                                {
46401                                    label: {
46402                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
46403                                    }
46404                                },
46405                                buttons: {
46406                                    contextButton: {
46407                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
46408                                    }
46409                                }
46410                            }
46411                        }
46412                    );
46413                    return csv;
46414                }
46415            },
46416            xAxis: {
46417                labels: {
46418                    format: "{value}",
46419                },
46420                tickInterval: 5,
46421                startOnTick: true,
46422                minPadding: 0,
46423                maxPadding: 0
46424            },
46425            yAxis: {
46426                tickInterval: .5,
46427                labels: {
46428                    format: "{value:.1f}"
46429                },
46430				maxPadding: 0,
46431				minPadding: 0
46432            },
46433            tooltip: {
46434                useHTML: true,
46435                shared: true,
46436                formatter: function () {
46437                    var html = '<b>' + this.x + '</b><br/>';
46438                    this.points.filter(function (value) {
46439                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>';
46440                    });
46441                    return html;
46442                }
46443            },
46444            responsive: {
46445                rules: [{
46446                    condition: {
46447                        maxWidth: 450
46448                    },
46449                    chartOptions: {
46450						chart: {
46451							height: 400
46452						}
46453                    }
46454                },
46455				{
46456					condition: {
46457						minWidth: 451
46458					},
46459					
46460					chartOptions: {
46461						chart: {
46462							height: '65%'
46463						}
46464					}
46465				}]
46466            }
46467        });
46468    }
46469};
46470
46471},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],249:[function(require,module,exports){
46472const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
46473const csvParser = require('../../includes/csvParser');
46474
46475
46476module.exports = function (Highcharts, map, appPath) {
46477
46478    const elementId = 'natgas-proved-reserves-by-statearea';
46479    let note ='';
46480
46481    let mapData = Highcharts.geojson(map, 'map');
46482
46483    // Our own options definition as two different series, will populate the data in the complete callback
46484    var seriesOptions = [
46485        {
46486            id: "rank1",
46487            type: "map",
46488            allAreas: false,
46489            keys: ["postal-code"],
46490            joinBy: ['hc-a2', 'code'],
46491            data: [],
46492            mapData: mapData,
46493			borderWidth: 0.5,
46494			borderColor: '#ffffff',
46495            states: {
46496                hover: {
46497                    brightness: 0,
46498					borderWidth: 1,
46499					borderColor: Highcharts.eiaColors.yellow
46500                }
46501            },
46502            dataLabels: {
46503                enabled: true,
46504                useHTML: true,
46505                allowOverlap : true,
46506                formatter: function () {
46507                    var labelData;
46508                    if (this.point.properties) {
46509                        var regionLabel = this.point.properties['hc-a2'],
46510                            value = '';
46511
46512                        if(this.point.properties['hc-a2'] === 'GOA') {
46513                            regionLabel = 'Gulf of America<br/>Federal Offshore';
46514
46515                        } else if(this.point.properties['hc-a2'] === 'PAC') {
46516                            regionLabel = 'Pacific<br/>Federal<br/>Offshore';
46517                        }
46518
46519                        if (this.point.value === 0.01) {
46520                            regionLabel += '*'
46521                        }
46522                        else if(this.point.value !== 0) {
46523                            value = Highcharts.numberFormat(this.point.value);
46524                        }
46525
46526                        labelData = '<span>' + regionLabel + '</span><br/><span>' + value + '</span>'
46527                    }
46528                    return labelData;
46529                },
46530                style: {
46531                    fontSize: '9px'
46532                }
46533            }
46534        },
46535        {
46536            mapData: Highcharts.geojson(map, 'mapline'),
46537            type: 'mapline',
46538			lineWidth: 1,
46539            color: 'silver',
46540            nullColor: 'silver',
46541            showInLegend: false,
46542			enableMouseTracking: false,
46543            states : {
46544                inactive : {
46545                    enabled : false
46546                }
46547            }
46548        }
46549    ];
46550
46551    if ($('#' + elementId).length > 0) {
46552        Highcharts.mapChart(elementId, {
46553            chart: {
46554                map: map,
46555                spacingBottom: 25,
46556                events: {
46557                    load: creditsSizeAndPosition,
46558                    redraw: creditsSizeAndPosition
46559                }
46560            },
46561            mapView : {
46562                insetOptions : {
46563                    borderWidth : 1,
46564     
46564               borderColor : 'silver'
46565                }
46566            },
46567			credits: {
46568                enabled: false,
46569                href: null,
46570                style: {
46571                    cursor: 'normal'
46572                }
46573            },
46574			caption: {
46575				verticalAlign: 'bottom',
46576				useHTML: true,
46577				margin: 0,
46578				style: {
46579					color: '#888',
46580					fontSize: '11px'
46581				},
46582				x: 32,
46583				y: 33
46584			},
46585            tooltip: {
46586                enabled: true,
46587                useHTML: true,
46588                formatter: function () {
46589                    var tipTool;
46590                    if (this.point.value === 0.01) {
46591                        tipTool = '<b>' + this.key + '</b><br/><span>' + note + '</span>';
46592                    }
46593                    else if (this.point.value === 0) {
46594                        tipTool = '<b>' + this.key + '</b><br/><span></span>';
46595                    }
46596                    else {
46597                        tipTool = '<b>' + this.key + '</b><br/><span>' + Highcharts.numberFormat(this.point.value) + '</span>'
46598                    }
46599
46600                    return tipTool
46601                }
46602            },
46603            data: {
46604                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
46605                startRow: 10,
46606                complete: function (options) {
46607                    var point;
46608                    var i;
46609                    var datum;
46610
46611                    for (i = 0; i < options.series[0].data.length; i++) {
46612                        datum = options.series[0].data[i];
46613
46614                        point = {
46615                            code: datum.name,
46616                            value:  datum.value
46617                        };
46618
46619                        if(datum.name == 'WV'){
46620                            point.dataLabels = {
46621                                y : 5,
46622                                x : -5
46623                            };
46624                        }
46625                        else if(datum.name = 'MS') {
46626                            point.dataLabels = {
46627                                y : -3
46628                            };
46629                        }
46630
46631						seriesOptions[0].data.push(point);
46632
46633                    }
46634					
46635                    // replace series options parsed by Highcharts with our own options definition
46636                    options.series = seriesOptions;
46637
46638                },
46639                beforeParse: function (csv) {
46640
46641                    var parsedCSV = csvParser(csv);
46642                    this.chart.title.update({ text: parsedCSV[0][0] });
46643                    note = parsedCSV[2][0];
46644                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span><br/>' });
46645                    this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
46646
46647                    this.chart.update(
46648                        {
46649							accessibility: {
46650								description: parsedCSV[4][0]
46651							},
46652                            exporting: {
46653								allowHTML: true,
46654                                menuItemDefinitions:
46655                                {
46656                                    label: {
46657                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
46658                                    }
46659                                },
46660                                buttons: {
46661                                    contextButton: {
46662                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
46663                                    }
46664                                }
46665                            }
46666                        }
46667                    );
46668                    return csv;
46669                }
46670            },
46671			colorAxis: {
46672                dataClasses: [{
46673                    color: Highcharts.eiaColors.extraLightGrey,
46674                    to: 0
46675                }, {
46676                    color: Highcharts.eiaColors.extraLightBlue,
46677					from: 0.01,
46678                    to: 1000
46679                }, {
46680					color: Highcharts.eiaColors.lightBlue,
46681                    from: 1000.01,
46682                    to: 5000
46683                }, {
46684					color: Highcharts.eiaColors.blue,
46685                    from: 5000.01,
46686                    to: 20000
46687                }, {
46688					color: Highcharts.eiaColors.darkBlue,
46689                    from: 20000.01
46690                }]
46691            },
46692            legend: {
46693                align: 'center',
46694                backgroundColor: 'white',
46695                borderColor: 'white',
46696                layout: 'horizontal',
46697                symbolPadding: 10,
46698				symbolRadius: 0,
46699				valueDecimals: 0,
46700				labelFormatter: function () {
46701					
46702                    if (this.from === undefined) {
46703                        return this.to;
46704                    }
46705
46706                    else if (this.to === undefined) {
46707
46708                        if (this.chart.colorAxis[0].dataMax !== undefined) {
46709							return '> ' + this.from.toFixed(0) + ' to ' + this.chart.colorAxis[0].dataMax;
46710						}
46711						
46712						return '> ' + this.from.toFixed(0);
46713                    }
46714					else {
46715						return '> ' + this.from.toFixed(0) + ' to ' + this.to;
46716					}
46717                }
46718            },
46719			responsive: {
46720				rules: [{
46721					condition: {
46722						maxWidth: 321
46723					},
46724					
46725					chartOptions: {
46726						chart: {
46727							height: 330
46728						},
46729						title: {
46730							margin: 15
46731						}
46732					}
46733				},
46734				{
46735					condition: {
46736						minWidth: 322,
46737						maxWidth: 400
46738					},
46739					
46740					chartOptions: {
46741						chart: {
46742							height: 350
46743						},
46744						title: {
46745							margin: 15
46746						}
46747					}
46748				},
46749				{
46750					condition: {
46751						minWidth: 401,
46752						maxWidth: 450
46753					},
46754					
46755					chartOptions: {
46756						chart: {
46757							height: 400
46758						},
46759						title: {
46760							margin: 15
46761						}
46762					}
46763				},
46764				{
46765					condition: {
46766						minWidth: 451
46767					},
46768					
46769					chartOptions: {
46770						chart: {
46771							height: '65%'
46772						},
46773						title: {
46774							margin: 15
46775						}
46776					}
46777				}]
46778			}
46779        });
46780    }
46781};
46782
46783},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],250:[function(require,module,exports){
46784const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
46785const csvParser = require('../../includes/csvParser');
46786
46787module.exports = function (Highcharts, appPath) {
46788    const elementId = 'ng-consumption-dryprod-netimports';
46789    var units = '';
46790
46791    if ($('#' + elementId).length > 0) {
46792        Highcharts.chart(elementId, {
46793            chart: {
46794                type: 'line',
46795                spacingBottom: 25,
46796                events: {
46797                    load: creditsSizeAndPosition,
46798                    redraw: creditsSizeAndPosition
46799                }
46800            },
46801			credits: {
46802                enabled: true,
46803                href: null,
46804                style: {
46805                    cursor: 'normal'
46806                }
46807            },
46808            data: {
46809                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
46810                startRow: 5,
46811                firstRowAsNames: true,
46812                beforeParse: function (csv) {
46813                    var parsedCSV = csvParser(csv);
46814                    this.chart.title.update({ text: parsedCSV[0][0] });
46815                    units = parsedCSV[1][0];
46816                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
46817                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
46818                    this.chart.update(
46819                        {
46820							accessibility: {
46821								description: parsedCSV[4][0],
46822							},
46823                            exporting: {
46824                                menuItemDefinitions:
46825                                {
46826                                    label: {
46827                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
46828                                    }
46829                                },
46830                                buttons: {
46831                                    contextButton: {
46832                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
46833                                    }
46834                                }
46835                            }
46836                        }
46837                    );
46838                    return csv;
46839                }
46840            },
46841            xAxis: {
46842                labels: {
46843                    format: "{value}",
46844                },
46845                tickInterval: 5,
46846                startOnTick: true,
46847                minPadding: 0,
46848                maxPadding: 0
46849            },
46850            yAxis: {
46851                tickInterval: 5,
46852                labels: {
46853                    format: "{value}"
46854                },
46855                plotLines: [{
46856                    color: Highcharts.eiaColors.darkGrey,
46857                    width: 1,
46858                    value: 0,
46859                    zIndex: 3
46860                }],
46861				startOnTick: false,
46862				endOnTick: false
46863            },
46864            tooltip: {
46865                useHTML: true,
46866                shared: true,
46867                formatter: function () {
46868                    var html = '<b>' + this.x + '</b><br/>';
46869                    this.points.filter(function (value) {
46870                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>';
46871                    });
46872                    return html;
46873                }
46874            },
46875            responsive: {
46876                rules: [{
46877                    condition: {
46878                        maxWidth: 450
46879                    },
46880                    chartOptions: {
46881						chart: {
46882							height: 400
46883						}
46884                    }
46885                },
46886				{
46887					condition: {
46888						minWidth: 451
46889					},
46890					
46891					chartOptions: {
46892						chart: {
46893							height: '65%'
46894						}
46895					}
46896				}]
46897            }
46898        });
46899    }
46900};
46901
46902},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],251:[function(require,module,exports){
46903const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
46904const csvParser = require('../../includes/csvParser');
46905
46906
46907
46908module.exports = function (Highcharts, map, appPath) {
46909    const elementId = 'top-nat-gas-producing-states';
46910    let note = '';
46911
46912
46913    let mapData = Highcharts.geojson(map, 'map');
46914
46915    // Our own options definition as two different series, will populate the data in the complete callback
46916    var seriesOptions = [
46917        {
46918            id: "rank1",
46919            mapData : mapData,
46920            type: "map",
46921            allAreas: false,
46922            keys: ["postal-code"],
46923            joinBy: ['hc-a2', 'code'],
46924            data: [],
46925            borderWidth: 0.5,
46926            borderColor: '#ffffff',
46927            states: {
46928                hover: {
46929                    brightness: 0,
46930                    borderWidth: 1,
46931                    borderColor: Highcharts.eiaColors.blue
46932                }
46933            },
46934            dataLabels: {
46935                enabled: true,
46936                useHTML: false,
46937                formatter: function () {
46938                    var labelData;
46939                    if (this.point.properties) {
46940                        var regionLabel = this.point.properties['hc-a2'];
46941
46942                        if (this.point.properties['hc-a2'] === 'GOA') {
46943                            regionLabel = 'Gulf of America<br/>Federal Offshore';
46944
46945                        } else if (this.point.properties['hc-a2'] === 'PAC') {
46946                            regionLabel = 'Pacific<br/>Federal<br/>Offshore';
46947                        }
46948
46949                        labelData = '<span>' + regionLabel + '</span>'
46950                    }
46951                    return labelData;
46952                },
46953				style: {
46954                    fontSize: '10px'
46955                }
46956            }
46957        },
46958        {
46959            type: 'mapline',
46960            mapData: Highcharts.geojson(map, 'mapline'),
46961            colorAxis : false,
46962            lineWidth : 1,
46963            color: 'silver',
46964            nullColor : 'silver',
46965            showInLegend: false,
46966			enableMouseTracking: false,
46967            states : {
46968                inactive : {
46969                    enabled : false
46970                }
46971            }
46972        }
46973    ];
46974
46975    if ($('#' + elementId).length > 0) {
46976        let options = {
46977            chart: {
46978                map: map,
46979                spacingBottom: 25,
46980                events: {
46981                    load: creditsSizeAndPosition,
46982                    redraw: creditsSizeAndPosition
46983                }
46984            },
46985            mapView : {
46986                insetOptions : {
46987                    borderWidth : 1,
46988                    borderColor : 'silver'
46989                }
46990            },
46991            credits: {
46992                enabled: false,
46993                href: null,
46994                style: {
46995                    cursor: 'normal'
46996                }
46997            },
46998			caption: {
46999				verticalAlign: 'bottom',
47000				useHTML: true,
47001				margin: 0,
47002				style: {
47003					color: '#888',
47004					fontSize: '11px'
47005				},
47006				x: 32,
47007				y: 33
47008			},
47009            tooltip: {
47010                enabled: true,
47011                useHTML: true,
47012                formatter: function () {
47013                    var tipTool;
47014                    if (this.point.value === 0) {
47015                        tipTool = '<b>' + this.key + '</b><br/><span></span>';
47016                    }
47017                    else {
47018                        tipTool = '<b>' + this.key + '</b><br/><span>' + Highcharts.numberFormat(this.point.value) + '</span>'
47019                    }
47020
47021                    return tipTool
47022                }
47023            },
47024            data: {
47025                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
47026                startRow: 5,
47027				firstRowAsNames: false,
47028                complete: function (options) {
47029                    var point;
47030                    var i;
47031
47032                    for (i = 0; i < options.series[0].data.length; i++) {
47033                        point = options.series[0].data[i];
47034
47035                        seriesOptions[0].data.push({
47036                            code: point.name,
47037                            value: point.value
47038                        });
47039
47040                    }
47041
47042                    // replace series options parsed by Highcharts with our own options definition
47043                    options.series = seriesOptions;
47044
47045                },
47046                beforeParse: function (csv) {
47047
47048                    var parsedCSV = csvParser(csv);
47049                    this.chart.title.update({ text: parsedCSV[0][0] });
47050                    note = parsedCSV[2][0];
47051                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span><br/>' });
47052                    this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
47053
47054                    this.chart.update(
47055                        {
47056							accessibility: {
47057								description: parsedCSV[4][0]
47058							},
47059                            exporting: {
47060								allowHTML: true,
47061                                menuItemDefinitions:
47062                                {
47063                                    label: {
47064                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
47065                                    }
47066                                },
47067                                buttons: {
47068                                    contextButton: {
47069                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
47070                                    }
47071                                }
47072                            }
47073                        }
47074                    );
47075                    return csv;
47076                }
47077            },
47078            colorAxis: [{
47079                dataClasses: [{
47080                    color: Highcharts.eiaColors.extraLightGrey,
47081                    to: 0
47082                }, {
47083                    color: '#e6f5fb',
47084                    from: 0.0001,
47085                    to: 100
47086                }, {
47087                    color: '#bfe5f5',
47088                    from: 100.01,
47089                    to: 1000
47090                }, {
47091                    color: '#73c5e9',
47092                    from: 1000.01,
47093                    to: 2000
47094                }, {
47095                    color: '#0096d7',
47096                    from: 2000.01,
47097                    to: 3000
47098                }, {
47099                    color: '#006997',
47100                    from: 3000.01,
47101                    to: 5000
47102                }, {
47103                    color: '#00354b',
47104                    from: 5000.01,
47105                    to: 10000
47106                }]
47107            }],
47108            legend: {
47109                align: 'center',
47110                backgroundColor: 'white',
47111                borderColor: 'white',
47112                layout: 'horizontal',
47113                itemDistance: 20,
47114                symbolPadding: 4,
47115                symbolRadius: 0,
47116                valueDecimals: 0,
47117                labelFormatter: function () {
47118
47119                    if (this.from === undefined) {
47120                        return '= ' + this.to;
47121                    }
47122                    /*else if (this.to === 100) {
47123                        return '< ' + this.to;
47124                    }
47125                    else if (this.to === undefined) {
47126                        return '> ' + this.from.toFixed(0);
47127                    }*/
47128                    else {
47129                        return this.from.toFixed(0) + ' - ' + this.to;
47130                    }
47131                }
47132            },
47133            responsive: {
47134                rules: [{
47135                    condition: {
47136                        maxWidth: 321
47137                    },
47138
47139                    chartOptions: {
47140                        chart: {
47141                            height: 330
47142                        },
47143                        title: {
47144                            margin: 5
47145                        },
47146                        plotOptions: {
47147                            map: {
47148                                dataLabels: {
47149                                    style: {
47150                                        fontSize: '7px',
47151                                        lineHeight: 7
47152                                    }
47153                                }
47154                            }
47155                        }
47156                    }
47157                },
47158                {
47159                    condition: {
47160                        minWidth: 322,
47161                        maxWidth: 400
47162                    },
47163
47164                    chartOptions: {
47165                        chart: {
47166                            height: 350
47167                        },
47168                        title: {
47169                            margin: 5
47170                        },
47171                        plotOptions: {
47172                            map: {
47173                                dataLabels: {
47174                                    style: {
47175                                        fontSize: '8px',
47176                                        lineHeight: 8
47177                                    }
47178                                }
47179                            }
47180                        }
47181                    }
47182                },
47183                {
47184                    condition: {
47185                        minWidth: 401,
47186                        maxWidth: 450
47187                    },
47188
47189                    chartOptions: {
47190                        chart: {
47191                            height: 380
47192                        },
47193                        title: {
47194                            margin: 5
47195                        },
47196                        plotOptions: {
47197                            map: {
47198                                dataLabels: {
47199                                    style: {
47200                                        fontSize: '8px',
47201                                        lineHeight: 8
47202                                    }
47203                                }
47204                            }
47205                        }
47206                    }
47207                },
47208                {
47209                    condition: {
47210                        minWidth: 451
47211                    },
47212
47213                    chartOptions: {
47214                        chart: {
47215                            height: '65%'
47216                        },
47217                        title: {
47218                            margin: 15
47219                        },
47220                        plotOptions: {
47221                            map: {
47222                                dataLabels: {
47223                                    style: {
47224                                        fontSize: '9px',
47225                                        lineHeight: 9
47226                                    }
47227                                }
47228                            }
47229                        }
47230                    }
47231                }]
47232            }
47233        };
47234        Highcharts.mapChart(elementId, options);
47235    }
47236};
47237
47238},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],252:[function(require,module,exports){
47239const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
47240const csvParser = require('../../includes/csvParser');
47241
47242module.exports = function (Highcharts, appPath) {
47243    const elementId = 'total-natgas-proved-reserves';
47244    var units = '';
47245
47246    if ($('#' + elementId).length > 0) {
47247        Highcharts.chart(elementId, {
47248            chart: {
47249                type: 'line',
47250                spacingBottom: 30,
47251                events: {
47252                    load: creditsSizeAndPosition,
47253                    redraw: creditsSizeAndPosition
47254                }
47255            },
47256			credits: {
47257                enabled: true,
47258                href: null,
47259                style: {
47260                    cursor: 'normal'
47261                }
47262            },
47263            data: {
47264                csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv',
47265                startRow: 5,
47266                firstRowAsNames: true,
47267                beforeParse: function (csv) {
47268                    var parsedCSV = csvParser(csv);
47269                    this.chart.title.update({ text: parsedCSV[0][0] });
47270                    units = parsedCSV[1][0] + ' ' + parsedCSV[1][1]
47271                    this.chart.yAxis[0].update({title:{ text: parsedCSV[1][0] }});
47272                    //this.chart.yAxis[0].update({ title: { text: '' } });
47273                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
47274                    this.chart.update(
47275                        {
47276							accessibility: {
47277								description: parsedCSV[4][0],
47278							},
47279                            exporting: {
47280                                menuItemDefinitions:
47281                                {
47282                                    label: {
47283                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
47284                                    }
47285                                },
47286                                buttons: {
47287                                    contextButton: {
47288                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
47289                                    }
47290                                }
47291                            }
47292                        }
47293                    );
47294                    return csv;
47295                },
47296            },
47297			colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.blue, Highcharts.eiaColors.red],
47298            xAxis: {
47299                labels: {
47300                    format: "{value}",
47301                },
47302                type: 'dateTime',
47303                tickInterval: 5,
47304                startOnTick: true,
47305                minPadding: 0,
47306                maxPadding: 0
47307            },
47308            yAxis: {
47309                tickInterval: 50,
47310                labels: {
47311                    format: "{value}"
47312                }
47313            },
47314            tooltip: {
47315                useHTML: true,
47316                shared: true,
47317                formatter: function () {
47318                    var html = '<b>' + this.x + '</b><br/>';
47319                    this.points.filter(function (value) {
47320                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>';
47321                    });
47322                    return html;
47323                }
47324            },
47325            responsive: {
47326                rules: [{
47327                    condition: {
47328                        maxWidth: 450
47329                    },
47330                    chartOptions: {
47331						chart: {
47332							height: 450
47333						}
47334                    }
47335                },
47336				{
47337					condition: {
47338						minWidth: 451
47339					},
47340					
47341					chartOptions: {
47342						chart: {
47343							height: '65%'
47344						}
47345					}
47346				}]
47347            }
47348        });
47349    }
47350};
47351
47352},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],253:[function(require,module,exports){
47353const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
47354const csvParser = require('../../includes/csvParser');
47355
47356module.exports = function (Highcharts, appPath) {
47357    const elementId = 'available-generating-capacity-annual-basis';
47358    var firstSeries = [];
47359    var secondSeries = [];
47360
47361    (function (Highcharts) {
47362        Highcharts.seriesTypes.pie.prototype.setTitle = function (titleOption) {
47363            var chart = this.chart,
47364                center = this.center || (this.yAxis && this.yAxis.center),
47365                labelBox,
47366                box,
47367                format;
47368
47369            if (center && titleOption) {
47370                box = {
47371                    x: chart.plotLeft + center[0] - 0.5 * center[2],
47372                    y: chart.plotTop + center[1] - 0.5 * center[2],
47373                    width: center[2],
47374                    height: center[2]
47375                };
47376
47377                format = titleOption.text || titleOption.format;
47378                format = Highcharts.format(format, this);
47379
47380                if (this.title) {
47381                    this.title.attr({
47382                        text: format
47383                    });
47384
47385                } else {
47386                    this.title = this.chart.renderer.label(format)
47387                        .css(titleOption.style)
47388                        .add()
47389                }
47390                labelBox = this.title.getBBox();
47391                titleOption.width = labelBox.width;
47392                titleOption.height = labelBox.height;
47393                this.title.align(titleOption, null, box);
47394            }
47395        };
47396
47397        Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'render', function (proceed) {
47398            proceed.call(this);
47399            this.setTitle(this.options.title);
47400        });
47401
47402    }(Highcharts));
47403
47404    if ($('#' + elementId).length > 0) {
47405
47406        var chart = Highcharts.chart(elementId, {
47407            chart: {
47408                spacingBottom: 25,
47409                events: {
47410                    load: creditsSizeAndPosition,
47411                    redraw: creditsSizeAndPosition
47412                }
47413            },
47414			credits: {
47415                enabled: true,
47416                href: null,
47417                style: {
47418                    cursor: 'normal'
47419                }
47420            },
47421            title: {
47422                text: ''
47423            },
47424            data: {
47425                csvURL: appPath + '/nuclear/charts/' + elementId + '.csv',
47426                startRow: 7,
47427                firstRowAsNames: false,
47428                complete: function (options) {
47429                    options.series[0].data = firstSeries;
47430                    var newSeries = JSON.stringify(options.series[0]);
47431                    newSeries = JSON.parse(newSeries);
47432                    newSeries.data = secondSeries;
47433                    options.series.push(newSeries);
47434                },
47435                beforeParse: function (csv) {
47436                    var parsedCSV = csvParser(csv);
47437                    this.chart.title.update({ text: parsedCSV[0][0] });
47438                    this.chart.credits.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0] });
47439
47440                    this.chart.series[0].update(
47441                        {
47442                            name: '<b>' + parsedCSV[4][0] + '</b><br/>' + parsedCSV[5][0]
47443                        }
47444                    );
47445
47446                    this.chart.series[1].update(
47447                        {
47448                            name: '<b>' + parsedCSV[14][0] + '</b><br/>' + parsedCSV[15][0]
47449                        }
47450                    );
47451
47452                    var i = 0;
47453                    for (i = 7; i < parsedCSV.length - 1; i++) {
47454                        if (parsedCSV[i][0] === '') {
47455                            break;
47456                        }
47457                        firstSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]);
47458                    }
47459                    for (i = 17; i < parsedCSV.length - 1; i++) {
47460                        if (parsedCSV[i][0] === '') {
47461                            break;
47462                        }
47463                        secondSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]);
47464                    }
47465
47466                    this.chart.update(
47467                        {
47468							accessibility: {
47469								description: parsedCSV[3][0],
47470							},
47471                            exporting: {
47472                                menuItemDefinitions:
47473                                {
47474                                    label: {
47475                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
47476                                    }
47477                                },
47478                                buttons: {
47479                                    contextButton: {
47480                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
47481                                    }
47482                                }
47483                            }
47484                        }
47485                    );
47486                    return csv;
47487                }
47488            },
47489			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.red, Highcharts.eiaColors.yellow],
47490            subtitle: {
47491                text: '',
47492                useHTML: true,
47493            },
47494            series: [
47495                {
47496                    data: [],
47497                    type: 'pie',
47498                    name: '',
47499                    id: 'pie1',
47500                    size: '40%',
47501                    center: ['25%', '50%'],
47502                    startAngle: 15,
47503                    title: {
47504                        align: 'left',
47505                        format: '<b>{name}</b>',
47506                        verticalAlign: 'top',
47507                        x:0,
47508                        y: -60,
47509                        style: {
47510							color: Highcharts.eiaColors.darkGrey
47511                        }
47512                    }
47513                },
47514                {
47515                    data: [],
47516                    type: 'pie',
47517                    name: '',
47518                    id: 'pie2',
47519                    size: '40%',
47520                    center: ['77%', '50%'],
47521                    title: {
47522                        align: 'right',
47523                        format: '<b>{name}</b>',
47524                        verticalAlign: 'top',
47525                        x:0,
47526                        y: -60,
47527                        style: {
47528							color: Highcharts.eiaColors.darkGrey
47529                        }
47530                    }
47531                }
47532            ],
47533            plotOptions: {
47534                pie: {
47535                    dataLabels: {
47536                        enabled: true,
47537                        format: "<strong>{point.name}</strong><br> {point.percentage:.0f}%",
47538                        distance: 10,
47539                        color: Highcharts.eiaColors.darkGrey,
47540                        style: {
47541                            "fontSize": "12px"
47542                        }
47543                    },
47544                    point: {
47545                        events: {
47546                            legendItemClick: function () {
47547                                for (var i = 0; i < chart.series.length; i++) {
47548                                    if (chart.series[i].points[this.index].visible == true) {
47549                                        chart.series[i].points[this.index].setVisible(false, false);
47550                                    } else {
47551                                        chart.series[i].points[this.index].setVisible(true, false);
47552                                    }
47553                                }
47554                                chart.redraw();
47555                                return false; //needed to stop the normal click from interferring
47556                            }
47557                        }
47558                    }
47559                }
47560            },
47561            tooltip: {
47562                useHTML: true,
47563                formatter: function () {
47564                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>";
47565                }
47566            },
47567            responsive: {
47568                rules: [
47569                    {
47570                        condition: {
47571                            maxWidth: 450
47572                        },
47573                        chartOptions: {
47574                            chart:{
47575                                height:600,
47576                            },
47577                            series:[
47578                                {
47579                                    dataLabels:{
47580                                        enabled:false
47581                                    },
47582                                    showInLegend:true,
47583                                    title: {
47584                                        style: {
47585                                            "fontSize": "12px",
47586                                            wordwrap: 'break-word',
47587                                            width: "200px"
47588                                        },
47589                                        y: -37,
47590                                        x: -46
47591                                    },
47592                                    center: ['50%', '18%']
47593                                },
47594                                {
47595                                    dataLabels:{
47596                                        enabled:false
47597                                    },
47598                                    title: {
47599                                        style: {
47600                                            "fontSize": "12px",
47601                                            wordwrap: 'break-word',
47602                                            width: "200px"
47603                                        },
47604                                        y: -37,
47605                                        x: 20
47606                                    },
47607                                    center: ['50%', '83%']
47608                                }
47609                            ]
47610                        }
47611                    },
47612                    {
47613                        condition: {
47614                            minWidth: 451,
47615							maxWidth: 667
47616                        },
47617                        chartOptions: {
47618                            chart:{
47619                                height: 375
47620                            },
47621							title:{
47622								margin: 0,
47623								spacingBottom: 0
47624							},
47625                            series:[
47626                                {
47627                                    dataLabels:{
47628                                        enabled:true,
47629										distance: 20
47630                                    },
47631                                    showInLegend: false,
47632                                    title: {
47633                                        style: {
47634                                            "fontSize": "12px",
47635                                        },
47636                                        x: -20,
47637										y: -70
47638                                    },
47639                                    center: ['21%', '60%'],
47640									size: '50%'
47641                                },
47642                                {
47643                                    dataLabels:{
47644                                        enabled:true
47645                                    },
47646                                    title: {
47647                                        style: {
47648                                            "fontSize": "12px",
47649                                        },
47650                                        x: 20,
47651										y: -70
47652                                    },
47653                                    center: ['76%', '60%'],
47654									size: '50%'
47655                                }
47656                            ]
47657                        }
47658                    },
47659                    {
47660                        condition: {
47661                            minWidth: 668
47662                        },
47663                        chartOptions: {
47664                            chart:{
47665                                height:'55%',
47666                            },
47667                            series:[
47668                                {
47669                                    dataLabels:{
47670                                        enabled:true,
47671										distance: 20
47672                                    },
47673                                    showInLegend: false,
47674                                    title: {
47675                                        style: {
47676                                            "fontSize": "12px",
47677                                        },
47678                                        x: -20,
47679										y: -70
47680                                    },
47681                                    center: ['22%', '50%'],
47682									size: '65%'
47683                                },
47684                                {
47685                                    dataLabels:{
47686                                        enabled:true
47687                                    },
47688                                    title: {
47689                                        style: {
47690                                            "fontSize": "12px",
47691                                        },
47692                                        x: -20,
47693										y: -70
47694                                    },
47695                                    center: ['76%', '50%'],
47696									size: '65%'
47697                                }
47698                            ]
47699                        }
47700                    }
47701                ]
47702            }
47703        });
47704    }
47705};
47706
47707},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],254:[function(require,module,exports){
47708const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
47709const csvParser = require('../../includes/csvParser');
47710
47711module.exports = function (Highcharts, appPath) {
47712    const elementId = 'generation-capacity-generation';
47713
47714    if ($('#' + elementId).length > 0) {
47715        Highcharts.chart(elementId, {
47716            chart: {
47717                type: 'line',
47718                spacingBottom: 25,
47719                events: {
47720                    load: creditsSizeAndPosition,
47721                    redraw: creditsSizeAndPosition
47722                }
47723            },
47724			credits: {
47725                enabled: true,
47726                href: null,
47727                style: {
47728                    cursor: 'normal'
47729                }
47730            },
47731            data: {
47732                csvURL: appPath + '/nuclear/charts/' + elementId + '.csv',
47733                startRow: 6,
47734                firstRowAsNames: true,
47735                complete: function (options) {
47736                    if (options.series.length > 0) {
47737                        options.series[0].yAxis = 0;
47738                        options.series[1].yAxis = 1;
47739                    }
47740                },
47741                beforeParse: function (csv) {
47742                    var parsedCSV = csvParser(csv);
47743                    this.chart.title.update({ text: parsedCSV[0][0] });
47744                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
47745                    this.chart.yAxis[1].update({ title: { text: parsedCSV[2][0] } });
47746                    this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] });
47747                    this.chart.update(
47748                        {
47749							accessibility: {
47750								description: parsedCSV[5][0],
47751							},
47752                            exporting: {
47753                                menuItemDefinitions:
47754                                {
47755                                    label: {
47756                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
47757                                    }
47758                                },
47759                                buttons: {
47760                                    contextButton: {
47761                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
47762                                    }
47763                                }
47764                            }
47765                        }
47766                    );
47767                    return csv;
47768                }
47769
47770            },
47771			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
47772            xAxis: {
47773                labels: {
47774                    format: "{value}",
47775                },
47776                showLastLabel: true,
47777                startOnTick: true,
47778                tickPositioner: function () {
47779                    const dateMin = this.dataMin;
47780                    const dateMax = this.dataMax;
47781                    const positions = [];
47782                    for (let position = dateMin; position <= dateMax; position += 10) { // increment in 10 year periods
47783                        positions.push(position);
47784                    }
47785                    return positions;
47786                }
47787            },
47788            yAxis: [
47789                {
47790                    maxPadding: 0,
47791					alignTicks: false,
47792                    labels: {
47793                        format: "{value}",
47794						style: { "color": Highcharts.eiaColors.blue }
47795                    },
47796					title: {
47797						style: { "color": Highcharts.eiaColors.blue }	
47798					}
47799                },
47800                {
47801                    tickInterval: 100000,
47802					maxPadding: 0,
47803					alignTicks: false,
47804                    gridLineColor: 'none',
47805                    opposite: true,
47806                    labels: {
47807                        format: "{value:,.0f}",
47808						style: { "color": Highcharts.eiaColors.brown }
47809                    },
47810					title: {
47811						style: { "color": Highcharts.eiaColors.brown }	
47812					}
47813                }
47814            ],
47815            tooltip: {
47816                useHTML: true,
47817                shared: true,
47818                formatter: function () {
47819                    var html = '<b>' + this.x + '</b><br/>';
47820                    this.points.filter(function (value) {
47821                        const units = value.series.yAxis.axisTitle.textStr.substr(value.series.yAxis.axisTitle.textStr.indexOf(" ") + 1); // store units (text after first space)
47822                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y) + ' ' + units + '<br/>';
47823                    });
47824                    return html;
47825                }
47826            },
47827            responsive: {
47828                rules: [{
47829                    condition: {
47830                        maxWidth: 320
47831                    },
47832                    chartOptions: {
47833                        chart: {
47834							height: 500
47835						},
47836                        yAxis: [
47837                            {
47838                                title: {
47839                                    style: {
47840										'fontSize': '11px'
47841									}
47842                                }
47843                            },
47844                            {
47845                                title: {
47846                                    style: {
47847										'fontSize': '11px'
47848									}
47849                                }
47850                            }
47851                        ]
47852                    }
47853                },
47854				{
47855                    condition: {
47856						minWidth: 321,
47857                        maxWidth: 450
47858                    },
47859                    chartOptions: {
47860                        chart: {
47861							height: 500
47862						}
47863                    }
47864                },
47865				{
47866					condition: {
47867						minWidth: 451
47868					},
47869					
47870					chartOptions: {
47871						chart: {
47872							height: '65%'
47873						}
47874					}
47875				}]
47876            }
47877        });
47878    }
47879};
47880
47881},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],255:[function(require,module,exports){
47882const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
47883const csvParser = require('../../includes/csvParser');
47884
47885module.exports = function (Highcharts, appPath) {
47886    const elementId = 'sources-of-uranium';
47887    var units = '';
47888
47889    if ($('#' + elementId).length > 0) {
47890        Highcharts.chart(elementId, {
47891            chart: {
47892                type: 'line',
47893                spacingBottom: 30,
47894                events: {
47895                    load: creditsSizeAndPosition,
47896                    redraw: creditsSizeAndPosition
47897                }
47898            },
47899			credits: {
47900                enabled: true,
47901                href: null,
47902                style: {
47903                    cursor: 'normal'
47904                }
47905            },
47906            data: {
47907                csvURL: appPath + '/nuclear/charts/' + elementId + '.csv',
47908                startRow: 5,
47909                firstRowAsNames: true,
47910                beforeParse: function (csv) {
47911                    var parsedCSV = csvParser(csv);
47912                    this.chart.title.update({ text: parsedCSV[0][0] });
47913                    units = parsedCSV[1][0];
47914                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
47915                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
47916                    this.chart.update(
47917                        {
47918							accessibility: {
47919								description: parsedCSV[4][0],
47920							},
47921                            exporting: {
47922                                menuItemDefinitions:
47923                                {
47924                                    label: {
47925                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
47926                                    }
47927                                },
47928                                buttons: {
47929                                    contextButton: {
47930                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
47931                                    }
47932                                }
47933                            }
47934                        }
47935                    );
47936                    return csv;
47937                }
47938            },
47939            xAxis: {
47940                labels: {
47941                    format: "{value}"
47942                },
47943                tickInterval: 10
47944            },
47945            yAxis: {
47946                tickInterval: 10,
47947                labels: {
47948                    format: "{value}"
47949                }
47950            },
47951            tooltip: {
47952                useHTML: true,
47953                shared: true,
47954                formatter: function () {
47955                    var html = '<b>' + this.x + '</b><br/>';
47956                    this.points.filter(function (value) {
47957                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>';
47958                    });
47959                    return html;
47960                }
47961            },
47962            responsive: {
47963                rules: [{
47964                    condition: {
47965                        maxWidth: 450
47966                    },
47967                    chartOptions: {
47968						chart: {
47969							height: 450
47970						}
47971                    }
47972                },
47973				{
47974					condition: {
47975						minWidth: 451
47976					},
47977					
47978					chartOptions: {
47979						chart: {
47980							height: '65%'
47981						}
47982					}
47983				}]
47984            }
47985        });
47986    }
47987};
47988
47989},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],256:[function(require,module,exports){
47990const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
47991const csvParser = require('../../includes/csvParser');
47992
47993
47994module.exports = function (Highcharts, map, appPath) {
47995
47996    const elementId = 'crude-oil-production';
47997    let note ='';
47998    let mapData = Highcharts.geojson(map, 'map');
47999
48000    // Our own options definition as two different series, will populate the data in the complete callback
48001    var seriesOptions = [
48002        {
48003            id: "rank1",
48004            type: "map",
48005            mapData : mapData,
48006            allAreas: false,
48007            keys: ["postal-code"],
48008            joinBy: ['hc-a2', 'code'],
48009            data: [],
48010            mapData: mapData,
48011			borderWidth: 0.5,
48012			borderColor: '#ffffff',
48013            states: {
48014                hover: {
48015                    brightness: 0,
48016					borderWidth: 1,
48017					borderColor: Highcharts.eiaColors.blue
48018                }
48019            },
48020            dataLabels: {
48021                enabled: true,
48022                useHTML: false,
48023                formatter: function () {
48024                    var labelData;
48025                    if (this.point.properties) {
48026                        var regionLabel = this.point.properties['hc-a2'];
48027
48028                        if(this.point.properties['hc-a2'] === 'GOA') {
48029                            regionLabel = 'Gulf of America<br/>Federal Offshore';
48030
48031                        } else if(this.point.properties['hc-a2'] === 'PAC') {
48032                            regionLabel = 'Pacific<br/>Federal<br/>Offshore';
48033                        }
48034
48035                        labelData = '<span>' + regionLabel + '</span>'
48036                    }
48037                    return labelData;
48038                }
48039            }
48040        },
48041        {
48042            data: Highcharts.geojson(map, 'mapline'),
48043            type: 'mapline',
48044			borderWidth: 0.5,
48045            nullColor : 'silver',
48046            color: 'silver',
48047            lineWidth : 1,
48048            showInLegend: false,
48049			enableMouseTracking: false,
48050            states : {
48051                inactive : {
48052                    enabled : false
48053                }
48054            }
48055        }
48056    ];
48057
48058    if ($('#' + elementId).length > 0) {
48059        Highcharts.mapChart(elementId, {
48060            chart: {
48061                map: map,
48062                spacingBottom: 25,
48063                events: {
48064                    load: creditsSizeAndPosition,
48065                    redraw: creditsSizeAndPosition
48066                }
48067            },
48068            mapView : {
48069                insetOptions : {
48070                    borderWidth : 1,
48071                    borderColor : 'silver'
48072                }
48073            },
48074			credits: {
48075                enabled: false,
48076                href: null,
48077                style: {
48078                    cursor: 'normal'
48079                }
48080            },
48081			caption: {
48082				verticalAlign: 'bottom',
48083				useHTML: true,
48084				margin: 0,
48085				style: {
48086					color: '#888',
48087					fontSize: '11px'
48088				},
48089				x: 32,
48090				y: 33
48091			},
48092            tooltip: {
48093                enabled: true,
48094                useHTML: true,
48095                formatter: function () {
48096                    var tipTool;
48097                    if (this.point.value === 0) {
48098                        tipTool = '<b>' + this.key + '</b><br/><span></span>';
48099                    }
48100                    else {
48101                        tipTool = '<b>' + this.key + '</b><br/><span>' + Highcharts.numberFormat(this.point.value) + '</span>'
48102                    }
48103
48104                    return tipTool
48105                }
48106            },
48107            data: {
48108                csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv',
48109                startRow: 5,
48110				firstRowAsNames: false,
48111                complete: function (options) {
48112                    var point;
48113                    var i;
48114
48115                    for (i = 0; i < options.series[0].data.length; i++) {
48116                        point = options.series[0].data[i];
48117                        
48118						seriesOptions[0].data.push({
48119							code: point.name,
48120							value:  point.value
48121						});
48122
48123                    }
48124					
48125                    // replace series options parsed by Highcharts with our own options definition
48126                    options.series = seriesOptions;
48127
48128                },
48129                beforeParse: function (csv) {
48130
48131                    var parsedCSV = csvParser(csv);
48132                    this.chart.title.update({ text: parsedCSV[0][0] });
48133                    note = parsedCSV[2][0];
48134                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span><br/>' });
48135                    this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
48136
48137                    this.chart.update(
48138                        {
48139							accessibility: {
48140								description: parsedCSV[4][0]
48141							},
48142                            exporting: {
48143								allowHTML: true,
48144                                menuItemDefinitions:
48145                                {
48146                                    label: {
48147                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
48148                                    }
48149                                },
48150                                buttons: {
48151                                    contextButton: {
48152                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
48153                                    }
48154                                }
48155                            }
48156                        }
48157                    );
48158                    return csv;
48159                }
48160            },
48161			colorAxis: {
48162                dataClasses: [{
48163                    color: Highcharts.eiaColors.extraLightGrey,
48164                    to: 0
48165                }, {
48166                    color: '#F8F0E8',
48167					from: 0.01,
48168                    to: 1000
48169                }, {
48170					color: Highcharts.eiaColors.extraLightBrown,
48171                    from: 1000.01,
48172                    to: 10000
48173                }, {
48174					color: Highcharts.eiaColors.lightBrown,
48175                    from: 10000.01,
48176                    to: 100000
48177                }, {
48178					color: Highcharts.eiaColors.brown,
48179                    from: 100000.01,
48180                    to: 500000
48181                }, {
48182					color: Highcharts.eiaColors.darkBrown,
48183                    from: 500000.01
48184                }]
48185            },
48186            legend: {
48187                align: 'center',
48188                backgroundColor: 'white',
48189                borderColor: 'white',
48190                layout: 'horizontal',
48191				itemDistance: 20,
48192                symbolPadding: 4,
48193				symbolRadius: 0,
48194				valueDecimals: 0,
48195				labelFormatter: function () {
48196					
48197                    if (this.from === undefined) {
48198                        return '= ' + Highcharts.numberFormat(this.to, 0, '.', ',');
48199                    }
48200					else if (this.from === 0.01) {						
48201						return '< ' + Highcharts.numberFormat(this.to, 0, '.', ',');
48202                    }
48203                    else if (this.to === undefined) {						
48204						return '> ' + Highcharts.numberFormat(this.from, 0, '.', ',');
48205                    }
48206					else {
48207						return Highcharts.numberFormat(this.from, 0, '.', ',') + ' - ' + Highcharts.numberFormat(this.to, 0, '.', ',');
48208					}
48209                }
48210            },
48211			responsive: {
48212				rules: [{
48213					condition: {
48214						maxWidth: 321
48215					},
48216					
48217					chartOptions: {
48218						chart: {
48219							height: 330
48220						},
48221						title: {
48222							margin: 5
48223						},
48224						plotOptions: {
48225							map: {
48226								dataLabels: {
48227									style: {
48228										fontSize: '7px',
48229										lineHeight: 7
48230									}
48231								}
48232							}
48233						}
48234					}
48235				},
48236				{
48237					condition: {
48238						minWidth: 322,
48239						maxWidth: 400
48240					},
48241					
48242					chartOptions: {
48243						chart: {
48244							height: 350
48245						},
48246						title: {
48247							margin: 5
48248						},
48249						plotOptions: {
48250							map: {
48251								dataLabels: {
48252									style: {
48253										fontSize: '8px',
48254										lineHeight: 8
48255									}
48256								}
48257							}
48258						}
48259					}
48260				},
48261				{
48262					condition: {
48263						minWidth: 401,
48264						maxWidth: 450
48265					},
48266					
48267					chartOptions: {
48268						chart: {
48269							height: 380
48270						},
48271						title: {
48272							margin: 5
48273						},
48274						plotOptions: {
48275							map: {
48276								dataLabels: {
48277									style: {
48278										fontSize: '8px',
48279										lineHeight: 8
48280									}
48281								}
48282							}
48283						}
48284					}
48285				},
48286				{
48287					condition: {
48288						minWidth: 451
48289					},
48290					
48291					chartOptions: {
48292						chart: {
48293							height: '65%'
48294						},
48295						title: {
48296							margin: 15
48297						},
48298						plotOptions: {
48299							map: {
48300								dataLabels: {
48301									style: {
48302										fontSize: '9px',
48303										lineHeight: 9
48304									}
48305								}
48306							}
48307						}
48308					}
48309				}]
48310			}
48311        });
48312    }
48313};
48314
48315},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],257:[function(require,module,exports){
48316const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
48317const csvParser = require('../../includes/csvParser');
48318
48319module.exports = function (Highcharts, appPath) {
48320    const elementId = 'net-imports-petroleum-shares-consumption';
48321
48322    if ($('#' + elementId).length > 0) {
48323
48324        Highcharts.chart(elementId, {
48325            chart: {
48326                type: 'pie',
48327                spacingBottom: 25,
48328                events: {
48329                    load: creditsSizeAndPosition,
48330                    redraw: creditsSizeAndPosition
48331                }
48332            },
48333			credits: {
48334                enabled: true,
48335                href: null,
48336                style: {
48337                    cursor: 'normal'
48338                }
48339            },
48340            title: {
48341                text: '',
48342				margin: 10
48343            },
48344            data: {
48345                csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv',
48346                startRow: 4,
48347                firstRowAsNames: false,
48348                complete: function (options) {
48349                },
48350                beforeParse: function (csv) {
48351                    var parsedCSV = csvParser(csv);
48352                    this.chart.title.update({ text: parsedCSV[0][0] });
48353                    this.chart.credits.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0] });
48354                    this.chart.update(
48355                        {
48356							accessibility: {
48357								description: parsedCSV[3][0],
48358							},
48359                            exporting: {
48360                                menuItemDefinitions:
48361                                {
48362                                    label: {
48363                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
48364                                    }
48365                                },
48366                                buttons: {
48367                                    contextButton: {
48368                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
48369                                    }
48370                                }
48371                            }
48372                        }
48373                    );
48374                    return csv;
48375                }
48376            },
48377            subtitle: {
48378                text: '',
48379                useHTML: true,
48380            },
48381            plotOptions: {
48382                pie: {
48383                    dataLabels: {
48384                        enabled: true,
48385                        format: "<strong>{point.name}</strong> {point.percentage:.0f}%",
48386                        distance: 10,
48387                        color: Highcharts.eiaColors.darkGrey,
48388                        style: {
48389                            "fontSize": "12px"
48390                        }
48391                    }
48392                }
48393            },
48394            tooltip: {
48395                useHTML: true,
48396                formatter: function () {
48397                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>";
48398                }
48399            },
48400			responsive: {
48401				rules: [{
48402					condition: {
48403						maxWidth: 450
48404					},
48405					
48406					chartOptions: {
48407						chart: {
48408							height: 410
48409						},
48410						plotOptions: {
48411							pie: {
48412								size: null,
48413								dataLabels: {
48414									enabled: false
48415								},
48416								showInLegend: true
48417							}
48418						},
48419						legend: {
48420							enabled: true
48421						}
48422					}
48423				},
48424				{
48425					condition: {
48426						minWidth: 451
48427					},
48428					
48429					chartOptions: {
48430						chart: {
48431							height: '65%'
48432						},
48433						plotOptions: {
48434							pie: {
48435								size: '65%',
48436								dataLabels: {
48437									enabled: true
48438								},
48439								showInLegend: false
48440							}
48441						},
48442						legend: {
48443							enabled: false
48444						}
48445					}
48446				}]
48447			}
48448        });
48449    }
48450};
48451
48452},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],258:[function(require,module,exports){
48453const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
48454const csvParser = require('../../includes/csvParser');
48455
48456module.exports = function (Highcharts, appPath) {
48457    const elementId = 'net-petroleum-imports-by-type';
48458	var units = '';
48459
48460    if ($('#' + elementId).length > 0) {
48461        Highcharts.chart(elementId, {
48462            chart: {
48463                type: 'column',
48464                spacingBottom: 30,
48465                events: {
48466                    load: creditsSizeAndPosition,
48467                    redraw: creditsSizeAndPosition
48468                }
48469            },
48470            credits: {
48471                enabled: true,
48472                href: null,
48473                style: {
48474                    cursor: 'normal'
48475                }
48476            },
48477            data: {
48478                csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv',
48479                startRow: 5,
48480                firstRowAsNames: true,
48481
48482                beforeParse: function (csv) {
48483                    var parsedCSV = csvParser(csv);
48484                    this.chart.title.update({ text: parsedCSV[0][0] });
48485                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
48486                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
48487					units = parsedCSV[1][0];
48488                    this.chart.update(
48489                        {
48490							accessibility: {
48491								description: parsedCSV[4][0],
48492							},
48493                            exporting: {
48494                                menuItemDefinitions:
48495                                {
48496                                    label: {
48497                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
48498                                    }
48499                                },
48500                                buttons: {
48501                                    contextButton: {
48502                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
48503                                    }
48504                                }
48505                            }
48506                        }
48507                    );
48508                    return csv;
48509                }
48510            },
48511			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.orange, Highcharts.eiaColors.lightGrey],
48512            xAxis: {
48513                labels: {
48514                    format: "{value}"
48515                },
48516                type: 'category',
48517				tickWidth: 1,
48518				tickInterval: 10
48519            },
48520            yAxis: {
48521                tickInterval: 5,
48522                labels: {
48523                    format: "{value:,.0f}"
48524                },
48525				reversedStacks: false
48526            },
48527            plotOptions: {
48528                column: {
48529                    stacking: 'normal',
48530                    dataLabels: {
48531                        enabled: false
48532                    }
48533                }
48534            },
48535            tooltip: {
48536                shared: true,
48537                useHTML: true,
48538                formatter: function () {
48539                    let html = "<b>" + this.points[0].key + "</b><br/>";
48540                    this.points.filter(function (value) {
48541                        html += '<span font-size: 16px; style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toString() + ' ' + units + '</span><br/>';
48542                    });
48543                    return html;
48544                }
48545            },
48546			responsive: {
48547                rules: [{
48548                    condition: {
48549                        maxWidth: 450
48550                    },
48551                    chartOptions: {
48552						chart: {
48553							height: 450
48554						}
48555                    }
48556                },
48557				{
48558					condition: {
48559						minWidth: 45
485591
48560					},
48561					
48562					chartOptions: {
48563						chart: {
48564							height: '65%'
48565						}
48566					}
48567				}]
48568            }
48569        });
48570    }
48571}
48572
48573},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],259:[function(require,module,exports){
48574const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
48575const csvParser = require('../../includes/csvParser');
48576
48577module.exports = function (Highcharts, appPath) {
48578    const elementId = 'petroleum-consumption';
48579    var units = '';
48580
48581    if ($('#' + elementId).length > 0) {
48582        Highcharts.chart(elementId, {
48583            chart: {
48584                type: 'line',
48585                spacingBottom: 25,
48586                events: {
48587                    load: creditsSizeAndPosition,
48588                    redraw: creditsSizeAndPosition
48589                }
48590            },
48591            credits: {
48592                enabled: true,
48593                href: null,
48594                style: {
48595                    cursor: 'normal'
48596                }
48597            },
48598            data: {
48599                csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv',
48600                startRow: 5,
48601                firstRowAsNames: true,
48602                beforeParse: function (csv) {
48603                    var parsedCSV = csvParser(csv);
48604                    this.chart.title.update({ text: parsedCSV[0][0] });
48605                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
48606                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
48607                    units = parsedCSV[1][0];
48608                    this.chart.update(
48609                        {
48610							accessibility: {
48611								description: parsedCSV[4][0],
48612							},
48613                            exporting: {
48614                                menuItemDefinitions:
48615                                {
48616                                    label: {
48617                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
48618                                    }
48619                                },
48620                                buttons: {
48621                                    contextButton: {
48622                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
48623                                    }
48624                                }
48625                            }
48626                        }
48627                    );
48628                    return csv;
48629                }
48630            },
48631			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red],
48632            xAxis: {
48633                tickInterval: 5,
48634                labels: {
48635                    format: "{value}"
48636                },
48637                startOnTick: true,
48638                minPadding: 0,
48639                maxPadding: 0
48640            },
48641            yAxis: {
48642                tickInterval: 2,
48643                maxPadding: 0,
48644                labels: {
48645                    format: "{value}"
48646                }
48647            },
48648            tooltip: {
48649                shared: true,
48650                useHTML: true,
48651                formatter: function () {
48652                    var html = '<b>' + this.x + '</b><br/>';
48653                    this.points.filter(function (value) {
48654                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
48655                    });
48656                    return html;
48657                }
48658            },
48659			responsive: {
48660				rules: [{
48661					condition: {
48662						maxWidth: 450
48663					},
48664					
48665					chartOptions: {
48666						chart: {
48667							height: 450
48668						}
48669					}
48670				},
48671				{
48672					condition: {
48673						minWidth: 451
48674					},
48675					
48676					chartOptions: {
48677						chart: {
48678							height: '65%'
48679						}
48680					}
48681				}]
48682			}
48683        });
48684    }
48685};
48686
48687},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],260:[function(require,module,exports){
48688const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
48689const csvParser = require('../../includes/csvParser');
48690
48691module.exports = function (Highcharts, appPath) {
48692    const elementId = 'petroleum-imports';
48693    var units = '';
48694
48695    if ($('#' + elementId).length > 0) {
48696        Highcharts.chart(elementId, {
48697            chart: {
48698                type: 'line',
48699                spacingBottom: 25,
48700                events: {
48701                    load: creditsSizeAndPosition,
48702                    redraw: creditsSizeAndPosition
48703                }
48704            },
48705            credits: {
48706                enabled: true,
48707                href: null,
48708                style: {
48709                    cursor: 'normal'
48710                }
48711            },
48712            data: {
48713                csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv',
48714                startRow: 5,
48715                firstRowAsNames: true,
48716                beforeParse: function (csv) {
48717                    var parsedCSV = csvParser(csv);
48718                    this.chart.title.update({ text: parsedCSV[0][0] });
48719                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
48720                    units = parsedCSV[1][0];
48721                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
48722                    this.chart.update(
48723                        {
48724							accessibility: {
48725								description: parsedCSV[4][0],
48726							},
48727                            exporting: {
48728                                menuItemDefinitions:
48729                                {
48730                                    label: {
48731                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
48732                                    }
48733                                },
48734                                buttons: {
48735                                    contextButton: {
48736                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
48737                                    }
48738                                }
48739                            }
48740                        }
48741                    );
48742                    return csv;
48743                }
48744            },
48745			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
48746            xAxis: {
48747                tickInterval: 5,
48748                labels: {
48749                    format: "{value}"
48750                },
48751                startOnTick: true,
48752                minPadding: 0,
48753                maxPadding: 0
48754            },
48755            yAxis: {
48756                tickInterval: 1,
48757                maxPadding: 0,
48758                labels: {
48759                    format: "{value:.1f}"
48760                }
48761            },
48762            tooltip: {
48763                shared: true,
48764                useHTML: true,
48765                formatter: function () {
48766                    var html = '<b>' + this.x + '</b><br/>';
48767                    this.points.filter(function (value) {
48768                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
48769                    });
48770                    return html;
48771                }
48772            },
48773			responsive: {
48774				rules: [{
48775					condition: {
48776						maxWidth: 450
48777					},
48778					
48779					chartOptions: {
48780						chart: {
48781							height: 450
48782						}
48783					}
48784				},
48785				{
48786					condition: {
48787						minWidth: 451
48788					},
48789					
48790					chartOptions: {
48791						chart: {
48792							height: '65%'
48793						}
48794					}
48795				}]
48796			}
48797        });
48798    }
48799};
48800
48801},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],261:[function(require,module,exports){
48802const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
48803const csvParser = require('../../includes/csvParser');
48804
48805module.exports = function (Highcharts, appPath) {
48806    const elementId = 'refiner-acquisition-cost';
48807    let units = '';
48808
48809    if ($('#' + elementId).length > 0) {
48810        Highcharts.chart(elementId, {
48811            chart: {
48812                type: 'line',
48813                spacingBottom: 30,
48814                events: {
48815                    load: creditsSizeAndPosition,
48816                    redraw: creditsSizeAndPosition
48817                }
48818            },
48819			credits: {
48820                enabled: true,
48821                href: null,
48822                style: {
48823                    cursor: 'normal'
48824                }
48825            },
48826            data: {
48827                csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv',
48828                startRow: 5,
48829                firstRowAsNames: true,
48830
48831                beforeParse: function (csv) {
48832                    var parsedCSV = csvParser(csv);
48833                    units = parsedCSV[1][0];
48834                    this.chart.title.update({ text: parsedCSV[0][0] });
48835                    this.chart.yAxis[0].update({ title: { text: units } });
48836                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
48837                    this.chart.update(
48838                        {
48839							accessibility: {
48840								description: parsedCSV[4][0],
48841							},
48842                            exporting: {
48843                                menuItemDefinitions:
48844                                {
48845                                    label: {
48846                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
48847                                    }
48848                                },
48849                                buttons: {
48850                                    contextButton: {
48851                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
48852                                    }
48853                                }
48854                            }
48855                        }
48856                    );
48857                    return csv;
48858                }
48859            },
48860			colors: [Highcharts.eiaColors.blue],
48861            xAxis: {
48862                type: 'category',
48863                startOnTick: true,
48864                endOnTick: false,
48865                tickInterval: 60,
48866				tickWidth: 1,
48867				labels: {
48868					formatter: function() {
48869						return this.value.substring(4);
48870					}
48871				}
48872            },
48873            yAxis: {
48874                labels: {
48875                    format: "{value}"
48876                },
48877                tickInterval: 10,
48878				maxPadding:0
48879            },
48880            tooltip: {
48881                formatter:function () {
48882                    var pointValue;
48883					pointValue = this.y.toFixed(2);
48884					
48885					return '<b>' + this.point.name + '</b>' + '<br/>' +
48886						pointValue + ' ' + units.substring(12);
48887				}
48888            },
48889            legend: {
48890                enabled: false
48891            },
48892            responsive: {
48893                rules: [{
48894                    condition: {
48895                        maxWidth: 450
48896                    },
48897                    chartOptions: {
48898                        chart: {
48899                            height: 400
48900                        },
48901                        xAxis: {
48902                            labels: {
48903                                rotation: -45
48904                            }
48905                        }
48906                    }
48907                },
48908                {
48909                    condition: {
48910                        minWidth: 451
48911                    },
48912
48913                    chartOptions: {
48914                        chart: {
48915                            height: '65%'
48916                        }
48917                    }
48918                }]
48919            }
48920        });
48921    }
48922};
48923
48924},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],262:[function(require,module,exports){
48925const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
48926const csvParser = require('../../includes/csvParser');
48927
48928module.exports = function (Highcharts, appPath) {
48929    const elementId = 'refiner-blender-net-production';
48930    let units = '';
48931    if ($('#' + elementId).length > 0) {
48932        Highcharts.chart(elementId, {
48933            chart: {
48934                type: 'bar',
48935                spacingBottom: 25,
48936                events: {
48937                    load: creditsSizeAndPosition,
48938                    redraw: creditsSizeAndPosition
48939                }
48940            },
48941			credits: {
48942                enabled: true,
48943                href: null,
48944                style: {
48945                    cursor: 'normal'
48946                }
48947            },
48948            data: {
48949                csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv',
48950                startRow: 5,
48951                firstRowAsNames: true,
48952                beforeParse: function (csv) {
48953                    var parsedCSV = csvParser(csv);
48954                    units = parsedCSV[1][0];
48955                    this.chart.title.update({ text: parsedCSV[0][0] });
48956                    this.chart.xAxis[0].update({ title: { text: units } });
48957                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
48958                    this.chart.update(
48959                        {
48960							accessibility: {
48961								description: parsedCSV[4][0],
48962							},
48963                            exporting: {
48964                                menuItemDefinitions:
48965                                {
48966                                    label: {
48967                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
48968                                    }
48969                                },
48970                                buttons: {
48971                                    contextButton: {
48972                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
48973                                    }
48974                                }
48975                            }
48976                        }
48977                    );
48978                    return csv;
48979                }
48980            },
48981            xAxis: {
48982				title: {
48983					align: 'high',
48984					offset: 0,
48985					rotation: 0,
48986					y: -20
48987				},
48988                labels: {
48989					rotation: 0,
48990                    style: {
48991						lineHeight: '12px',
48992                        textAlign: 'center'
48993                    }
48994                }
48995
48996            },
48997            plotOptions: {
48998                series: {
48999                    dataLabels: {
49000                        enabled: true,
49001                        format: '{point.y}%',
49002                    },
49003                    grouping: false,
49004					colorByPoint: true,
49005					colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.lightGreen, Highcharts.eiaColors.grey, Highcharts.eiaColors.darkGrey]
49006                }
49007            },
49008            yAxis: {
49009                labels: {
49010                    enabled: false
49011                },
49012                gridLineColor: "none",
49013				title: {
49014					text: null
49015				}
49016            },
49017            tooltip: {
49018                formatter: function () {
49019                    return '<b>' + this.key + '</b><br/>' + this.y + '%';
49020                }
49021            },
49022            legend: {
49023                enabled: false
49024            },
49025            responsive: {
49026                rules: [{
49027                    condition: {
49028                        maxWidth: 450
49029                    },
49030                    chartOptions: {
49031						chart: {
49032                            height: 500
49033						}
49034                    }
49035                },
49036				{
49037					condition: {
49038						minWidth: 451
49039					},
49040					
49041					chartOptions: {
49042						chart: {
49043							height: '65%'
49044						}
49045					}
49046				}]
49047            }
49048        });
49049    }
49050};
49051
49052},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],263:[function(require,module,exports){
49053const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
49054const csvParser = require('../../includes/csvParser');
49055
49056module.exports = function (Highcharts, appPath) {
49057    const elementId = 'refiner-blender-netinput-by-type-share-total';
49058    var units = [];
49059
49060    if ($('#' + elementId).length > 0) {
49061
49062        Highcharts.chart(elementId, {
49063            chart: {
49064                type: 'pie',
49065                spacingBottom: 25,
49066                events: {
49067                    load: creditsSizeAndPosition,
49068                    redraw: creditsSizeAndPosition
49069                }
49070            },
49071			credits: {
49072                enabled: true,
49073                href: null,
49074                style: {
49075                    cursor: 'normal'
49076                }
49077            },
49078            title: {
49079                text: ''
49080            },
49081            data: {
49082                csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv',
49083                startRow: 5,
49084                firstRowAsNames: true,
49085                beforeParse: function (csv) {
49086                    var parsedCSV = csvParser(csv);
49087                    this.chart.title.update({ text: parsedCSV[0][0] });
49088                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
49089                    units.push(parsedCSV[5][0]);
49090                    units.push(parsedCSV[5][1]);
49091                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
49092                    this.chart.update(
49093                        {
49094							accessibility: {
49095								description: parsedCSV[4][0],
49096							},
49097                            exporting: {
49098                                menuItemDefinitions:
49099                                {
49100                                    label: {
49101                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
49102                                    }
49103                                },
49104                                buttons: {
49105                                    contextButton: {
49106                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
49107                                    }
49108                                }
49109                            }
49110                        }
49111                    );
49112                    return csv;
49113                }
49114            },
49115			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.red, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
49116            subtitle: {
49117                text: '',
49118                useHTML: true,
49119            },
49120            plotOptions: {
49121                pie: {
49122                    dataLabels: {
49123                        enabled: true,
49124                        format: "<strong>{point.name}</strong> {point.percentage:.0f}%",
49125                        distance: 10,
49126                        color: Highcharts.eiaColors.darkGrey,
49127                        style: {
49128                            "fontSize": "12px"
49129                        }
49130                    }
49131                }
49132            },
49133            tooltip: {
49134                useHTML: true,
49135                formatter: function () {
49136                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + "%</span> " + units[1] + "<br/>" + this.y.toFixed(2) + ' ' + units[0];
49137                }
49138            },
49139			responsive: {
49140				rules: [{
49141					condition: {
49142						maxWidth: 450
49143					},
49144					
49145					chartOptions: {
49146						chart: {
49147							height: 410
49148						},
49149						plotOptions: {
49150							pie: {
49151								size: null,
49152								dataLabels: {
49153									enabled: false
49154								},
49155								showInLegend: true
49156							}
49157						},
49158						legend: {
49159							enabled: true
49160						}
49161					}
49162				},
49163				{
49164					condition: {
49165						minWidth: 451
49166					},
49167					
49168					chartOptions: {
49169						chart: {
49170							height: '65%'
49171						},
49172						plotOptions: {
49173							pie: {
49174								size: '65%',
49175								dataLabels: {
49176									enabled: true
49177								},
49178								showInLegend: false
49179							}
49180						},
49181						legend: {
49182							enabled: false
49183						}
49184					}
49185				}]
49186			}
49187        });
49188    }
49189};
49190
49191},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],264:[function(require,module,exports){
49192const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
49193const csvParser = require('../../includes/csvParser');
49194
49195
49196module.exports = function (Highcharts, map, appPath) {
49197    const elementId = 'top-crude-oil-producing-states';
49198    let mapData = Highcharts.geojson(map, 'map');
49199
49200    // Our own options definition as two different series, will populate the data in the complete callback
49201    var seriesOptions = [
49202        {
49203            id: "rank1",
49204            type: "map",
49205            mapData : mapData,
49206            allAreas: true,
49207            keys: ["postal-code"],
49208            joinBy: ['hc-a2', 'code'],
49209            data: [],
49210            states: {
49211                hover: {
49212                    color: '#a4edba'
49213                }
49214            },
49215            dataLabels: {
49216                enabled: true,
49217                formatter: function () {
49218                    if (this.point.nameCode) {
49219                        if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") {
49220                            return this.point.code + " " + this.point.nameCode;
49221                        }
49222                        else {
49223                            return this.point.code + "<br/>" + this.point.nameCode;
49224                        }
49225                    }
49226                    return this.point.code
49227                },
49228                style: {
49229                    fontSize: '10px'
49230                }
49231            },
49232            tooltip: {
49233                valueSuffix: ''
49234            },
49235            nullColor : "white",
49236            showInLegend: false
49237        },
49238        {
49239            type: 'mapline',
49240            data: Highcharts.geojson(map, 'mapline'),
49241            color: 'silver',
49242            nullColor : 'silver',
49243            lineWidth : 1,
49244            showInLegend: false,
49245			enableMouseTracking: false,
49246            states : {
49247                inactive : {
49248                    enabled : false
49249                }
49250            }
49251        }
49252    ];
49253
49254    if ($('#' + elementId).length > 0) {
49255        Highcharts.mapChart(elementId, {
49256            chart: {
49257                map: map,
49258                spacingBottom: 30,
49259                events: {
49260                    load: creditsSizeAndPosition,
49261                    redraw: creditsSizeAndPosition
49262                }
49263            },
49264            mapView : {
49265                insetOptions : {
49266                    borderWidth : 1,
49267                    borderColor : 'silver'
49268                }
49269            },
49270			credits: {
49271                enabled: false,
49272                href: null,
49273                style: {
49274                    cursor: 'normal'
49275                }
49276            },
49277			caption: {
49278				verticalAlign: 'bottom',
49279				useHTML: true,
49280				style: {
49281					color: '#888',
49282					fontSize: '11px'
49283				},
49284				x: 32,
49285				y: 33
49286			},
49287            tooltip: {
49288                enabled: true,
49289                useHTML: true,
49290                formatter: function () {
49291                    if (this.point.nameCode) {
49292                        return '<b>' + this.point.name + '</b><br/>' + this.point.nameCode;
49293                    }
49294                    else {
49295                        return false;
49296                    }
49297                },
49298                style: {
49299                    textAlign: 'center'
49300                }
49301            },
49302            legend: {
49303                enabled: false
49304            },
49305            data: {
49306                csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv',
49307                startRow: 4,
49308				firstRowAsNames: false,
49309                complete: function (options) {
49310                    var point;
49311
49312                    for (var i = 0; i < options.series[0].data.length; i++) {
49313                        point = options.series[0].data[i];
49314
49315                        if (point.value) {
49316                            switch (point.value) {
49317                                case 1:
49318                                    seriesOptions[0].data.push({
49319                                        code: point.name,
49320                                        color: Highcharts.eiaColors.blue,
49321                                        nameCode: "<span>#" + point.value + "</span>"
49322                                    });
49323                                    break;
49324                                case 2:
49325                                    seriesOptions[0].data.push({
49326                                        code: point.name,
49327                                        color: Highcharts.eiaColors.brown,
49328                                        nameCode: "<span>#" + point.value + "</span>"
49329                                    });
49330                                    break;
49331                                case 3:
49332                                    seriesOptions[0].data.push({
49333                                        code: point.name,
49334                                        color: Highcharts.eiaColors.green,
49335                                        nameCode: "<span>#" + point.value + "</span>"
49336                                    });
49337                                    break;
49338                                case 4:
49339                                    seriesOptions[0].data.push({
49340                                        code: point.name,
49341                                        color: Highcharts.eiaColors.yellow,
49342                                        nameCode: "<span>#" + point.value + "</span>"
49343                                    });
49344                                    break;
49345                                default:
49346                                    seriesOptions[0].data.push({
49347                                        code: point.name,
49348                                        color: Highcharts.eiaColors.red,
49349                                        nameCode: "<span>#" + point.value + "</span>"
49350                                    });
49351                            }
49352                        }
49353                    }
49354                    // replace series options parsed by Highcharts with our own options definition
49355                    options.series = seriesOptions;
49356                },
49357                beforeParse: function (csv) {
49358                    var parsedCSV = csvParser(csv);
49359                    this.chart.title.update({ text: parsedCSV[0][0] });
49360                    this.chart.caption.update({ text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0] });
49361
49362                    this.chart.update(
49363                        {
49364							accessibility: {
49365								description: parsedCSV[3][0]
49366							},
49367                            exporting: {
49368								allowHTML: true,
49369                                menuItemDefinitions:
49370                                {
49371                                    label: {
49372                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
49373                                    }
49374                                },
49375                                buttons: {
49376                                    contextButton: {
49377                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
49378                                    }
49379                                }
49380                            }
49381                        }
49382                    );
49383                    return csv;
49384                }
49385            },
49386			responsive: {
49387				rules: [{
49388					condition: {
49389						maxWidth: 321
49390					},
49391					
49392					chartOptions: {
49393						chart: {
49394							height: 330
49395						},
49396						title: {
49397							margin: 5
49398						}
49399					}
49400				},
49401				{
49402					condition: {
49403						minWidth: 322,
49404						maxWidth: 400
49405					},
49406					
49407					chartOptions: {
49408						chart: {
49409							height: 350
49410						},
49411						title: {
49412							margin: 5
49413						}
49414					}
49415				},
49416				{
49417					condition: {
49418						minWidth: 401,
49419						maxWidth: 450
49420					},
49421					
49422					chartOptions: {
49423						chart: {
49424							height: 380
49425						},
49426						title: {
49427							margin: 5
49428						}
49429					}
49430				},
49431				{
49432					condition: {
49433						minWidth: 451
49434					},
49435					
49436					chartOptions: {
49437						chart: {
49438							height: '65%'
49439						},
49440						title: {
49441							margin: 15
49442						}
49443					}
49444				}]
49445			}
49446
49447        });
49448
49449    }
49450};
49451
49452},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],265:[function(require,module,exports){
49453const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
49454const csvParser = require('../../includes/csvParser');
49455
49456module.exports = function (Highcharts, appPath) {
49457    const elementId = 'top-oil-countries';
49458    var units = '';
49459
49460    if ($('#' + elementId).length > 0) {
49461        Highcharts.chart(elementId, {
49462            chart: {
49463                type: 'line',
49464                spacingBottom: 25,
49465                events: {
49466                    load: creditsSizeAndPosition,
49467                    redraw: creditsSizeAndPosition
49468                }
49469            },
49470            credits: {
49471                enabled: true,
49472                href: null,
49473                style: {
49474                    cursor: 'normal'
49475                }
49476            },
49477            data: {
49478                csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv',
49479                startRow: 5,
49480                firstRowAsNames: true,
49481
49482                beforeParse: function (csv) {
49483                    var parsedCSV = csvParser(csv);
49484                    this.chart.title.update({ text: parsedCSV[0][0] });
49485                    this.chart.yAxis[0].update({ title: { text: parsedCSV[
494851][0] } });
49486                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
49487                    units = parsedCSV[1][0];
49488                    this.chart.update(
49489                        {
49490							accessibility: {
49491								description: parsedCSV[4][0],
49492							},
49493                            exporting: {
49494                                menuItemDefinitions:
49495                                {
49496                                    label: {
49497                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
49498                                    }
49499                                },
49500                                buttons: {
49501                                    contextButton: {
49502                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
49503                                    }
49504                                }
49505                            }
49506                        }
49507                    );
49508                    return csv;
49509                }
49510            },
49511			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.lightBrown],
49512            xAxis: {
49513                labels: {
49514                    format: "{value}"
49515                },
49516                startOnTick: true,
49517                minPadding: 0,
49518                maxPadding: 0
49519            },
49520            yAxis: {
49521                tickInterval: 1,
49522                labels: {
49523                    format: "{value}"
49524                }
49525            },
49526            tooltip: {
49527                shared: true,
49528                useHTML: true,
49529                formatter: function () {
49530                    var html = '<b>' + this.x + '</b><br/>';
49531                    this.points.filter(function (value) {
49532                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
49533                    });
49534                    return html;
49535                }
49536            },
49537			responsive: {
49538				rules: [{
49539					condition: {
49540						maxWidth: 450
49541					},
49542					
49543					chartOptions: {
49544						chart: {
49545							height: 450
49546						}
49547					}
49548				},
49549				{
49550					condition: {
49551						minWidth: 451
49552					},
49553					
49554					chartOptions: {
49555						chart: {
49556							height: '65%'
49557						}
49558					}
49559				}]
49560			}
49561        });
49562    }
49563};
49564
49565},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],266:[function(require,module,exports){
49566const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
49567const csvParser = require('../../includes/csvParser');
49568
49569
49570module.exports = function (Highcharts, map, appPath) {
49571    const elementId = 'portfolio-standards-and-goals';
49572    const mapData = Highcharts.geojson(map, 'map');
49573
49574    // Our own options definition as two different series, will populate the data in the complete callback
49575    var seriesOptions = [
49576        {
49577            id: "standards",
49578            type: "map",
49579            color: Highcharts.eiaColors.blue,
49580            allAreas: false,
49581            keys: ["postal-code"],
49582            joinBy: ['hc-a2', 'code'],
49583            data: [],
49584            mapData: mapData,
49585            borderWidth: 0.5,
49586            states: {
49587                hover: {
49588                    color: Highcharts.eiaColors.green
49589                }
49590            },
49591            dataLabels: {
49592                enabled: true,
49593                formatter: function () {
49594                    if (this.point.properties) {
49595                        return this.point.properties['hc-a2'];
49596                    }
49597                    return this.point.options.code;
49598                },
49599                style: {
49600                    fontSize: '10px'
49601                }
49602            },
49603            tooltip: {
49604                valueSuffix: ''
49605            }
49606        },
49607        {
49608            id: "goals",
49609            type: "map",
49610            color: Highcharts.eiaColors.yellow,
49611            allAreas: false,
49612            keys: ["postal-code"],
49613            joinBy: ['hc-a2', 'code'],
49614            data: [],
49615            mapData: mapData,
49616            borderWidth: 0.5,
49617            states: {
49618                hover: {
49619                    color: Highcharts.eiaColors.green
49620                }
49621            },
49622            dataLabels: {
49623                enabled: true,
49624                formatter: function () {
49625                    if (this.point.properties) {
49626                        return this.point.properties['hc-a2'];
49627                    }
49628                    return this.point.options.code;
49629                },
49630                style: {
49631                    fontSize: '10px'
49632                }
49633            },
49634            tooltip: {
49635                valueSuffix: ''
49636            }
49637        },
49638        {
49639            id: "neither",
49640            showInLegend: false,
49641            type: "map",
49642            color: "#FFF",
49643            allAreas: false,
49644            keys: ["postal-code"],
49645            joinBy: ['hc-a2', 'code'],
49646            data: [],
49647            mapData: mapData,
49648            borderWidth: 0.5,
49649            states: {
49650                hover: {
49651                    color: Highcharts.eiaColors.green
49652                }
49653            },
49654            dataLabels: {
49655                enabled: true,
49656                formatter: function () {
49657                    if (this.point.properties) {
49658                        return this.point.properties['hc-a2'];
49659                    }
49660                    return this.point.options.code;
49661                },
49662                style: {
49663                    fontSize: '10px'
49664                }
49665            },
49666            tooltip: {
49667                valueSuffix: ''
49668            }
49669        },
49670        {
49671            type: 'mapline',
49672            data: Highcharts.geojson(map, 'mapline'),
49673            color: 'silver',
49674            nullColor : 'silver',
49675            lineWidth : 1,
49676            showInLegend: false,
49677			enableMouseTracking: false,
49678            states : {
49679                inactive : {
49680                    enabled : false
49681                }
49682            }
49683        }
49684    ];
49685
49686    if ($('#' + elementId).length > 0) {
49687        Highcharts.mapChart(elementId, {
49688            chart: {
49689                map: map,
49690                spacingBottom: 30,
49691                events: {
49692                    load: creditsSizeAndPosition,
49693                    redraw: creditsSizeAndPosition
49694                }
49695            },
49696            mapView : {
49697                insetOptions : {
49698                    borderWidth : 1,
49699                    borderColor : 'silver'
49700                }
49701            },
49702			credits: {
49703                enabled: false,
49704                href: null,
49705                style: {
49706                    cursor: 'normal'
49707                }
49708            },
49709			caption: {
49710				verticalAlign: 'bottom',
49711				useHTML: true,
49712				margin: 0,
49713				style: {
49714					color: '#888',
49715					fontSize: '11px'
49716				},
49717				x: 32,
49718				y: 33
49719			},
49720            tooltip: {
49721                enabled: true,
49722                useHTML: true,
49723                formatter: function () {
49724                    if (this.point.series.name.charAt(0) === 'H') { // belongs to either the "Has" ... goals or standards series
49725                        const symbol = this.point.series.legendItem.symbol.element.outerHTML
49726                            .replace(/rx="[^"]*"/, '')
49727                            .replace(/ry="[^"]*"/, '')
49728                            .replace(/data-z-index="[^"]*"/, '');
49729
49730                        return "<b>" + this.point.name + "</b></br><svg width=\'20\' height=\'15\'>" + symbol + "</svg>" + this.point.series.name;
49731                    }
49732                    else {
49733                        return '<b>' + this.point.name + '</b></br>Does not have renewable portfolio standandards or goals';
49734                    }
49735                },
49736                style: {
49737                    textAlign: 'left'
49738                }
49739            },
49740            plotOptions: {
49741                map: {
49742                    events: {
49743                        legendItemClick: function (event) {
49744                            event.preventDefault();
49745
49746                            return false;
49747                        }
49748                    },
49749                    dataLabels: {
49750                        enabled: true,
49751                        allowOverlap: true,
49752                        format: '{point.code}',
49753                        style: {
49754                            fontSize: '10px'
49755                        }
49756                    }
49757                }
49758            },
49759            legend: {
49760                enabled: true
49761            },
49762			responsive: {
49763				rules: [{
49764					condition: {
49765						maxWidth: 321
49766					},
49767					
49768					chartOptions: {
49769						chart: {
49770							height: 330
49771						},
49772						title: {
49773							margin: 10
49774						}
49775					}
49776				},
49777				{
49778					condition: {
49779						minWidth: 322,
49780						maxWidth: 400
49781					},
49782					
49783					chartOptions: {
49784						chart: {
49785							height: 350
49786						},
49787						title: {
49788							margin: 10
49789						}
49790					}
49791				},
49792				{
49793					condition: {
49794						minWidth: 401,
49795						maxWidth: 450
49796					},
49797					
49798					chartOptions: {
49799						chart: {
49800							height: 380
49801						},
49802						title: {
49803							margin: 10
49804						}
49805					}
49806				},
49807				{
49808					condition: {
49809						minWidth: 451
49810					},
49811					
49812					chartOptions: {
49813						chart: {
49814							height: '65%'
49815						},
49816						title: {
49817							margin: 15
49818						}
49819					}
49820				}]
49821			},
49822            data: {
49823                csvURL: appPath + '/renewable-sources/charts/' + elementId + '.csv',
49824                startRow: 4,
49825				firstRowAsNames: false,
49826                complete: function (options) {
49827                    var point;
49828                    for (var i = 0; i < options.series[0].data.length; i++) {
49829                        point = options.series[0].data[i];
49830                        if (point.value === 'standards') {
49831                            seriesOptions[0].data.push({
49832                                code: point.name
49833                            });
49834                        }
49835                        else if (point.value === 'goals') {
49836                            seriesOptions[1].data.push({
49837                                code: point.name
49838                            });
49839                        }
49840                        else {
49841                            seriesOptions[2].data.push({
49842                                code: point.name
49843                            });
49844                        }
49845                    }
49846
49847                    // replace series options parsed by Highcharts with our own options definition
49848                    options.series = seriesOptions;
49849
49850                },
49851                beforeParse: function (csv) {
49852                    var parsedCSV = csvParser(csv);
49853                    this.chart.title.update({ text: parsedCSV[0][0] });
49854                    this.chart.caption.update({ text: parsedCSV[1][0] });
49855                    seriesOptions[0].name = parsedCSV[2][0];
49856                    seriesOptions[1].name = parsedCSV[2][1];
49857
49858                    this.chart.update(
49859                        {
49860							accessibility: {
49861								description: parsedCSV[3][0]
49862							},
49863                            exporting: {
49864								allowHTML: true,
49865                                menuItemDefinitions:
49866                                {
49867                                    label: {
49868                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
49869                                    }
49870                                },
49871                                buttons: {
49872                                    contextButton: {
49873                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
49874                                    }
49875                                }
49876                            }
49877                        }
49878                    );
49879                    return csv;
49880                }
49881            }
49882        });
49883    }
49884}
49885
49886},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],267:[function(require,module,exports){
49887const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
49888const csvParser = require('../../includes/csvParser');
49889
49890module.exports = function (Highcharts, appPath) {
49891    const elementId = 'renewable-energy-consumption-major-sources';
49892
49893    if ($('#' + elementId).length > 0) {
49894        Highcharts.chart(elementId, {
49895            chart: {
49896                type: 'column',
49897                spacingBottom: 25,
49898                events: {
49899                    load: creditsSizeAndPosition,
49900                    redraw: creditsSizeAndPosition
49901                }
49902            },
49903			credits: {
49904                enabled: true,
49905                href: null,
49906                style: {
49907                    cursor: 'normal'
49908                }
49909            },
49910            data: {
49911                csvURL: appPath + '/renewable-sources/charts/' + elementId + '.csv',
49912                startRow: 5,
49913                firstRowAsNames: true,
49914                beforeParse: function (csv) {
49915                    var parsedCSV = csvParser(csv);
49916                    this.chart.title.update({ text: parsedCSV[0][0] });
49917                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
49918                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
49919                    this.chart.update(
49920                        {
49921							accessibility: {
49922								description: parsedCSV[3][0],
49923							},
49924                            exporting: {
49925                                menuItemDefinitions:
49926                                {
49927                                    label: {
49928                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
49929                                    }
49930                                },
49931                                buttons: {
49932                                    contextButton: {
49933                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
49934                                    }
49935                                }
49936                            }
49937                        }
49938                    );
49939                    return csv;
49940                }
49941            },
49942			colors: [Highcharts.eiaColors.purple, Highcharts.eiaColors.lightGrey, Highcharts.eiaColors.red, Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.green],
49943            xAxis: {
49944                labels: {
49945                    format: "{value}",
49946                },
49947                type: 'category',
49948                tickWidth: 0
49949            },
49950            yAxis: {
49951                max: 100,
49952                tickInterval: 10,
49953                labels: {
49954                    format: "{value}%"
49955                },
49956				reversedStacks: false
49957            },
49958            plotOptions: {
49959                column: {
49960                    stacking: 'normal'
49961                }
49962            },
49963            tooltip: {
49964                formatter: function () {
49965                    return '<b>' + this.series.name + '</b><br/>' + '<b>year:</b> ' + this.key + '<br/><b>percentage:</b> ' + this.y.toFixed(2) + '%';
49966                }
49967            },
49968            responsive: {
49969                rules: [{
49970                    condition: {
49971                        maxWidth: 450
49972                    },
49973                    chartOptions: {
49974						chart: {
49975							height: 450
49976						},
49977						title: {
49978							margin: 15
49979						}
49980                    }
49981                },
49982				{
49983					condition: {
49984						minWidth: 451
49985					},
49986					
49987					chartOptions: {
49988						chart: {
49989							height: '65%'
49990						},
49991						title: {
49992							margin: 20
49993						}
49994					}
49995				}]
49996            }
49997        });
49998    }
49999};
50000
50001},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],268:[function(require,module,exports){
50002const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
50003const csvParser = require('../../includes/csvParser');
50004
50005
50006module.exports = function (Highcharts, map, appPath) {
50007
50008    const elementId = 'small-scale-photovoltaic-generation';
50009	let units = '';
50010    let mapData = Highcharts.geojson(map, 'map');
50011
50012    // Our own options definition as two different series, will populate the data in the complete callback
50013    var seriesOptions = [
50014        {
50015            id: "rank1",
50016            type: "map",
50017            mapData : mapData,
50018            allAreas: false,
50019            keys: ["postal-code"],
50020            joinBy: ['hc-a2', 'code'],
50021            data: [],
50022            mapData: mapData,
50023			borderWidth: 0.5,
50024            states: {
50025                hover: {
50026                    brightness: 0,
50027					borderWidth: 1,
50028					borderColor: Highcharts.eiaColors.darkGrey
50029                }
50030            },
50031			
50032            dataLabels: {
50033                enabled: true,
50034                formatter: function () {
50035                    if (this.point.properties) {
50036                        return this.point.properties['hc-a2'];
50037                    }
50038                    return this.point.options.ucName;
50039                }
50040            },
50041            tooltip: {
50042                valueSuffix: ''
50043            }
50044        },
50045        {
50046            type: 'mapline',
50047            data: Highcharts.geojson(map, 'mapline'),
50048            color: 'silver',
50049            nullColor : 'silver',
50050            lineWidth : 1,
50051            showInLegend: false,
50052			enableMouseTracking: false,
50053            states : {
50054                inactive : {
50055                    enabled : false
50056                }
50057            }
50058        }
50059    ];
50060
50061    if ($('#' + elementId).length > 0) {
50062        Highcharts.mapChart(elementId, {
50063            chart: {
50064                map: map,
50065                spacingBottom: 25,
50066                events: {
50067                    load: creditsSizeAndPosition,
50068                    redraw: creditsSizeAndPosition
50069                }
50070            },
50071            mapView : {
50072                insetOptions : {
50073                    borderWidth : 1,
50074                    borderColor : 'silver'
50075                }
50076            },
50077			credits: {
50078                enabled: false,
50079                href: null,
50080                style: {
50081                    cursor: 'normal'
50082                }
50083            },
50084			caption: {
50085				verticalAlign: 'bottom',
50086				useHTML: true,
50087				margin: 0,
50088				style: {
50089					color: '#888',
50090					fontSize: '11px'
50091				},
50092				x: 32,
50093				y: 33
50094			},
50095            tooltip: {
50096                enabled: true,
50097                useHTML: true,
50098                formatter: function () {
50099                    var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : '';
50100                    if (html !== '')
50101                        return html
50102                }
50103            },
50104            data: {
50105                csvURL: appPath + '/solar/charts/' + elementId + '.csv',
50106                startRow: 5,
50107				firstRowAsNames: false,
50108                complete: function (options) {
50109                    var point;
50110                    var i;
50111
50112                    for (i = 0; i < options.series[0].data.length; i++) {
50113
50114                        point = options.series[0].data[i];
50115                        var pointValueString = Highcharts.numberFormat(point.value, 4) + ' ' + units;
50116
50117                        if (pointValueString) {
50118                            seriesOptions[0].data.push({
50119								code: point.name,
50120								nameCode: "<span>" + pointValueString + "</span>",
50121								value: point.value
50122							});
50123                        }
50124
50125                    }
50126
50127                    // replace series options parsed by Highcharts with our own options definition
50128                    options.series = seriesOptions;
50129
50130                },
50131                beforeParse: function (csv) {
50132
50133                    var parsedCSV = csvParser(csv);
50134                    units = parsedCSV[1][0];
50135                    this.chart.title.update({ text: parsedCSV[0][0] });
50136					this.chart.legend.update({title: { text: parsedCSV[1][0] }});
50137                    this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
50138
50139
50140                    this.chart.update(
50141                        {
50142                            legend: {
50143								title: {
50144									text: parsedCSV[1][0]
50145								},
50146							},
50147							accessibility: {
50148								description: parsedCSV[4][0]
50149							},
50150                            exporting: {
50151								allowHTML: true,
50152                                menuItemDefinitions:
50153                                {
50154                                    label: {
50155                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
50156                                    }
50157                                },
50158                                buttons: {
50159                                    contextButton: {
50160                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
50161                                    }
50162                                }
50163                            }
50164                        }
50165                    );
50166                    return csv;
50167                }
50168            },
50169			colorAxis: {
50170                dataClasses: [{
50171                    color: '#FFF4CC',
50172					to: 0.1
50173                }, {
50174                    color: '#FFDD67',
50175					from: 0.1,
50176					to: 1.0
50177                }, {
50178					color: Highcharts.eiaColors.yellow,
50179                    from: 1.0,
50180					to: 2.0
50181                }, {
50182					color: '#EFA26D',
50183                    from: 2.0,
50184					to: 10
50185                }, {
50186					color: '#E4640B',
50187                    from: 10
50188                }]
50189            },
50190            legend: {
50191                align: 'center',
50192                backgroundColor: 'white',
50193                borderColor: 'white',
50194                layout: 'horizontal',
50195                symbolPadding: 10,
50196				symbolRadius: 0,
50197				valueDecimals: 2,
50198				labelFormatter: function () {
50199
50200                    if (this.to === 0.1) {
50201
50202						return '< 0.1';
50203                    }
50204					else if (this.from >= 10) {
50205						return ' > ' + Highcharts.numberFormat(this.from, 1);
50206					}
50207					else {
50208						return Highcharts.numberFormat(this.from, 1) + ' - ' + Highcharts.numberFormat((this.to - 0.1), 1);
50209					}
50210                }
50211            },
50212			plotOptions: {
50213				map: {
50214					dataLabels: {
50215						style: {
50216							fontSize: '6.8px'
50217						}
50218					}
50219				}
50220			},
50221			responsive: {
50222				rules: [{
50223					condition: {
50224						maxWidth: 321
50225					},
50226					
50227					chartOptions: {
50228						chart: {
50229							height: 380
50230						},
50231						title: {
50232							margin: 5
50233						},
50234                        plotOptions: {
50235                            map: {
50236                                dataLabels: {
50237                                    style: {
50238                                        fontSize: '7px',
50239                                        lineHeight: 7
50240                                    }
50241                                }
50242                            }
50243                        }
50244					}
50245				},
50246				{
50247					condition: {
50248						minWidth: 322,
50249						maxWidth: 400
50250					},
50251					
50252					chartOptions: {
50253						chart: {
50254							height: 370
50255						},
50256						title: {
50257							margin: 5
50258						},
50259                        plotOptions: {
50260                            map: {
50261                                dataLabels: {
50262                                    style: {
50263                                        fontSize: '8px',
50264                                        lineHeight: 8
50265                                    }
50266                                }
50267                            }
50268                        }
50269					}
50270				},
50271				{
50272					condition: {
50273						minWidth: 401,
50274						maxWidth: 450
50275					},
50276					
50277					chartOptions: {
50278						chart: {
50279							height: 400
50280						},
50281						title: {
50282							margin: 5
50283						},
50284                        plotOptions: {
50285                            map: {
50286                                dataLabels: {
50287                                    style: {
50288                                        fontSize: '8px',
50289                                        lineHeight: 8
50290                                    }
50291                                }
50292                            }
50293                        }
50294					}
50295				},
50296				{
50297					condition: {
50298						minWidth: 451
50299					},
50300					
50301					chartOptions: {
50302						chart: {
50303							height: '65%'
50304						},
50305						title: {
50306							margin: 15
50307						},
50308						plotOptions: {
50309							map: {
50310								dataLabels: {
50311									style: {
50312										fontSize: '16px'
50313									}
50314								}
50315							}
50316						}
50317					}
50318				}]
50319			}
50320        });
50321    }
50322};
50323
50324},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],269:[function(require,module,exports){
50325const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
50326const csvParser = require('../../includes/csvParser');
50327
50328
50329module.exports = function (Highcharts, map, appPath) {
50330
50331    const elementId = 'utility-scale-generation';
50332	let units = '';
50333    let mapData = Highcharts.geojson(map, 'map');
50334
50335    // Our own options definition as two different series, will populate the data in the complete callback
50336    var seriesOptions = [
50337        {
50338            id: "rank1",
50339            type: "map",
50340            mapData : mapData,
50341            allAreas: false,
50342            keys: ["postal-code"],
50343            joinBy: ['hc-a2', 'code'],
50344            data: [],
50345            mapData: mapData,
50346			borderWidth: 0.5,
50347            states: {
50348                hover: {
50349                    brightness: 0,
50350					borderWidth: 1,
50351					borderColor: Highcharts.eiaColors.darkGrey
50352                }
50353            },
50354			color: '#ffffff',
50355            dataLabels: {
50356                enabled: true,
50357                formatter: function () {
50358                    if (this.point.properties) {
50359                        return this.point.properties['hc-a2'];
50360                    }
50361                    return this.point.options.ucName;
50362                }
50363            },
50364            tooltip: {
50365                valueSuffix: ''
50366            }
50367        },
50368        {
50369            type: 'mapline',
50370            data: Highcharts.geojson(map, 'mapline'),
50371            color: 'silver',
50372            nullColor : 'silver',
50373            lineWidth : 1,
50374            showInLegend: false,
50375			enableMouseTracking: false,
50376            states : {
50377                inactive : {
50378                    enabled : false
50379                }
50380            }
50381        }
50382    ];
50383
50384    if ($('#' + elementId).length > 0) {
50385        Highcharts.mapChart(elementId, {
50386            chart: {
50387                map: map,
50388                spacingBottom: 25,
50389                events: {
50390                    load: creditsSizeAndPosition,
50391                    redraw: creditsSizeAndPosition
50392                }
50393            },
50394            mapView : {
50395                insetOptions : {
50396                    borderWidth : 1,
50397                    borderColor : 'silver'
50398                }
50399            },
50400			credits: {
50401                enabled: false,
50402                href: null,
50403                style: {
50404                    cursor: 'normal'
50405                }
50406            },
50407			caption: {
50408				verticalAlign: 'bottom',
50409				useHTML: true,
50410				margin: 0,
50411				style: {
50412					color: '#888',
50413					fontSize: '11px'
50414				},
50415				x: 32,
50416				y: 33
50417			},
50418            tooltip: {
50419                enabled: true,
50420                useHTML: true,
50421                formatter: function () {
50422                    var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : '';
50423                    if (html !== '')
50424                        return html
50425                }
50426            },
50427            data: {
50428                csvURL: appPath + '/solar/charts/' + elementId + '.csv',
50429                startRow: 5,
50430				firstRowAsNames: false,
50431                complete: function (options) {
50432                    var point;
50433                    var i;
50434
50435                    for (i = 0; i < options.series[0].data.length; i++) {
50436
50437                        point = options.series[0].data[i];
50438                        var pointValueString = Highcharts.numberFormat(point.value, 4) + ' ' + units;
50439
50440                        if (pointValueString) {
50441                            seriesOptions[0].data.push({
50442								code: point.name,
50443								nameCode: "<span>" + pointValueString + "</span>",
50444								value: point.value
50445							});
50446                        }
50447
50448                    }
50449
50450                    // replace series options parsed by Highcharts with our own options definition
50451                    options.series = seriesOptions;
50452
50453                },
50454                beforeParse: function (csv) {
50455
50456                    var parsedCSV = csvParser(csv);
50457                    units = parsedCSV[1][0];
50458                    this.chart.title.update({ text: parsedCSV[0][0] });
50459					this.chart.legend.update({title: { text: parsedCSV[1][0] }});
50460                    this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
50461
50462
50463                    this.chart.update(
50464                        {
50465                            legend: {
50466								title: {
50467									text: parsedCSV[1][0]
50468								},
50469							},
50470							accessibility: {
50471								description: parsedCSV[4][0]
50472							},
50473                            exporting: {
50474								allowHTML: true,
50475                                menuItemDefinitions:
50476                                {
50477                                    label: {
50478                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
50479                                    }
50480                                },
50481                                buttons: {
50482                                    contextButton: {
50483                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
50484                                    }
50485                                }
50486                            }
50487                        }
50488                    );
50489                    return csv;
50490                }
50491            },
50492			colorAxis: {
50493                dataClasses: [{
50494                    color: '#FFFFFF',
50495					from: 0,
50496					to: 0
50497                },{
50498                    color: '#FFF4CC',
50499					from: 0.0001,
50500					to: 0.1
50501                }, {
50502                    color: '#FFDD67',
50503					from: 0.1,
50504					to: 1.0
50505                }, {
50506					color: Highcharts.eiaColors.yellow,
50507                    from: 1.0,
50508					to: 5.0
50509                }, {
50510					color: '#EFA26D',
50511                    from: 5.0,
50512					to: 10.0
50513                }, {
50514					color: '#E4640B',
50515                    from: 10,
50516					to: 50
50517                }]
50518            },
50519            legend: {
50520                align: 'center',
50521                backgroundColor: 'white',
50522                borderColor: 'white',
50523                layout: 'horizontal',
50524                symbolPadding: 10,
50525				symbolRadius: 0,
50526				valueDecimals: 2,
50527				labelFormatter: function () {
50528                    if (this.from === 0) {
50529						$(this.legendItem.symbol.element).attr({
50530							strokeWidth: 1,
50531							stroke: '#e7e7e7',
50532							width: 11.5,
50533							height: 11.5,
50534							x: 2.5
50535						});
50536						return '= 0';
50537                    }
50538					else if (this.from === 0.0001) {
50539
50540						return '< 0.1';
50541                    }
50542					else if (this.from === 10) {
50543						return Highcharts.numberFormat(this.from, 1) + ' - ' + Highcharts.numberFormat(this.to, 1);
50544					}
50545					else {
50546						return Highcharts.numberFormat(this.from, 1) + ' - ' + Highcharts.numberFormat((this.to - 0.1), 1);
50547					}
50548                }
50549            },
50550			plotOptions: {
50551				map: {
50552					dataLabels: {
50553						style: {
50554							fontSize: '6.8px'
50555						}
50556					}
50557				}
50558			},
50559			responsive: {
50560				rules: [{
50561					condition: {
50562						maxWidth: 321
50563					},
50564					
50565					chartOptions: {
50566						chart: {
50567							height: 380
50568						},
50569						title: {
50570							margin: 20
50571						},
50572                        plotOptions: {
50573                            map: {
50574                                dataLabels: {
50575                                    style: {
50576                                        fontSize: '7px',
50577                                        lineHeight: 7
50578                                    }
50579                                }
50580                            }
50581                        }
50582					}
50583				},
50584				{
50585					condition: {
50586						minWidth: 322,
50587						maxWidth: 400
50588					},
50589					
50590					chartOptions: {
50591						chart: {
50592							height: 370
50593						},
50594						title: {
50595							margin: 5
50596						},
50597                        plotOptions: {
50598                            map: {
50599                                dataLabels: {
50600                                    style: {
50601                                        fontSize: '8px',
50602                                        lineHeight: 8
50603                                    }
50604                                }
50605                            }
50606                        }
50607					}
50608				},
50609				{
50610					condition: {
50611						minWidth: 401,
50612						maxWidth: 450
50613					},
50614					
50615					chartOptions: {
50616						chart: {
50617							height: 400
50618						},
50619						title: {
50620							margin: 5
50621						},
50622                        plotOptions: {
50623                            map: {
50624                                dataLabels: {
50625                                    style: {
50626                                        fontSize: '8px',
50627                                        lineHeight: 8
50628                                    }
50629                                }
50630                            }
50631                        }
50632					}
50633				},
50634				{
50635					condition: {
50636						minWidth: 451
50637					},
50638					
50639					chartOptions: {
50640						chart: {
50641							height: '65%'
50642						},
50643						title: {
50644							margin: 15
50645						},
50646						plotOptions: {
50647							map: {
50648								dataLabels: {
50649									style: {
50650										fontSize: '16px'
50651									}
50652								}
50653							}
50654						}
50655					}
50656				}]
50657			}
50658        });
50659    }
50660};
50661
50662},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],270:[function(require,module,exports){
50663const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
50664const csvParser = require('../../includes/csvParser');
50665
50666module.exports = function (Highcharts, appPath) {
50667    const elementId = 'energy-net-imports-by-major-sources-totals';
50668    var units = '';
50669
50670    if ($('#' + elementId).length > 0) {
50671        Highcharts.chart(elementId, {
50672            chart: {
50673                type: 'line',
50674                spacingBottom: 25,
50675                events: {
50676                    load: creditsSizeAndPosition,
50677                    redraw: creditsSizeAndPosition
50678                }
50679            },
50680			credits: {
50681                enabled: true,
50682                href: null,
50683                style: {
50684                    cursor: 'normal'
50685                }
50686            },
50687            data: {
50688                csvURL: appPath + '/us-energy-facts/charts/' + elementId + '.csv',
50689                startRow: 5,
50690                firstRowAsNames: true,
50691                beforeParse: function (csv) {
50692                    var parsedCSV = csvParser(csv);
50693                    this.chart.title.update({ text: parsedCSV[0][0] });
50694                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
50695                    units = parsedCSV[1][0];
50696                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
50697                    this.chart.update(
50698                        {
50699							accessibility: {
50700								description: parsedCSV[4][0],
50701							},
50702                            exporting: {
50703                                menuItemDefinitions:
50704                                {
50705                                    label: {
50706                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
50707                                    }
50708                                },
50709                                buttons: {
50710                                    contextButton: {
50711                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
50712                                    }
50713                                }
50714                            }
50715                        }
50716                    );
50717                    return csv;
50718                }
50719            },
50720            xAxis: {
50721                labels: {
50722                    format: "{value}"
50723                },
50724                tickInterval: 5,
50725            },
50726            colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.red, Highcharts.eiaColors.blue, Highcharts.eiaColors.darkGrey, Highcharts.eiaColors.yellow],
50727            yAxis: {
50728                labels: {
50729                    format: "{value}"
50730                },
50731                min: -10,
50732                tickInterval: 5
50733            },
50734            plotOptions: {
50735                line: {
50736                }
50737            },
50738            tooltip: {
50739                shared: true,
50740                useHTML: true,
50741                formatter: function () {
50742                    var html = '<b>' + this.x + '</b><br/>';
50743                    this.points.filter(function (value) {
50744                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
50745                    });
50746                    return html;
50747                }
50748            },
50749			responsive: {
50750                rules: [{
50751                    condition: {
50752                        maxWidth: 450
50753                    },
50754                    chartOptions: {
50755						chart: {
50756							height: 450
50757                        }
50758                    }
50759                },
50760				{
50761					condition: {
50762						minWidth: 451
50763					},
50764					
50765					chartOptions: {
50766						chart: {
50767							height: '65%'
50768						}
50769					}
50770				}]
50771            }
50772        });
50773    }
50774};
50775
50776},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],271:[function(require,module,exports){
50777const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
50778const csvParser = require('../../includes/csvParser');
50779
50780module.exports = function (Highcharts, appPath) {
50781    const elementId = 'import-exports-primary-energy-overview';
50782    var units = '';
50783
50784    if ($('#' + elementId).length > 0) {
50785        Highcharts.chart(elementId, {
50786            chart: {
50787                type: 'line',
50788                spacingBottom: 25,
50789                events: {
50790                    load: creditsSizeAndPosition,
50791                    redraw: creditsSizeAndPosition
50792                }
50793            },
50794			credits: {
50795                enabled: true,
50796                href: null,
50797                style: {
50798                    cursor: 'normal'
50799                }
50800            },
50801            data: {
50802                csvURL: appPath + '/us-energy-facts/charts/' + elementId + '.csv',
50803                startRow: 5,
50804                firstRowAsNames: true,
50805                beforeParse: function (csv) {
50806                    var parsedCSV = csvParser(csv);
50807                    this.chart.title.update({ text: parsedCSV[0][0] });
50808                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
50809                    units = parsedCSV[1][0];
50810                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
50811                    this.chart.update(
50812                        {
50813							accessibility: {
50814								description: parsedCSV[4][0],
50815							},
50816                            exporting: {
50817                                menuItemDefinitions:
50818                                {
50819                                    label: {
50820                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
50821                                    }
50822                                },
50823                                buttons: {
50824                                    contextButton: {
50825                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
50826                                    }
50827                                }
50828                            }
50829                        }
50830                    );
50831                    return csv;
50832                }
50833            },
50834            colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.red, Highcharts.eiaColors.yellow],
50835            xAxis: {
50836                labels: {
50837                    format: "{value}"
50838                },
50839                tickInterval: 6,
50840            },
50841            yAxis: {
50842                labels: {
50843                    format: "{value}"
50844                },
50845                max: 105,
50846                min: 0,
50847                tickInterval: 15
50848            },
50849            plotOptions: {
50850                line: {
50851                }
50852            },
50853            tooltip: {
50854                shared: true,
50855                useHTML: true,
50856                formatter: function () {
50857                    var html = '<b>' + this.x + '</b><br/>';
50858                    this.points.filter(function (value) {
50859                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>';
50860                    });
50861                    return html;
50862                }
50863            },
50864			responsive: {
50865                rules: [{
50866                    condition: {
50867                        maxWidth: 450
50868                    },
50869                    chartOptions: {
50870						chart: {
50871							height: 450
50872                        }
50873                    }
50874                },
50875				{
50876					condition: {
50877						minWidth: 451
50878					},
50879					
50880					chartOptions: {
50881						chart: {
50882							height: '65%'
50883						}
50884					}
50885				}]
50886            }
50887        });
50888    }
50889};
50890
50891},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],272:[function(require,module,exports){
50892const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
50893const csvParser = require('../../includes/csvParser');
50894
50895module.exports = function (Highcharts, appPath) {
50896    const elementId = 'primary-consumption-by-major-source';
50897    var units = '';
50898
50899    if ($('#' + elementId).length > 0) {
50900        Highcharts.chart(elementId, {
50901            chart: {
50902                type: 'area',
50903                spacingBottom: 25,
50904                events: {
50905                    load: creditsSizeAndPosition,
50906                    redraw: creditsSizeAndPosition
50907                }
50908            },
50909			credits: {
50910                enabled: true,
50911                href: null,
50912                style: {
50913                    cursor: 'normal'
50914                }
50915            },
50916            title: {
50917                text: ''
50918            },
50919            data: {
50920                csvURL: appPath + '/us-energy-facts/charts/' + elementId + '.csv',
50921                startRow: 5,
50922                firstRowAsNames: true,
50923                beforeParse: function (csv) {
50924                    var parsedCSV = csvParser(csv);
50925                    this.chart.title.update({ text: parsedCSV[0][0] });
50926                    units = parsedCSV[1][0];
50927                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
50928                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
50929                    this.chart.update(
50930                        {
50931							accessibility: {
50932								description: parsedCSV[4][0],
50933							},
50934                            exporting: {
50935                                menuItemDefinitions:
50936                                {
50937                                    label: {
50938                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
50939                                    }
50940                                },
50941                                buttons: {
50942                                    contextButton: {
50943                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
50944                                    }
50945                                }
50946                            }
50947                        }
50948                    );
50949                    return csv;
50950                }
50951
50952            },
50953			colors: [Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.blue, Highcharts.eiaColors.red, Highcharts.eiaColors.brown, Highcharts.eiaColors.green],
50954            xAxis: {
50955                labels: {
50956                    format: "{value}",
50957                },
50958                tickInterval: 5
50959            },
50960            yAxis: {
50961                labels: {
50962                    format: "{value:,.0f}"
50963                },
50964                tickInterval: 10,
50965				reversedStacks:false,
50966				maxPadding: 0
50967            },
50968			legend: {
50969				reversed: true
50970			},
50971            plotOptions: {
50972                area: {
50973                    stacking: 'normal'
50974                }
50975            },
50976            tooltip: {
50977                useHTML: true,
50978                shared: true,
50979                formatter: function () {
50980                    var html = '<b>' + this.x + '</b><br/>';
50981                    this.points.filter(function (value) {
50982                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>';
50983                    });
50984                    return html;
50985                }
50986            },
50987			responsive: {
50988                rules: [{
50989                    condition: {
50990                        maxWidth: 450
50991                    },
50992                    chartOptions: {
50993						chart: {
50994							height: 450
50995                        }
50996                    }
50997                },
50998				{
50999					condition: {
51000						minWidth: 451
51001					},
51002					
51003		
51003			chartOptions: {
51004						chart: {
51005							height: '65%'
51006						}
51007					}
51008				}]
51009            }
51010        });
51011    }
51012};
51013
51014},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],273:[function(require,module,exports){
51015const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
51016const csvParser = require('../../includes/csvParser');
51017
51018module.exports = function (Highcharts, appPath) {
51019    const elementId = 'primary-energy-production-by-major-source-history';
51020    var units = '';
51021
51022    if ($('#' + elementId).length > 0) {
51023        Highcharts.chart(elementId, {
51024            chart: {
51025                type: 'area',
51026                spacingBottom: 25,
51027                events: {
51028                    load: creditsSizeAndPosition,
51029                    redraw: creditsSizeAndPosition
51030                }
51031            },
51032			credits: {
51033                enabled: true,
51034                href: null,
51035                style: {
51036                    cursor: 'normal'
51037                }
51038            },
51039            title: {
51040                text: ''
51041            },
51042            data: {
51043                csvURL: appPath + '/us-energy-facts/charts/' + elementId + '.csv',
51044                startRow: 5,
51045                firstRowAsNames: true,
51046                beforeParse: function (csv) {
51047                    var parsedCSV = csvParser(csv);
51048                    this.chart.title.update({ text: parsedCSV[0][0] });
51049                    units = parsedCSV[1][0];
51050                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
51051                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
51052                    this.chart.update(
51053                        {
51054							accessibility: {
51055								description: parsedCSV[4][0],
51056							},
51057                            exporting: {
51058                                menuItemDefinitions:
51059                                {
51060                                    label: {
51061                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
51062                                    }
51063                                },
51064                                buttons: {
51065                                    contextButton: {
51066                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
51067                                    }
51068                                }
51069                            }
51070                        }
51071                    );
51072                    return csv;
51073                }
51074
51075            },
51076			colors: [Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.blue, Highcharts.eiaColors.red,Highcharts.eiaColors.lightRed, Highcharts.eiaColors.brown, Highcharts.eiaColors.green],
51077            xAxis: {
51078                labels: {
51079                    format: "{value}",
51080                },
51081                tickInterval: 5
51082            },
51083            yAxis: {
51084                labels: {
51085                    format: "{value:,.0f}"
51086                },
51087                tickInterval: 10,
51088				reversedStacks:false,
51089				maxPadding: 0
51090            },
51091			legend: {
51092				reversed: true
51093			},
51094            plotOptions: {
51095                area: {
51096                    stacking: 'normal'
51097                }
51098            },
51099            tooltip: {
51100                useHTML: true,
51101                shared: true,
51102                formatter: function () {
51103                    var html = '<b>' + this.x + '</b><br/>';
51104                    this.points.filter(function (value) {
51105                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>';
51106                    });
51107                    return html;
51108                }
51109            },
51110			responsive: {
51111                rules: [{
51112                    condition: {
51113                        maxWidth: 450
51114                    },
51115                    chartOptions: {
51116						chart: {
51117							height: 450
51118                        }
51119                    }
51120                },
51121				{
51122					condition: {
51123						minWidth: 451
51124					},
51125					
51126					chartOptions: {
51127						chart: {
51128							height: '65%'
51129						}
51130					}
51131				}]
51132            }
51133        });
51134    }
51135};
51136
51137},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],274:[function(require,module,exports){
51138const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
51139const csvParser = require('../../includes/csvParser');
51140
51141module.exports = function (Highcharts, appPath) {
51142    const elementId = 'primary-energy-production-by-major-sources';
51143    let units = '';
51144    if ($('#' + elementId).length > 0) {
51145        Highcharts.chart(elementId, {
51146            chart: {
51147                type: 'column',
51148                spacingBottom: 25,
51149                events: {
51150                    load: creditsSizeAndPosition,
51151                    redraw: creditsSizeAndPosition
51152                }
51153            },
51154			credits: {
51155                enabled: true,
51156                href: null,
51157                style: {
51158                    cursor: 'normal'
51159                }
51160            },
51161            data: {
51162                csvURL: appPath + '/us-energy-facts/charts/' + elementId + '.csv',
51163                startRow: 5,
51164                firstRowAsNames: false,
51165
51166                beforeParse: function (csv) {
51167                    var parsedCSV = csvParser(csv);
51168                    units = parsedCSV[1][0];
51169                    this.chart.title.update({ text: parsedCSV[0][0] });
51170                    this.chart.yAxis[0].update({ title: { text: units } });
51171                    /*this.chart.xAxis[0].update({ categories: parsedCSV[5] });*/
51172                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
51173                    this.chart.update(
51174                        {
51175							accessibility: {
51176								description: parsedCSV[4][0],
51177							},
51178                            exporting: {
51179                                menuItemDefinitions:
51180                                {
51181                                    label: {
51182                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
51183                                    }
51184                                },
51185                                buttons: {
51186                                    contextButton: {
51187                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
51188                                    }
51189                                }
51190                            }
51191                        }
51192                    );
51193                    return csv;
51194                }
51195            },
51196			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.brown, Highcharts.eiaColors.lightOrange, Highcharts.eiaColors.green, Highcharts.eiaColors.purple, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.yellow],
51197            xAxis: {
51198                labels: {
51199                    enabled: true
51200                }
51201            },
51202            plotOptions: {
51203                column: {
51204                    dataLabels: {
51205                        enabled: true,
51206                        format: '{point.y:.1f}',
51207                    },
51208                    grouping: false,
51209					colorByPoint: true
51210                }
51211            },
51212            yAxis: {
51213                tickInterval: 5,
51214                labels: {
51215                    format: '{value}'
51216                }
51217            },
51218            tooltip: {
51219                formatter: function () {
51220                    return '<b>' + this.key + '</b><br/>' + this.y.toFixed(1) + ' ' + units;
51221                }
51222            },
51223            legend: {
51224                enabled: false
51225            },
51226			responsive: {
51227                rules: [{
51228                    condition: {
51229                        maxWidth: 450
51230                    },
51231                    chartOptions: {
51232						chart: {
51233							height: 450
51234                        }
51235                    }
51236                },
51237				{
51238					condition: {
51239						minWidth: 451
51240					},
51241					
51242					chartOptions: {
51243						chart: {
51244							height: '65%'
51245						}
51246					}
51247				}]
51248            }
51249        });
51250    }
51251};
51252
51253},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],275:[function(require,module,exports){
51254
51255module.exports = function (Highcharts, map) {
51256
51257    const elementId = 'state-energy-data-system-map';
51258    let mapData = Highcharts.geojson(map, 'map');
51259
51260    if ($('#' + elementId).length > 0) {
51261        Highcharts.mapChart(elementId, {
51262            chart: {
51263                map: map,
51264                spacingBottom: 40
51265            },
51266            mapView : {
51267                insetOptions : {
51268                    borderWidth : 1,
51269                    borderColor : 'silver'
51270                }
51271            },
51272			credits: {
51273                enabled: true,
51274                href: null,
51275				text: 'Data source: U.S. Energy Information Administration',
51276                style: {
51277                    cursor: 'normal'
51278                }
51279            },
51280            title:{
51281                text:'Click a state for data from the State Energy Data System',
51282				margin: 15
51283            },
51284			accessibility: {
51285				description: 'An interactive map providing links to state data from the State Energy Data System',
51286			},
51287            tooltip: {
51288                enabled: true,
51289                useHTML: true,
51290                formatter: function () {
51291                    return '<b/>'+this.point.name + '</b>';
51292                }
51293            },
51294            exporting:{
51295                enabled: false
51296            },
51297            series:[
51298                {
51299                    id: "states",
51300                    type: "map",
51301                    mapData : mapData,
51302                    allAreas: false,
51303                    keys: ["postal-code"],
51304                    nullColor: Highcharts.eiaColors.blue,
51305                    color: Highcharts.eiaColors.blue,
51306                    joinBy: ['hc-a2', 'code'],
51307                    data: mapData,
51308                    cursor: 'pointer',
51309        			borderWidth: 0.5,
51310                    states: {
51311                        hover: {
51312                            brightness: 0,
51313        					color: Highcharts.eiaColors.green
51314                        }
51315                    },
51316                    dataLabels: {
51317                        enabled: true,
51318                        formatter: function () {
51319                            if (this.point.properties) {
51320                                return this.point.properties['hc-a2'];
51321                            }
51322                            return this.point.options.ucName;
51323                        },
51324                        style: {
51325                            fontSize: '10px'
51326                        }
51327                    },
51328                    events:{
51329                        click: function(e){
51330                            var abr = e.point.properties['postal-code'];
51331                            window.location = "/state/seds/seds-data-complete.php?sid="+abr;
51332                        }
51333                    }
51334                },
51335                {
51336                    type: 'mapline',
51337                    data: Highcharts.geojson(map, 'mapline'),
51338                    color: 'silver',
51339                    nullColor : 'silver',
51340                    lineWidth : 1,
51341                    showInLegend: false,
51342        			enableMouseTracking: false,
51343                    states : {
51344                        inactive : {
51345                            enabled : false
51346                        }
51347                    }
51348                }
51349            ],
51350			legend:{
51351                enabled:false
51352            },
51353			responsive: {
51354				rules: [{
51355					condition: {
51356						maxWidth: 450
51357					},
51358
51359					chartOptions: {
51360						chart: {
51361							height: 300
51362						},
51363						mapNavigation:{
51364							enabled: false,
51365							enableTouchZoom: true
51366						}
51367					}
51368				},
51369				{
51370					condition: {
51371						minWidth: 451
51372					},
51373
51374					chartOptions: {
51375						chart: {
51376							height: '65%'
51377						},
51378						mapNavigation:{
51379							enabled: true
51380						}
51381					}
51382				}]
51383			}
51384        });
51385    }
51386};
51387
51388},{}],276:[function(require,module,exports){
51389
51390module.exports = function (Highcharts, map) {
51391
51392    const elementId = 'state-energy-profile-map';
51393    let mapData = Highcharts.geojson(map, 'map');
51394
51395    if ($('#' + elementId).length > 0) {
51396        Highcharts.mapChart(elementId, {
51397            chart: {
51398                map: map,
51399                spacingBottom: 40
51400            },
51401            mapView : {
51402                insetOptions : {
51403                    borderWidth : 1,
51404                    borderColor : 'silver'
51405                }
51406            },
51407			credits: {
51408                enabled: true,
51409                href: null,
51410				text: 'Data source: U.S. Energy Information Administration',
51411                style: {
51412                    cursor: 'normal'
51413                }
51414            },
51415            title:{
51416                text:'Click a state for its energy profile',
51417				margin: 15
51418            },
51419			accessibility: {
51420				description: 'An interactive map providing links to state energy profiles',
51421			},
51422            tooltip: {
51423                enabled: true,
51424                useHTML: true,
51425                formatter: function () {
51426                    return '<b/>'+this.point.name + '</b>';
51427                }
51428            },
51429            exporting:{
51430                enabled: false
51431            },
51432            series:[
51433                {
51434                    id: "states",
51435                    type: "map",
51436                    mapData : mapData,
51437                    allAreas: false,
51438                    keys: ["postal-code"],
51439                    nullColor : Highcharts.eiaColors.green,
51440                    color: Highcharts.eiaColors.green,
51441                    joinBy: ['hc-a2', 'code'],
51442                    data: mapData,
51443                    cursor: 'pointer',
51444        			borderWidth: 0.5,
51445                    states: {
51446                        hover: {
51447                            brightness: 0,
51448        					color: Highcharts.eiaColors.blue
51449                        }
51450                    },
51451                    dataLabels: {
51452                        enabled: true,
51453                        formatter: function () {
51454                            if (this.point.properties) {
51455                                return this.point.properties['hc-a2'];
51456                            }
51457                            return this.point.options.ucName;
51458                        },
51459                        style: {
51460                            fontSize: '10px'
51461                        }
51462                    },
51463                    events:{
51464                        click: function(e){
51465                            var abr = e.point.properties['postal-code'];
51466                            window.location = "/states/"+abr+"/";
51467                        }
51468                    }
51469                },
51470                {
51471                    type: 'mapline',
51472                    data: Highcharts.geojson(map, 'mapline'),
51473                    color: 'silver',
51474                    nullColor : 'silver',
51475                    lineWidth : 1,
51476                    showInLegend: false,
51477        			enableMouseTracking: false,
51478                    states : {
51479                        inactive : {
51480                            enabled : false
51481                        }
51482                    }
51483                }
51484            ],
51485			legend:{
51486                enabled:false
51487            },
51488			responsive: {
51489				rules: [{
51490					condition: {
51491						maxWidth: 450
51492					},
51493
51494					chartOptions: {
51495						chart: {
51496							height: 300
51497						},
51498						mapNavigation:{
51499							enabled: false,
51500							enableTouchZoom: true
51501						}
51502					}
51503				},
51504				{
51505					condition: {
51506						minWidth: 451
51507					},
51508
51509					chartOptions: {
51510						chart: {
51511							height: '65%'
51512						},
51513						mapNavigation:{
51514							enabled: true
51515						}
51516					}
51517				}]
51518			}
51519        });
51520    }
51521};
51522
51523},{}],277:[function(require,module,exports){
51524const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
51525const csvParser = require('../../includes/csvParser');
51526
51527module.exports = function (Highcharts, appPath) {
51528    const elementId = 'air-conditioning-year-constructed';
51529    if ($('#' + elementId).length > 0) {
51530        Highcharts.chart(elementId, {
51531            chart: {
51532                type: 'column',
51533                spacingBottom: 30,
51534                events: {
51535                    load: creditsSizeAndPosition,
51536                    redraw: creditsSizeAndPosition
51537                }
51538            },
51539			credits: {
51540                enabled: true,
51541                href: null,
51542                style: {
51543                    cursor: 'normal'
51544                }
51545            },
51546			title: {
51547				margin: 15
51548            },
51549            data: {
51550                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
51551                startRow: 3,
51552                firstRowAsNames: true,
51553                beforeParse: function (csv) {
51554                    var parsedCSV = csvParser(csv);
51555                    this.chart.title.update({ text: parsedCSV[0][0] });
51556                    this.chart.credits.update({ text: parsedCSV[1][0] });
51557                    this.chart.yAxis[0].update({ title: { text: null } });
51558                    this.chart.update(
51559                        {
51560							accessibility: {
51561								description: parsedCSV[2][0],
51562							},
51563                            exporting: {
51564                                menuItemDefinitions:
51565                                {
51566                                    label: {
51567                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
51568                                    }
51569                                },
51570                                buttons: {
51571                                    contextButton: {
51572                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
51573                                    }
51574                                }
51575                            }
51576                        }
51577                    );
51578                    return csv;
51579                }
51580            },
51581			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
51582            xAxis: {
51583                labels: {
51584                    enabled: true
51585                }
51586            },
51587            yAxis: {
51588                tickInterval: 10,
51589                labels: {
51590                    format: '{value}%'
51591                }
51592            },
51593            tooltip: {
51594                formatter: function () {
51595                    return '<b>' + this.key + '</b><br/><b>' + this.series.name + ':</b> ' + this.y.toFixed(0) + '%';
51596                }
51597            },
51598            legend: {
51599                enabled: true
51600            },
51601			responsive: {
51602                rules: [{
51603                    condition: {
51604                        maxWidth: 450
51605                    },
51606                    chartOptions: {
51607						chart: {
51608							height: 450
51609						}
51610                    }
51611                },
51612				{
51613					condition: {
51614						minWidth: 451
51615					},
51616					
51617					chartOptions: {
51618						chart: {
51619							height: '65%'
51620						}
51621					}
51622				}]
51623            }
51624        });
51625    }
51626};
51627
51628},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],278:[function(require,module,exports){
51629const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
51630const csvParser = require('../../includes/csvParser');
51631
51632module.exports = function (Highcharts, appPath) {
51633    const elementId = 'commercial-bldgs-intensity-trend';
51634    var units = '';
51635
51636    if ($('#' + elementId).length > 0) {
51637        Highcharts.chart(elementId, {
51638            chart: {
51639                type: 'line',
51640                spacingBottom: 30,
51641                events: {
51642                    load: creditsSizeAndPosition,
51643                    redraw: creditsSizeAndPosition
51644                }
51645            },
51646            credits: {
51647                enabled: true,
51648                href: null,
51649                style: {
51650                    cursor: 'normal'
51651                }
51652            },
51653            data: {
51654                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
51655                startRow: 5,
51656                firstRowAsNames: true,
51657                beforeParse: function (csv) {
51658                    var parsedCSV = csvParser(csv);
51659                    this.chart.title.update({ text: parsedCSV[0][0] });
51660                    units = parsedCSV[1][0];
51661                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
51662                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
51663                    this.chart.update(
51664                        {
51665							accessibility: {
51666								description: parsedCSV[4][0],
51667							},
51668                            exporting: {
51669                                menuItemDefinitions:
51670                                {
51671                                    label: {
51672                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
51673                                    }
51674                                },
51675                                buttons: {
51676                                    contextButton: {
51677                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
51678                                    }
51679                                }
51680                            }
51681                        }
51682                    );
51683                    return csv;
51684                }
51685            },
51686            colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
51687            xAxis: {
51688				type: "category",
51689                labels: {
51690                    format: "{value}"
51691                }
51692            },
51693            yAxis: {
51694                title: {
51695					enabled: false
51696				},
51697                labels: {
51698                    format: "{value:.0f}"
51699                },
51700				tickInterval: 20
51701            },
51702            plotOptions: {
51703                line: {
51704                    marker: {
51705                        enabled: true,
51706                        radius: 5
51707                    }
51708                }
51709            },
51710            tooltip: {
51711                useHTML: true,
51712                shared: true,
51713                formatter: function () {
51714                    let html = "<b>" + this.points[0].key + "</b><br/>";
51715                    this.points.filter(function (value) {
51716                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
51717                    });
51718                    return html;
51719                }
51720            },
51721            responsive: {
51722                rules: [{
51723                    condition: {
51724                        maxWidth: 450
51725                    },
51726                    chartOptions: {
51727						chart: {
51728							height: 500
51729						}
51730                    }
51731                },
51732				{
51733					condition: {
51734						minWidth: 451
51735					},
51736					
51737					chartOptions: {
51738						chart: {
51739							height: '65%'
51740						}
51741					}
51742				}]
51743            }
51744        });
51745    }
51746};
51747
51748},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],279:[function(require,module,exports){
51749const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
51750const csvParser = require('../../includes/csvParser');
51751
51752module.exports = function (Highcharts, appPath) {
51753    const elementId = 'commercial-building-floorspace-by-census-region';
51754    var units;
51755
51756    if ($('#' + elementId).length > 0) {
51757        Highcharts.chart(elementId, {
51758            chart: {
51759                type: 'bar',
51760                spacingBottom: 25,
51761                events: {
51762                    load: creditsSizeAndPosition,
51763                    redraw: creditsSizeAndPosition
51764                }
51765            },
51766			credits: {
51767                enabled: true,
51768                href: null,
51769                style: {
51770                    cursor: 'normal'
51771                }
51772            },
51773			title: {
51774				margin: 15
51775            },
51776            data: {
51777                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
51778                startRow: 4,
51779                firstRowAsNames: false,
51780                complete: function (options) {
51781                    options.series[0].data.reverse();
51782                },
51783                beforeParse: function (csv) {
51784                    var parsedCSV = csvParser(csv);
51785                    this.chart.title.update({ text: parsedCSV[0][0] });
51786                    this.chart.credits.update({ text: parsedCSV[2][0] });
51787                    units = parsedCSV[1][0];
51788                    this.chart.subtitle.update({
51789                        text: parsedCSV[1][0],
51790                        style: {
51791                            color: "#888",
51792                            fontWeight: "bold",
51793                            fontSize: "12px"
51794                        }
51795                    });
51796                    this.chart.update(
51797                        {
51798							accessibility: {
51799								description: parsedCSV[3][0],
51800							},
51801                            exporting: {
51802                                menuItemDefinitions:
51803                                {
51804                                    label: {
51805                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
51806                                    }
51807                                },
51808                                buttons: {
51809                                    contextButton: {
51810                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
51811                                    }
51812                                }
51813                            }
51814                        }
51815                    );
51816                    return csv;
51817                }
51818            },
51819            yAxis: {
51820                tickInterval: 10,
51821                labels: {
51822                    format: '{value:,.1f}',
51823                },
51824                title: {
51825                    text: ''
51826                }
51827            },
51828            tooltip: {
51829                useHTML: true,
51830                formatter: function () {
51831                    return '<b>' + this.key + '</b>: ' + this.y + ' ' + units;
51832                }
51833            },
51834            legend: {
51835                enabled: false
51836            },
51837            plotOptions: {
51838                bar
51838: {
51839                    dataLabels: {
51840                        enabled: true,
51841						style: {
51842							color: Highcharts.eiaColors.darkGrey
51843						}
51844                    }
51845                }
51846            },
51847			responsive: {
51848                rules: [{
51849                    condition: {
51850                        maxWidth: 450
51851                    },
51852                    chartOptions: {
51853						chart: {
51854							height: 450
51855						}
51856                    }
51857                },
51858				{
51859					condition: {
51860						minWidth: 451
51861					},
51862					
51863					chartOptions: {
51864						chart: {
51865							height: '65%'
51866						}
51867					}
51868				}]
51869            }
51870        });
51871    }
51872};
51873
51874},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],280:[function(require,module,exports){
51875const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
51876const csvParser = require('../../includes/csvParser');
51877
51878module.exports = function (Highcharts, appPath) {
51879    const elementId = 'commercial-buildings-by-major-end-uses';
51880    var units;
51881
51882    if ($('#' + elementId).length > 0) {
51883        Highcharts.chart(elementId, {
51884            chart: {
51885                events: {
51886                    load: creditsSizeAndPosition,
51887                    redraw: creditsSizeAndPosition
51888                },
51889                type: 'column',
51890                spacingBottom: 30
51891            },
51892			credits: {
51893                enabled: true,
51894                href: null,
51895                style: {
51896                    cursor: 'normal'
51897                }
51898            },
51899            data: {
51900                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
51901                startRow: 4,
51902                firstRowAsNames: false,
51903                
51904                beforeParse: function (csv) {
51905                    var parsedCSV = csvParser(csv);
51906                    this.chart.title.update({ text: parsedCSV[0][0] });
51907                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
51908                    units = parsedCSV[1][0];
51909                    this.chart.credits.update({ text: parsedCSV[2][0] });
51910                    this.chart.update(
51911                        {
51912							accessibility: {
51913								description: parsedCSV[3][0],
51914							},
51915                            exporting: {
51916                                menuItemDefinitions:
51917                                {
51918                                    label: {
51919                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
51920                                    }
51921                                },
51922                                buttons: {
51923                                    contextButton: {
51924                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
51925                                    }
51926                                }
51927                            }
51928                        }
51929                    );
51930                    return csv;
51931                }
51932            },
51933			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.grey, Highcharts.eiaColors.extraLightBlue],
51934            xAxis: {
51935                labels: {
51936                    enabled: true
51937                }
51938            },
51939            yAxis: [{
51940                tickInterval: 200,
51941                labels: {
51942                    format: '{value:,.0f}'
51943                }
51944            }],
51945            tooltip: {
51946                formatter: function () {
51947                    var format = '<b>' + this.key + '</b>: ' + Highcharts.numberFormat(this.y) + ' ' + units;
51948                    return format;
51949                }
51950            },
51951            legend: {
51952                enabled: false
51953            },
51954            plotOptions: {
51955                column: {
51956                    dataLabels: {
51957                        enabled: true,
51958                        crop: false,
51959                        overflow: 'allow',
51960                        formatter: function () {
51961                            var sum = 0;
51962                            for (var i = 0; i < this.series.processedYData.length; i++) {
51963                                if (this.series.processedYData[i]) {
51964                                    sum += parseInt(this.series.processedYData[i]);
51965                                }
51966                            }
51967                            return ((this.y * 100) / sum).toFixed(0) + '%';
51968                        },
51969						style: {
51970							color: Highcharts.eiaColors.darkGrey
51971						}
51972                    }
51973                }
51974            }
51975        });
51976    }
51977};
51978
51979},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],281:[function(require,module,exports){
51980const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
51981const csvParser = require('../../includes/csvParser');
51982
51983module.exports = function (Highcharts, appPath) {
51984    const elementId = 'commercial-buildings-census-region-energy-use-type';
51985    var units;
51986
51987    if ($('#' + elementId).length > 0) {
51988        Highcharts.chart(elementId, {
51989            chart: {
51990                spacingBottom: 25,
51991                events: {
51992                    load: creditsSizeAndPosition,
51993                    redraw: creditsSizeAndPosition
51994                },
51995                type: 'bar'
51996            },
51997			credits: {
51998                enabled: true,
51999                href: null,
52000                style: {
52001                    cursor: 'normal'
52002                }
52003            },
52004            data: {
52005                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
52006                startRow: 5,
52007                firstRowAsNames: true,
52008                beforeParse: function (csv) {
52009                    var parsedCSV = csvParser(csv);
52010                    this.chart.title.update({ text: parsedCSV[0][0] });
52011                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
52012                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
52013                    units = parsedCSV[1][0];
52014                    this.chart.update(
52015                        {
52016							accessibility: {
52017								description: parsedCSV[4][0],
52018							},
52019                            exporting: {
52020                                menuItemDefinitions:
52021                                {
52022                                    label: {
52023                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
52024                                    }
52025                                },
52026                                buttons: {
52027                                    contextButton: {
52028                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
52029                                    }
52030                                }
52031                            }
52032                        }
52033                    );
52034                    return csv;
52035                }
52036            },
52037            xAxis: {
52038                labels: {
52039                    enabled: true,
52040                    format: '{value}'
52041                },
52042				reversed: false,
52043                type: 'category'
52044            },
52045            yAxis: [{
52046				title: {
52047					enabled: false
52048				},
52049                labels: {
52050                    format: '{value:,.0f}'
52051                },
52052				reversedStacks: false
52053				
52054            }],
52055            tooltip: {
52056                useHTML: true,
52057                shared: true,
52058                formatter: function () {
52059                    var format = '<b>' + this.points[0].key + '</b><br/>';
52060                    for (var i = 0; i < this.points.length; i++) {
52061                        format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b>  <span>' + Highcharts.numberFormat(this.points[i].y) + ' ' + units + '</span><br/>';
52062                    }
52063                    return format;
52064                }
52065            },
52066            legend: {
52067                enabled: true,
52068            },
52069            plotOptions: {
52070                bar: {
52071                    stacking: 'normal'
52072                }
52073            },
52074            responsive: {
52075                rules: [{
52076                    condition: {
52077                        maxWidth: 450
52078                    },
52079                    chartOptions: {
52080                        chart: {
52081                            height: 500
52082                        },
52083                        plotOptions: {
52084                            column: {
52085                                dataLabels: {
52086                                    enabled: false
52087                                }
52088                            }
52089                        }
52090                    }
52091                },
52092                {
52093                    condition: {
52094                        minWidth: 451
52095                    },
52096
52097                    chartOptions: {
52098                        chart: {
52099                            height: '65%'
52100                        }
52101                    }
52102                }]
52103            }
52104        });
52105    }
52106};
52107
52108},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],282:[function(require,module,exports){
52109const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
52110const csvParser = require('../../includes/csvParser');
52111
52112module.exports = function (Highcharts, appPath) {
52113    const elementId = 'commercial-buildings-electricity-end-uses';
52114    var units;
52115
52116    if ($('#' + elementId).length > 0) {
52117        Highcharts.chart(elementId, {
52118            chart: {
52119                spacingBottom: 25,
52120                events: {
52121                    load: creditsSizeAndPosition,
52122                    redraw: creditsSizeAndPosition
52123                },
52124                type: 'bar'
52125            },
52126			credits: {
52127                enabled: true,
52128                href: null,
52129                style: {
52130                    cursor: 'normal'
52131                }
52132            },
52133            data: {
52134                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
52135                startRow: 5,
52136                firstRowAsNames: true,
52137                beforeParse: function (csv) {
52138                    var parsedCSV = csvParser(csv);
52139                    this.chart.title.update({ text: parsedCSV[0][0] });
52140                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
52141                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
52142                    units = parsedCSV[1][0];
52143                    this.chart.update(
52144                        {
52145							accessibility: {
52146								description: parsedCSV[4][0],
52147							},
52148                            exporting: {
52149                                menuItemDefinitions:
52150                                {
52151                                    label: {
52152                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
52153                                    }
52154                                },
52155                                buttons: {
52156                                    contextButton: {
52157                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
52158                                    }
52159                                }
52160                            }
52161                        }
52162                    );
52163                    return csv;
52164                }
52165            },
52166			/*colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.red],*/
52167            xAxis: {
52168                labels: {
52169                    enabled: true,
52170                    format: '{value}'
52171                },
52172				reversed: true,
52173                type: 'category'
52174            },
52175            yAxis: [{
52176				title: {
52177					enabled: false
52178				},
52179                labels: {
52180                    format: '{value:,.0f}'
52181                }
52182				
52183            }],
52184            tooltip: {
52185                useHTML: true,
52186                shared: true,
52187                formatter: function () {
52188                    var format = '<b>' + this.points[0].key + '</b><br/>';
52189                    for (var i = 0; i < this.points.length; i++) {
52190                        format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b>  <span>' + Highcharts.numberFormat(this.points[i].y) + ' ' + units + ')\</span><br/>';
52191                    }
52192                    return format;
52193                }
52194            },
52195            legend: {
52196                enabled: true,
52197            },
52198			series: [{
52199				dataSorting: {
52200					enabled: true,
52201					matchByName: true,
52202					sortKey: 'this.points[i].total'
52203				}
52204			}],
52205            plotOptions: {
52206                bar: {
52207                    stacking: 'normal'
52208                }
52209            },
52210            responsive: {
52211                rules: [{
52212                    condition: {
52213                        maxWidth: 450
52214                    },
52215                    chartOptions: {
52216                        chart: {
52217                            height: 600
52218                        },
52219                        plotOptions: {
52220                            column: {
52221                                dataLabels: {
52222                                    enabled: false
52223                                }
52224                            }
52225                        }
52226                    }
52227                },{
52228                    condition: {
52229						minWidth:451,
52230                        maxWidth: 668
52231                    },
52232                    chartOptions: {
52233                        chart: {
52234                            height: 550
52235                        },
52236                        plotOptions: {
52237                            column: {
52238                                dataLabels: {
52239                                    enabled: false
52240                                }
52241                            }
52242                        }
52243                    }
52244                },
52245                {
52246                    condition: {
52247                        minWidth: 669
52248                    },
52249
52250                    chartOptions: {
52251                        chart: {
52252                            height: '65%'
52253                        }
52254                    }
52255                }]
52256            }
52257        });
52258    }
52259};
52260
52261},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],283:[function(require,module,exports){
52262const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
52263const csvParser = require('../../includes/csvParser');
52264
52265module.exports = function (Highcharts, appPath) {
52266    const elementId = 'commercial-buildings-electricity-natgas-use';
52267    var units = '';
52268
52269    if ($('#' + elementId).length > 0) {
52270        Highcharts.chart(elementId, {
52271            chart: {
52272                type: 'bar',
52273                spacingBottom: 35,
52274                events: {
52275                    load: creditsSizeAndPosition,
52276                    redraw: creditsSizeAndPosition
52277                }
52278            },
52279			credits: {
52280                enabled: true,
52281                href: null,
52282                style: {
52283                    cursor: 'normal'
52284                }
52285            },
52286            title: {
52287                text: '',
52288				margin: 15
52289            },
52290            data: {
52291                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
52292                startRow: 5,
52293                firstRowAsNames: true,
52294
52295                beforeParse: function
52295 (csv) {
52296                    var parsedCSV = csvParser(csv);
52297                    this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] });
52298                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
52299                    units = parsedCSV[1][0];
52300                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
52301                    this.chart.update(
52302                        {
52303							accessibility: {
52304								description: parsedCSV[4][0],
52305							},
52306                            exporting: {
52307                                menuItemDefinitions:
52308                                {
52309                                    label: {
52310                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
52311                                    }
52312                                },
52313                                buttons: {
52314                                    contextButton: {
52315                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
52316                                    }
52317                                }
52318                            }
52319                        }
52320                    );
52321                    return csv;
52322                }
52323
52324            },
52325			colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.blue],
52326			yAxis: {
52327				title: {
52328					enabled: false
52329				},
52330				labels: {
52331					format: '{value:,.0f}',
52332					align: 'right',
52333				}
52334			},
52335			xAxis: {
52336				reversed: false,
52337				labels: {
52338					style: {
52339						textOverflow: 'none',
52340						lineHeight: '12px'
52341					}
52342				}
52343			},
52344			series: [{
52345				dataSorting: {
52346					enabled: false,
52347					matchByName: true,
52348					sortKey: 'this.points[i].total'
52349				}
52350			}],
52351            tooltip: {
52352                useHTML: true,
52353                formatter: function () {
52354                    return "<span><b>" + this.key + "</b><br/> " + Highcharts.numberFormat(this.y, 0) + "</span> " + units;
52355                }
52356            },
52357			responsive: {
52358				rules: [{
52359					condition: {
52360						maxWidth: 450
52361					},
52362
52363					chartOptions: {
52364						chart: {
52365							height: 700
52366						}
52367					}
52368				},
52369				{
52370					condition: {
52371						minWidth: 451,
52372						maxWidth: 667
52373					},
52374
52375					chartOptions: {
52376						chart: {
52377							height: '80%'
52378						}
52379					}
52380				},
52381				{
52382					condition: {
52383						minWidth: 668
52384					},
52385
52386					chartOptions: {
52387						chart: {
52388							height: '65%'
52389						}
52390					}
52391				}]
52392			}
52393        });
52394    }
52395};
52396
52397},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],284:[function(require,module,exports){
52398const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
52399const csvParser = require('../../includes/csvParser');
52400
52401module.exports = function (Highcharts, appPath) {
52402    const elementId = 'commercial-buildings-energy-end-use-type';
52403    var units;
52404
52405    if ($('#' + elementId).length > 0) {
52406        Highcharts.chart(elementId, {
52407            chart: {
52408                spacingBottom: 25,
52409                events: {
52410                    load: creditsSizeAndPosition,
52411                    redraw: creditsSizeAndPosition
52412                },
52413                type: 'bar'
52414            },
52415			credits: {
52416                enabled: true,
52417                href: null,
52418                style: {
52419                    cursor: 'normal'
52420                }
52421            },
52422            data: {
52423                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
52424                startRow: 5,
52425                firstRowAsNames: true,
52426                beforeParse: function (csv) {
52427                    var parsedCSV = csvParser(csv);
52428                    this.chart.title.update({ text: parsedCSV[0][0] });
52429                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
52430                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
52431                    units = parsedCSV[1][0];
52432                    this.chart.update(
52433                        {
52434							accessibility: {
52435								description: parsedCSV[4][0],
52436							},
52437                            exporting: {
52438                                menuItemDefinitions:
52439                                {
52440                                    label: {
52441                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
52442                                    }
52443                                },
52444                                buttons: {
52445                                    contextButton: {
52446                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
52447                                    }
52448                                }
52449                            }
52450                        }
52451                    );
52452                    return csv;
52453                }
52454            },
52455			/*colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.red],*/
52456            xAxis: {
52457                labels: {
52458                    enabled: true,
52459                    format: '{value}'
52460                },
52461				reversed: true,
52462                type: 'category'
52463            },
52464            yAxis: [{
52465				title: {
52466					enabled: false
52467				},
52468                labels: {
52469                    format: '{value:,.0f}'
52470                }
52471				
52472            }],
52473            tooltip: {
52474                useHTML: true,
52475                shared: true,
52476                formatter: function () {
52477                    var format = '<b>' + this.points[0].key + '</b><br/>';
52478                    for (var i = 0; i < this.points.length; i++) {
52479                        format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b>  <span>' + Highcharts.numberFormat(this.points[i].y) + ' ' + units + ')\</span><br/>';
52480                    }
52481                    return format;
52482                }
52483            },
52484            legend: {
52485                enabled: true,
52486            },
52487			series: [{
52488				dataSorting: {
52489					enabled: true,
52490					matchByName: true,
52491					sortKey: 'this.points[i].total'
52492				}
52493			}],
52494            plotOptions: {
52495                bar: {
52496                    stacking: 'normal'
52497                }
52498            },
52499            responsive: {
52500                rules: [{
52501                    condition: {
52502                        maxWidth: 450
52503                    },
52504                    chartOptions: {
52505                        chart: {
52506                            height: 600
52507                        },
52508                        plotOptions: {
52509                            column: {
52510                                dataLabels: {
52511                                    enabled: false
52512                                }
52513                            }
52514                        }
52515                    }
52516                },{
52517                    condition: {
52518						minWidth:451,
52519                        maxWidth: 668
52520                    },
52521                    chartOptions: {
52522                        chart: {
52523                            height: 550
52524                        },
52525                        plotOptions: {
52526                            column: {
52527                                dataLabels: {
52528                                    enabled: false
52529                                }
52530                            }
52531                        }
52532                    }
52533                },
52534                {
52535                    condition: {
52536                        minWidth: 669
52537                    },
52538
52539                    chartOptions: {
52540                        chart: {
52541                            height: '65%'
52542                        }
52543                    }
52544                }]
52545            }
52546        });
52547    }
52548};
52549
52550},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],285:[function(require,module,exports){
52551const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
52552const csvParser = require('../../includes/csvParser');
52553
52554module.exports = function (Highcharts, appPath) {
52555    const elementId = 'commercial-buildings-energy-use-type';
52556    var units;
52557
52558    if ($('#' + elementId).length > 0) {
52559        Highcharts.chart(elementId, {
52560            chart: {
52561                spacingBottom: 25,
52562                events: {
52563                    load: creditsSizeAndPosition,
52564                    redraw: creditsSizeAndPosition
52565                },
52566                type: 'bar'
52567            },
52568			credits: {
52569                enabled: true,
52570                href: null,
52571                style: {
52572                    cursor: 'normal'
52573                }
52574            },
52575            data: {
52576                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
52577                startRow: 5,
52578                firstRowAsNames: true,
52579                beforeParse: function (csv) {
52580                    var parsedCSV = csvParser(csv);
52581                    this.chart.title.update({ text: parsedCSV[0][0] });
52582                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
52583                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
52584                    units = parsedCSV[1][0];
52585                    this.chart.update(
52586                        {
52587							accessibility: {
52588								description: parsedCSV[4][0],
52589							},
52590                            exporting: {
52591                                menuItemDefinitions:
52592                                {
52593                                    label: {
52594                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
52595                                    }
52596                                },
52597                                buttons: {
52598                                    contextButton: {
52599                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
52600                                    }
52601                                }
52602                            }
52603                        }
52604                    );
52605                    return csv;
52606                }
52607            },
52608			colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.red],
52609            xAxis: {
52610                labels: {
52611                    enabled: true,
52612                    format: '{value}'
52613                },
52614				reversed: true,
52615                type: 'category'
52616            },
52617            yAxis: [{
52618				title: {
52619					enabled: false
52620				},
52621                labels: {
52622                    format: '{value:,.0f}'
52623                }
52624				
52625            }],
52626            tooltip: {
52627                useHTML: true,
52628                shared: true,
52629                formatter: function () {
52630                    var format = '<b>' + this.points[0].key + '</b><br/>';
52631                    for (var i = 0; i < this.points.length; i++) {
52632                        format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b>  <span>' + Highcharts.numberFormat(this.points[i].y) + ' ' + units + ')\</span><br/>';
52633                    }
52634                    return format;
52635                }
52636            },
52637            legend: {
52638                enabled: true,
52639            },
52640            plotOptions: {
52641                bar: {
52642                    stacking: 'normal'
52643                }
52644            },
52645			series: [{
52646				dataSorting: {
52647					enabled: true,
52648				}
52649			}],
52650            responsive: {
52651                rules: [{
52652                    condition: {
52653                        maxWidth: 450
52654                    },
52655                    chartOptions: {
52656                        chart: {
52657                            height: 600
52658                        },
52659                        plotOptions: {
52660                            column: {
52661                                dataLabels: {
52662                                    enabled: false
52663                                }
52664                            }
52665                        }
52666                    }
52667                },{
52668                    condition: {
52669						minWidth:451,
52670                        maxWidth: 668
52671                    },
52672                    chartOptions: {
52673                        chart: {
52674                            height: 550
52675                        },
52676                        plotOptions: {
52677                            column: {
52678                                dataLabels: {
52679                                    enabled: false
52680                                }
52681                            }
52682                        }
52683                    }
52684                },
52685                {
52686                    condition: {
52687                        minWidth: 669
52688                    },
52689
52690                    chartOptions: {
52691                        chart: {
52692                            height: '65%'
52693                        }
52694                    }
52695                }]
52696            }
52697        });
52698    }
52699};
52700
52701},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],286:[function(require,module,exports){
52702const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
52703const csvParser = require('../../includes/csvParser');
52704
52705module.exports = function (Highcharts, appPath) {
52706    const elementId = 'commercial-buildings-floorspace';
52707    var units = '';
52708
52709    if ($('#' + elementId).length > 0) {
52710        Highcharts.chart(elementId, {
52711            chart: {
52712                type: 'bar',
52713                spacingBottom: 35,
52714                events: {
52715                    load: creditsSizeAndPosition,
52716                    redraw: creditsSizeAndPosition
52717                }
52718            },
52719			credits: {
52720                enabled: true,
52721                href: null,
52722                style: {
52723                    cursor: 'normal'
52724                }
52725            },
52726            title: {
52727                text: '',
52728				margin: 15
52729            },
52730            data: {
52731                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
52732                startRow: 5,
52733                firstRowAsNames: true,
52734
52735                beforeParse: function (csv) {
52736                    var parsedCSV = csvParser(csv);
52737                    this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] });
52738                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
52739                    units = parsedCSV[1][0];
52740                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
52741                    this.chart.update(
52742                        {
52743							accessibility: {
52744								description: parsedCSV[4][0],
52745							},
52746                            exporting: {
52747                                menuItemDefinitions:
52748                                {
52749                                    label: {
52750                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
52751                                    }
52752                                },
52753                                buttons: {
52754                                    contextButton: {
52755                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
52756                                    }
52757                                }
52758                            }
52759                        }
52760                    );
52761                    return csv;
52762                }
52763
52764            },
52765			yAxis: {
52766				title:
52766 {
52767					enabled: false
52768				},
52769				labels: {
52770					format: '{value:,.0f}',
52771					align: 'right',
52772				}
52773			},
52774			xAxis: {
52775				reversed: true,
52776				labels: {
52777					style: {
52778						textOverflow: 'none',
52779						lineHeight: '12px'
52780					}
52781				}
52782			},
52783			series: [{
52784				dataSorting: {
52785					enabled: true,
52786				}
52787			}],
52788			legend: {
52789				enabled: false
52790			},
52791            tooltip: {
52792                useHTML: true,
52793                formatter: function () {
52794                    return "<span><b>" + this.key + "</b><br/> " + Highcharts.numberFormat(this.y, 0) + "</span> " + units;
52795                }
52796            },
52797			responsive: {
52798				rules: [{
52799					condition: {
52800						maxWidth: 450
52801					},
52802
52803					chartOptions: {
52804						chart: {
52805							height: 700
52806						}
52807					}
52808				},
52809				{
52810					condition: {
52811						minWidth: 451
52812					},
52813
52814					chartOptions: {
52815						chart: {
52816							height: '65%'
52817						}
52818					}
52819				}]
52820			}
52821        });
52822    }
52823};
52824
52825},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],287:[function(require,module,exports){
52826const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
52827const csvParser = require('../../includes/csvParser');
52828
52829module.exports = function (Highcharts, appPath) {
52830    const elementId = 'commercial-buildings-fuel-use';
52831
52832    if ($('#' + elementId).length > 0) {
52833        Highcharts.chart(elementId, {
52834            chart: {
52835                type: 'pie',
52836                spacingBottom: 25,
52837                events: {
52838                    load: creditsSizeAndPosition,
52839                    redraw: creditsSizeAndPosition
52840                }
52841            },
52842			credits: {
52843                enabled: true,
52844                href: null,
52845                style: {
52846                    cursor: 'normal'
52847                }
52848            },
52849            title: {
52850                text: ''
52851            },
52852			subtitle: {
52853				useHTML: true,
52854				floating: true,
52855				align: "center",
52856				verticalAlign: 'middle',
52857				y: 40
52858			},
52859            data: {
52860                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
52861                startRow: 7,
52862                firstRowAsNames: false,
52863                beforeParse: function (csv) {
52864                    var parsedCSV = csvParser(csv);
52865					var middleLabel = '<span style="font-weight: bold; font-size: 18px">' + parsedCSV[1][0] + '</span><br><span style="font-weight:bold">' + parsedCSV[1][1] + '</span><br><span style="">' + parsedCSV[2][0] + '</span>';
52866                    this.chart.title.update({ useHTML: true, text: '<span>' + parsedCSV[0][0] + '</span><br><span style="color:#888;font-weight:bold;font-size:12px;">' + parsedCSV[0][1] + '</span>'});
52867                    this.chart.subtitle.update({ text: middleLabel });
52868                    this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] });
52869                    this.chart.update(
52870                        {
52871							accessibility: {
52872								description: parsedCSV[5][0],
52873							},
52874                            exporting: {
52875                                menuItemDefinitions:
52876                                {
52877                                    label: {
52878                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
52879                                    }
52880                                },
52881                                buttons: {
52882                                    contextButton: {
52883                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
52884                                    }
52885                                }
52886                            }
52887                        }
52888                    );
52889                    return csv;
52890                }
52891
52892            },
52893            plotOptions: {
52894                pie: {
52895                    dataLabels: {
52896                        useHTML: true,
52897                        enabled: true,
52898                        format: "<strong>{point.name}</strong><br/>{point.percentage:.0f}%",
52899                        //distance: 10,
52900						y: -8,
52901                        color: Highcharts.eiaColors.darkGrey,
52902                        style: {
52903                            "fontSize": "12px"
52904                        }
52905                    },
52906					innerSize: '70%'
52907                }
52908            },
52909            tooltip: {
52910                useHTML: true,
52911                formatter: function () {
52912                    return "<span><b>" + this.key + "</b><br/> " + Math.round(this.percentage) + " %</span>";
52913                }
52914            },
52915			responsive: {
52916				rules: [{
52917					condition: {
52918						maxWidth: 450
52919					},
52920					
52921					chartOptions: {
52922						chart: {
52923							height: 510
52924						},
52925						title: {
52926							margin: 10
52927						},
52928						subtitle: {
52929							y: 0
52930						},
52931						plotOptions: {
52932							pie: {
52933								size: '100%',
52934								dataLabels: {
52935									enabled: false
52936								},
52937								showInLegend: true
52938							}
52939						},
52940						legend: {
52941							enabled: true
52942						}
52943					}
52944				},
52945				{
52946					condition: {
52947						minWidth: 451
52948					},
52949					
52950					chartOptions: {
52951						chart: {
52952							height: '75%'
52953						},
52954						title: {
52955							margin: 5
52956						},
52957						subtitle: {
52958							y: 40
52959						},
52960						plotOptions: {
52961							pie: {
52962								size: '70%',
52963								dataLabels: {
52964									enabled: true
52965								},
52966								showInLegend: false
52967							}
52968						},
52969						legend: {
52970							enabled: false
52971						}
52972					}
52973				}]
52974			}
52975        });
52976    }
52977};
52978
52979},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],288:[function(require,module,exports){
52980const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
52981const csvParser = require('../../includes/csvParser');
52982
52983module.exports = function (Highcharts, appPath) {
52984    const elementId = 'commercial-buildings-number';
52985    var units = '';
52986
52987    if ($('#' + elementId).length > 0) {
52988        Highcharts.chart(elementId, {
52989            chart: {
52990                type: 'bar',
52991                spacingBottom: 35,
52992                events: {
52993                    load: creditsSizeAndPosition,
52994                    redraw: creditsSizeAndPosition
52995                }
52996            },
52997			credits: {
52998                enabled: true,
52999                href: null,
53000                style: {
53001                    cursor: 'normal'
53002                }
53003            },
53004            title: {
53005                text: '',
53006				margin: 15
53007            },
53008            data: {
53009                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
53010                startRow: 5,
53011                firstRowAsNames: true,
53012
53013                beforeParse: function (csv) {
53014                    var parsedCSV = csvParser(csv);
53015                    this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] });
53016                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
53017                    units = parsedCSV[1][0];
53018                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
53019                    this.chart.update(
53020                        {
53021							accessibility: {
53022								description: parsedCSV[4][0],
53023							},
53024                            exporting: {
53025                                menuItemDefinitions:
53026                                {
53027                                    label: {
53028                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
53029                                    }
53030                                },
53031                                buttons: {
53032                                    contextButton: {
53033                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
53034                                    }
53035                                }
53036                            }
53037                        }
53038                    );
53039                    return csv;
53040                }
53041
53042            },
53043			yAxis: {
53044				title: {
53045					enabled: false
53046				},
53047				labels: {
53048					format: '{value:,.0f}',
53049					align: 'right',
53050				}
53051			},
53052			xAxis: {
53053				reversed: true,
53054				labels: {
53055					style: {
53056						textOverflow: 'none',
53057						lineHeight: '12px'
53058					}
53059				}
53060			},
53061			series: [{
53062				dataSorting: {
53063					enabled: true,
53064				}
53065			}],
53066			legend: {
53067				enabled: false
53068			},
53069            tooltip: {
53070                useHTML: true,
53071                formatter: function () {
53072                    return "<span><b>" + this.key + "</b><br/> " + Highcharts.numberFormat(this.y, 0) + "</span> " + units;
53073                }
53074            },
53075			responsive: {
53076				rules: [{
53077					condition: {
53078						maxWidth: 450
53079					},
53080
53081					chartOptions: {
53082						chart: {
53083							height: 700
53084						}
53085					}
53086				},
53087				{
53088					condition: {
53089						minWidth: 451
53090					},
53091
53092					chartOptions: {
53093						chart: {
53094							height: '65%'
53095						}
53096					}
53097				}]
53098			}
53099        });
53100    }
53101};
53102
53103},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],289:[function(require,module,exports){
53104const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
53105const csvParser = require('../../includes/csvParser');
53106
53107module.exports = function (Highcharts, appPath) {
53108    const elementId = 'commercial-buildings-types-intensity';
53109    var units = '';
53110
53111    if ($('#' + elementId).length > 0) {
53112        Highcharts.chart(elementId, {
53113            chart: {
53114                type: 'bar',
53115                spacingBottom: 35,
53116                events: {
53117                    load: creditsSizeAndPosition,
53118                    redraw: creditsSizeAndPosition
53119                }
53120            },
53121			credits: {
53122                enabled: true,
53123                href: null,
53124                style: {
53125                    cursor: 'normal'
53126                }
53127            },
53128            title: {
53129                text: '',
53130				margin: 15
53131            },
53132            data: {
53133                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
53134                startRow: 5,
53135                firstRowAsNames: true,
53136
53137                beforeParse: function (csv) {
53138                    var parsedCSV = csvParser(csv);
53139                    this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] });
53140                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
53141                    units = parsedCSV[1][0];
53142                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
53143                    this.chart.update(
53144                        {
53145							accessibility: {
53146								description: parsedCSV[4][0],
53147							},
53148                            exporting: {
53149                                menuItemDefinitions:
53150                                {
53151                                    label: {
53152                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
53153                                    }
53154                                },
53155                                buttons: {
53156                                    contextButton: {
53157                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
53158                                    }
53159                                }
53160                            }
53161                        }
53162                    );
53163                    return csv;
53164                }
53165
53166            },
53167			yAxis: {
53168				title: {
53169					enabled: false
53170				},
53171				labels: {
53172					format: '{value:.0f}',
53173					align: 'right',
53174				}
53175			},
53176			xAxis: {
53177				reversed: false,
53178				labels: {
53179					style: {
53180						textOverflow: 'none',
53181						lineHeight: '12px'
53182					}
53183				}
53184			},
53185			series: [{
53186				dataSorting: {
53187					enabled: false,
53188				}
53189			}],
53190			legend: {
53191				enabled: true,
53192				reversed: true
53193			},
53194            tooltip: {
53195                useHTML: true,
53196                formatter: function () {
53197                    return "<span><b>" + this.key + "</b><br/> " + Highcharts.numberFormat(this.y, 0) + "</span> " + units;
53198                }
53199            },
53200			responsive: {
53201                rules: [{
53202                    condition: {
53203                        maxWidth: 450
53204                    },
53205                    chartOptions: {
53206                        chart: {
53207                            height: 600
53208                        },
53209                        plotOptions: {
53210                            column: {
53211                                dataLabels: {
53212                                    enabled: false
53213                                }
53214                            }
53215                        }
53216                    }
53217                },{
53218                    condition: {
53219						minWidth:451,
53220                        maxWidth: 668
53221                    },
53222                    chartOptions: {
53223                        chart: {
53224                            height: 600
53225                        },
53226                        plotOptions: {
53227                            column: {
53228                                dataLabels: {
53229                                    enabled: false
53230                                }
53231                            }
53232                        }
53233                    }
53234                },
53235                {
53236                    condition: {
53237                        minWidth: 669
53238                    },
53239
53240                    chartOptions: {
53241                        chart: {
53242                            height: '65%'
53243                        }
53244                    }
53245                }]
53246            }
53247        });
53248    }
53249};
53250
53251},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],290:[function(require,module,exports){
53252const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
53253const csvParser = require('../../includes/csvParser');
53254
53255module.exports = function (Highcharts, appPath) {
53256    const elementId = 'consumption-home-census-region';
53257    let units = '';
53258    if ($('#' + elementId).length > 0) {
53259        Highcharts.chart(elementId, {
53260            chart: {
53261                type: 'column',
53262                spacingBottom: 25,
53263                events: {
53264                    load: creditsSizeAndPosition,
53265                    redraw: creditsSizeAndPosition
53266                }
53267            },
53268			credits: {
53269                enabled: true,
53270                href: null,
53271                style: {
53272                    cursor: 'normal'
53273                }
53274            },
53275            data: {
53276                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
53277                startRow: 4,
53278                firstRowAsNames: true,
53279                beforeParse: function (csv) {
53280                    var parsedCSV = csvParser(csv);
53281                    units = parsedCSV[1][0];
53282                    this.chart.title.update({ text: parsedCSV[0][0] });
53283                    this.chart.yAxis[0].update({ title: { text: units } });
53284                    this.chart.credits.update({ text: parsedCSV[2][0] });
53285                    this.chart.update(
53286                        {
53287							accessibility: {
53288								description: parsedCSV[3][0],
53289							},
53290                            exporting: {
53291                                menuItemDefinitions:
53292                                {
53293                                    label: {
53294                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
53295                                    }
53296                                },
53297                                buttons: {
53298                                    contextButton: {
53299                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
53300                                    }
53301                                }
53302                            }
53303                        }
53304                    );
53305                    return csv;
53306                }
53307            },
53308			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
53309            xAxis: {
53310                labels: {
53311                    enabled: true
53312                }
53313            },
53314            yAxis: {
53315				maxPadding: 0,
53316                tickInterval: 2000,
53317                labels: {
53318                    format: '{value:,.0f}'
53319                }
53320            },
53321            tooltip: {
53322                formatter: function () {
53323                    const value = this.y.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); // format with comma separator for thousands place
53324                    return '<b>' + this.key + '</b><br/><b>' + this.series.name + ':</b> ' + value + ' ' + units;
53325                }
53326            },
53327            legend: {
53328                enabled: true
53329            },
53330			responsive: {
53331                rules: [{
53332                    condition: {
53333                        maxWidth: 450
53334                    },
53335                    chartOptions: {
53336						chart: {
53337							height: 450
53338						}
53339                    }
53340                },
53341				{
53342					condition: {
53343						minWidth: 451
53344					},
53345					
53346					chartOptions: {
53347						chart: {
53348							height: '65%'
53349						}
53350					}
53351				}]
53352            }
53353        });
53354    }
53355};
53356
53357},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],291:[function(require,module,exports){
53358const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
53359const csvParser = require('../../includes/csvParser');
53360
53361module.exports = function (Highcharts, appPath) {
53362    const elementId = 'consumption-of-electricity-has-generally-declined';
53363    let units = '';
53364    if ($('#' + elementId).length > 0) {
53365        Highcharts.chart(elementId, {
53366            chart: {
53367                type: 'column',
53368                spacingBottom: 30,
53369                events: {
53370                    load: creditsSizeAndPosition,
53371                    redraw: creditsSizeAndPosition
53372                }
53373            },
53374			credits: {
53375                enabled: true,
53376                href: null,
53377                style: {
53378                    cursor: 'normal'
53379                }
53380            },
53381            data: {
53382                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
53383                startRow: 4,
53384                firstRowAsNames: true,
53385                beforeParse: function (csv) {
53386                    var parsedCSV = csvParser(csv);
53387                    units = parsedCSV[1][0];
53388                    this.chart.title.update({ text: parsedCSV[0][0] });
53389                    this.chart.yAxis[0].update({ title: { text: units } });
53390                    this.chart.credits.update({ text: parsedCSV[2][0] });
53391                    this.chart.update(
53392                        {
53393							accessibility: {
53394								description: parsedCSV[3][0],
53395							},
53396                            exporting: {
53397                                menuItemDefinitions:
53398                                {
53399                                    label: {
53400                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
53401                                    }
53402                                },
53403                                buttons: {
53404                                    contextButton: {
53405                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
53406                                    }
53407                                }
53408                            }
53409                        }
53410                    );
53411                    return csv;
53412                }
53413            },
53414            xAxis: {
53415                labels: {
53416                    enabled: true
53417                },
53418                type: 'category',
53419                startOnTick: true,
53420                endOnTick: false
53421            },
53422            yAxis: {
53423                tickInterval: 200000,
53424                labels: {
53425                    format: '{value:,.0f}'
53426                }
53427            },
53428            tooltip: {
53429                formatter: function () {
53430                    return '<b>' + this.key + '</b><br/><b>' + this.series.name + ':</b> ' + Highcharts.numberFormat(this.y) + ' ' + units;
53431                }
53432            },
53433            plotOptions: {
53434                column: {
53435                    pointPadding: 0.2,
53436                    dataLabels: {
53437                        enabled: true,
53438                        crop: false,
53439                        overflow: 'none',
53440                        formatter: function () {
53441                            return Highcharts.numberFormat(this.y);
53442                        },
53443                        style: {
53444                            color: Highcharts.eiaColors.darkGrey
53445                        }
53446                    }
53447                }
53448            },
53449            responsive: {
53450                rules: [{
53451                    condition: {
53452                        maxWidth: 450
53453                    },
53454                    chartOptions: {
53455                        chart: {
53456                            height: 410
53457                        },
53458                        plotOptions: {
53459                            column: {
53460                                dataLabels: {
53461                                    enabled: false
53462                                }
53463                            }
53464                        }
53465                    }
53466                },
53467                {
53468                    condition: {
53469                        minWidth: 451
53470                    },
53471
53472                    chartOptions: {
53473                        chart: {
53474                            height: '65%'
53475                        },
53476                        plotOptions: {
53477                            column: {
53478                                size: '65%',
53479                                dataLabels: {
53480                                    enabled: true
53481                                }
53482                            }
53483                        }
53484                    }
53485                }]
53486            }
53487        });
53488    }
53489};
53490
53491},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],292:[function(require,module,exports){
53492const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
53493const csvParser = require('../../includes/csvParser');
53494
53495module.exports = function (Highcharts, appPath) {
53496    const elementId = 'electricity-use-commercial-buildings-by-major-enduse';
53497    var units;
53498
53499    if ($('#' + elementId).length > 0) {
53500        Highcharts.chart(elementId, {
53501            chart: {
53502                events: {
53503                    load: creditsSizeAndPosition,
53504                    redraw: creditsSizeAndPosition
53505                },
53506                type: 'column',
53507                spacingBottom: 25
53508            },
53509			credits: {
53510                enabled: true,
53511                href: null,
53512                style: {
53513                    cursor: 'normal'
53514                }
53515            },
53516            data: {
53517                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
53518                startRow: 5,
53519                firstRowAsNames: false,
53520                beforeParse: function (csv) {
53521                    var parsedCSV = csvParser(csv);
53522                    this.chart.title.update({ text: parsedCSV[0][0] });
53523                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
53524                    units = parsedCSV[1][0];
53525                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
53526                    this.chart.update(
53527                        {
53528							accessibility: {
53529								description: parsedCSV[4][0],
53530							},
53531                            exporting: {
53532                                menuItemDefinitions:
53533                                {
53534                                    label: {
53535                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
53536            
53536                        }
53537                                },
53538                                buttons: {
53539                                    contextButton: {
53540                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
53541                                    }
53542                                }
53543                            }
53544                        }
53545                    );
53546                    return csv;
53547                }
53548            },
53549			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.grey, Highcharts.eiaColors.extraLightBlue, Highcharts.eiaColors.extraLightGreen],
53550            xAxis: {
53551                labels: {
53552                    enabled: true,
53553                    x:-15
53554                }
53555            },
53556            yAxis: [{
53557                tickInterval: 50,
53558                labels: {
53559                    format: '{value:,.0f}'
53560                }
53561            }],
53562            tooltip: {
53563                formatter: function () {
53564                    var unitsSplit = units.split(' ');
53565                    unitsSplit.splice(0, 3);
53566                    return '<b>' + this.key + '</b>: ' + this.y + ' ' + unitsSplit.join(' ');
53567                }
53568            },
53569            legend: {
53570                enabled: false
53571            },
53572            plotOptions: {
53573                column: {
53574                    dataLabels: {
53575                        enabled: true,
53576                        crop: false,
53577                        overflow: 'allow',
53578                        formatter: function () {
53579                            var sum = 0;
53580                            for (var i = 0; i < this.series.processedYData.length; i++) {
53581                                if (this.series.processedYData[i]) {
53582                                    sum += parseInt(this.series.processedYData[i]);
53583                                }
53584                            }
53585                            return ((this.y * 100) / sum).toFixed(0) + '%';
53586                        },
53587						style: {
53588							color: Highcharts.eiaColors.darkGrey
53589						}
53590                    },
53591					colorByPoint: true
53592                }
53593            },
53594			responsive: {
53595				rules: [{
53596					condition: {
53597						maxWidth: 450
53598					},
53599					
53600					chartOptions: {
53601						chart: {
53602							height: 510
53603						},
53604                        xAxis: {
53605                            labels: {
53606                                x: 0
53607                            }
53608                        }
53609					}
53610				},
53611				{
53612					condition: {
53613						minWidth: 451
53614					},	
53615					chartOptions: {
53616						chart: {
53617							height: '65%'
53618						}
53619					}
53620				}]
53621			}
53622        });
53623    }
53624};
53625
53626},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],293:[function(require,module,exports){
53627const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
53628const csvParser = require('../../includes/csvParser');
53629
53630module.exports = function (Highcharts, appPath) {
53631    const elementId = 'end-use-consumption-by-housing-type';
53632    var units = '';
53633
53634    if ($('#' + elementId).length > 0) {
53635        Highcharts.chart(elementId, {
53636            chart: {
53637                type: 'bar',
53638                spacingBottom: 25,
53639                events: {
53640                    load: creditsSizeAndPosition,
53641                    redraw: creditsSizeAndPosition
53642                }
53643            },
53644			credits: {
53645                enabled: true,
53646                href: null,
53647                style: {
53648                    cursor: 'normal'
53649                }
53650            },
53651			title: {
53652				margin: 15
53653            },
53654            data: {
53655                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
53656                startRow: 5,
53657                firstRowAsNames: true,
53658                beforeParse: function (csv) {
53659                    var parsedCSV = csvParser(csv);
53660                    this.chart.title.update({ text: parsedCSV[0][0] });
53661                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
53662                    this.chart.yAxis[0].update({ title: { text: '' } });
53663                    units = parsedCSV[1][0];
53664                    this.chart.update(
53665                        {
53666							accessibility: {
53667								description: parsedCSV[4][0],
53668							},
53669                            exporting: {
53670                                menuItemDefinitions:
53671                                {
53672                                    label: {
53673                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
53674                                    }
53675                                },
53676                                buttons: {
53677                                    contextButton: {
53678                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
53679                                    }
53680                                }
53681                            }
53682                        }
53683                    );
53684                    return csv;
53685                }
53686            },
53687			colors: [Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.red, Highcharts.eiaColors.lightRed, Highcharts.eiaColors.extraLightRed, Highcharts.eiaColors.brown],
53688            plotOptions: {
53689                series: {
53690                    stacking: 'normal',
53691					dataLabels: {
53692						enabled: true,
53693						format: '{point.y:.0f}%'
53694					}
53695                }
53696            },
53697            xAxis: {
53698                labels: {
53699                    format: '{value}'
53700                }
53701            },
53702            yAxis: {
53703                labels: {
53704                    format: '{value}%'
53705                },
53706                max: 100,
53707                min: 0,
53708                tickInterval: 20,
53709				reversedStacks: false
53710            },
53711            tooltip: {
53712                useHTML: true,
53713                formatter: function () {
53714                    return '<b>' + this.key + '</b><br/>' + this.series.name + '<br/>' + Highcharts.numberFormat(this.y, 0) + '% ' + units;
53715                }
53716            },
53717			responsive: {
53718				rules: [{
53719					condition: {
53720						maxWidth: 450
53721					},
53722					
53723					chartOptions: {
53724						chart: {
53725							height: 550
53726						}
53727					}
53728				},
53729				{
53730					condition: {
53731						minWidth: 451
53732					},
53733					
53734					chartOptions: {
53735						chart: {
53736							height: '65%'
53737						}
53738					}
53739				}]
53740			}
53741        });
53742    }
53743};
53744
53745},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],294:[function(require,module,exports){
53746const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
53747const csvParser = require('../../includes/csvParser');
53748
53749module.exports = function (Highcharts, appPath) {
53750    const elementId = 'energy-consumption-by-end-use-sectors';
53751
53752    if ($('#' + elementId).length > 0) {
53753        Highcharts.chart(elementId, {
53754            chart: {
53755                type: 'pie',
53756                spacingBottom: 25,
53757                events: {
53758                    load: creditsSizeAndPosition,
53759                    redraw: creditsSizeAndPosition
53760                }
53761            },
53762			credits: {
53763                enabled: true,
53764                href: null,
53765                style: {
53766                    cursor: 'normal'
53767                }
53768            },
53769            title: {
53770                text: ''
53771            },
53772            data: {
53773                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
53774                startRow: 5,
53775                firstRowAsNames: false,
53776                beforeParse: function (csv) {
53777                    var parsedCSV = csvParser(csv);
53778                    this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] });
53779                    this.chart.subtitle.update({ text: parsedCSV[1][0] });
53780                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
53781                    this.chart.update(
53782                        {
53783							accessibility: {
53784								description: parsedCSV[4][0],
53785							},
53786                            exporting: {
53787                                menuItemDefinitions:
53788                                {
53789                                    label: {
53790                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
53791                                    }
53792                                },
53793                                buttons: {
53794                                    contextButton: {
53795                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
53796                                    }
53797                                }
53798                            }
53799                        }
53800                    );
53801                    return csv;
53802                }
53803
53804            },
53805			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
53806            plotOptions: {
53807                pie: {
53808                    dataLabels: {
53809                        useHTML: true,
53810                        enabled: true,
53811                        format: "<strong>{point.name}</strong><br/>{point.percentage:.0f}%",
53812                        distance: 10,
53813                        color: Highcharts.eiaColors.darkGrey,
53814                        style: {
53815                            "fontSize": "12px"
53816                        }
53817                    }
53818                }
53819            },
53820            tooltip: {
53821                useHTML: true,
53822                formatter: function () {
53823                    return "<span><b>" + this.key + "</b><br/> " + Math.round(this.percentage) + " %</span>";
53824                }
53825            },
53826			responsive: {
53827				rules: [{
53828					condition: {
53829						maxWidth: 450
53830					},
53831					
53832					chartOptions: {
53833						chart: {
53834							height: 410
53835						},
53836						title: {
53837							margin: 10
53838						},
53839						plotOptions: {
53840							pie: {
53841								size: null,
53842								dataLabels: {
53843									enabled: false
53844								},
53845								showInLegend: true
53846							}
53847						},
53848						legend: {
53849							enabled: true
53850						}
53851					}
53852				},
53853				{
53854					condition: {
53855						minWidth: 451
53856					},
53857					
53858					chartOptions: {
53859						chart: {
53860							height: '65%'
53861						},
53862						title: {
53863							margin: 5
53864						},
53865						plotOptions: {
53866							pie: {
53867								size: '75%',
53868								dataLabels: {
53869									enabled: true
53870								},
53871								showInLegend: false
53872							}
53873						},
53874						legend: {
53875							enabled: false
53876						}
53877					}
53878				}]
53879			}
53880        });
53881    }
53882};
53883
53884},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],295:[function(require,module,exports){
53885const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
53886const csvParser = require('../../includes/csvParser');
53887
53888module.exports = function (Highcharts, appPath) {
53889    const elementId = 'energy-consumption-commercial-buildings-by-census-region';
53890    var units;
53891
53892    if ($('#' + elementId).length > 0) {
53893        Highcharts.chart(elementId, {
53894            chart: {
53895                type: 'bar',
53896                spacingBottom: 25,
53897                events: {
53898                    load: creditsSizeAndPosition,
53899                    redraw: creditsSizeAndPosition
53900                }
53901            },
53902			credits: {
53903                enabled: true,
53904                href: null,
53905                style: {
53906                    cursor: 'normal'
53907                }
53908            },
53909			title: {
53910				margin: 15
53911            },
53912            data: {
53913                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
53914                startRow: 4,
53915                firstRowAsNames: false,
53916                complete: function (options) {
53917                    options.series[0].data.reverse();
53918                },
53919                beforeParse: function (csv) {
53920                    var parsedCSV = csvParser(csv);
53921                    this.chart.title.update({ text: parsedCSV[0][0] });
53922                    this.chart.credits.update({ text: parsedCSV[2][0] });
53923                    units = parsedCSV[1][0];
53924                    this.chart.subtitle.update({
53925                        text: parsedCSV[1][0],
53926                        style: {
53927                            color: "#888",
53928                            fontWeight: "bold",
53929                            fontSize: "12px"
53930                        }
53931                    });
53932                    this.chart.update(
53933                        {
53934							accessibility: {
53935								description: parsedCSV[3][0],
53936							},
53937                            exporting: {
53938                                menuItemDefinitions:
53939                                {
53940                                    label: {
53941                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
53942                                    }
53943                                },
53944                                buttons: {
53945                                    contextButton: {
53946                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
53947                                    }
53948                                }
53949                            }
53950                        }
53951                    );
53952                    return csv;
53953                }
53954            },
53955            yAxis: {
53956                tickInterval: 500,
53957                labels: {
53958                    format: '{value:,.0f}',
53959                },
53960                title: {
53961                    text: ''
53962                }
53963            },
53964            tooltip: {
53965                useHTML: true,
53966                formatter: function () {
53967                    return '<b>' + this.key + '</b>: ' + Highcharts.numberFormat(this.y) + ' ' + units;
53968                }
53969            },
53970            legend: {
53971                enabled: false
53972            },
53973            plotOptions: {
53974                bar: {
53975                    dataLabels: {
53976                        enabled: true,
53977                        crop: false,
53978                        overflow: "allow",
53979                        formatter: function () {
53980                            return Highcharts.numberFormat(this.y);
53981                        },
53982						style: {
53983							color: Highcharts.eiaColors.darkGrey
53984						}
53985                    }
53986                }
53987            },
53988			responsive: {
53989                rules: [{
53990                    condition: {
53991                        maxWidth: 450
53992                    },
53993                    chartOptions: {
53994						chart: {
53995							height: 450
53996                        }
53997                    }
53998                },
53999				{
54000					condition: {
54001						minWidth: 451
54002					},
54003					
54004					chartOptions: {
54005						chart: {
54006							height: '65%'
54007						}
54008					}
54009				}]
54010            }
54011        });
54012    }
54013};
54014
54015},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],296:[function(require,module,exports){
54016const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
54017const csvParser = require('../../includes/csvParser');
54018
54019module.exports = function (Highcharts, appPath) {
54020    const elementId = 'energy-indicators-absolute';
54021    var units = '';
54022
54023    if ($('#' + elementId).length > 0) {
54024        Highcharts.chart(elementId, {
54025            chart: {
54026                type: 'line',
54027                spacingBottom: 30,
54028                events: {
54029                    load: creditsSizeAndPosition,
54030                    redraw: creditsSizeAndPosition
54031                }
54032            },
54033            credits: {
54034                enabled: true,
54035                href: null,
54036                style: {
54037                    cursor: 'normal'
54038                }
54039            },
54040            data: {
54041                csvURL: appPath + 
54041'/use-of-energy/charts/' + elementId + '.csv',
54042                startRow: 5,
54043                firstRowAsNames: true,
54044                beforeParse: function (csv) {
54045                    var parsedCSV = csvParser(csv);
54046                    this.chart.title.update({ text: parsedCSV[0][0] });
54047                    units = parsedCSV[1][0];
54048                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
54049                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
54050                    this.chart.update(
54051                        {
54052							accessibility: {
54053								description: parsedCSV[4][0],
54054							},
54055                            exporting: {
54056                                menuItemDefinitions:
54057                                {
54058                                    label: {
54059                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
54060                                    }
54061                                },
54062                                buttons: {
54063                                    contextButton: {
54064                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
54065                                    }
54066                                }
54067                            }
54068                        }
54069                    );
54070                    return csv;
54071                }
54072            },
54073            xAxis: {
54074				type: "category",
54075                labels: {
54076                    format: "{value}"
54077                }
54078            },
54079            yAxis: {
54080                labels: {
54081                    format: "{value:.1f}"
54082                }
54083            },
54084            plotOptions: {
54085                line: {
54086                    marker: {
54087                        enabled: true,
54088                        radius: 5
54089                    }
54090                }
54091            },
54092            tooltip: {
54093                useHTML: true,
54094                shared: true,
54095                formatter: function () {
54096                    let html = "<b>" + this.points[0].key + "</b><br/>";
54097                    this.points.filter(function (value) {
54098                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
54099                    });
54100                    return html;
54101                }
54102            },
54103            responsive: {
54104                rules: [{
54105                    condition: {
54106                        maxWidth: 450
54107                    },
54108                    chartOptions: {
54109						chart: {
54110							height: 500
54111						}
54112                    }
54113                },
54114				{
54115					condition: {
54116						minWidth: 451
54117					},
54118					
54119					chartOptions: {
54120						chart: {
54121							height: '65%'
54122						}
54123					}
54124				}]
54125            }
54126        });
54127    }
54128};
54129
54130},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],297:[function(require,module,exports){
54131const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
54132const csvParser = require('../../includes/csvParser');
54133
54134module.exports = function (Highcharts, appPath) {
54135    const elementId = 'energy-indicators-index';
54136    var units = '';
54137
54138    if ($('#' + elementId).length > 0) {
54139        Highcharts.chart(elementId, {
54140            chart: {
54141                type: 'line',
54142                spacingBottom: 30,
54143                events: {
54144                    load: creditsSizeAndPosition,
54145                    redraw: creditsSizeAndPosition
54146                }
54147            },
54148            credits: {
54149                enabled: true,
54150                href: null,
54151                style: {
54152                    cursor: 'normal'
54153                }
54154            },
54155            data: {
54156                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
54157                startRow: 5,
54158                firstRowAsNames: true,
54159                beforeParse: function (csv) {
54160                    var parsedCSV = csvParser(csv);
54161                    this.chart.title.update({ text: parsedCSV[0][0] });
54162                    units = parsedCSV[1][0];
54163                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
54164                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
54165                    this.chart.update(
54166                        {
54167							accessibility: {
54168								description: parsedCSV[4][0],
54169							},
54170                            exporting: {
54171                                menuItemDefinitions:
54172                                {
54173                                    label: {
54174                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
54175                                    }
54176                                },
54177                                buttons: {
54178                                    contextButton: {
54179                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
54180                                    }
54181                                }
54182                            }
54183                        }
54184                    );
54185                    return csv;
54186                }
54187            },
54188            xAxis: {
54189				type: "category",
54190                labels: {
54191                    format: "{value}"
54192                }
54193            },
54194            yAxis: {
54195                labels: {
54196                    format: "{value:.1f}"
54197                },
54198				maxPadding: 0
54199            },
54200            plotOptions: {
54201                line: {
54202                    marker: {
54203                        enabled: true,
54204                        radius: 5
54205                    }
54206                }
54207            },
54208            tooltip: {
54209                useHTML: true,
54210                shared: true,
54211                formatter: function () {
54212                    let html = "<b>" + this.points[0].key + "</b><br/>";
54213                    this.points.filter(function (value) {
54214                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
54215                    });
54216                    return html;
54217                }
54218            },
54219            responsive: {
54220                rules: [{
54221                    condition: {
54222                        maxWidth: 450
54223                    },
54224                    chartOptions: {
54225						chart: {
54226							height: 550
54227						}
54228                    }
54229                },
54230				{
54231					condition: {
54232						minWidth: 451,
54233						maxWidth: 668
54234					},
54235					
54236					chartOptions: {
54237						chart: {
54238							height: '70%'
54239						}
54240					}
54241				},
54242				{
54243					condition: {
54244						minWidth: 669
54245					},
54246					
54247					chartOptions: {
54248						chart: {
54249							height: '65%'
54250						}
54251					}
54252				}]
54253            }
54254        });
54255    }
54256};
54257
54258},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],298:[function(require,module,exports){
54259const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
54260const csvParser = require('../../includes/csvParser');
54261
54262module.exports = function (Highcharts, appPath) {
54263    const elementId = 'energy-indicators-ratio';
54264    var units = '';
54265
54266    if ($('#' + elementId).length > 0) {
54267        Highcharts.chart(elementId, {
54268            chart: {
54269                type: 'line',
54270                spacingBottom: 30,
54271                events: {
54272                    load: creditsSizeAndPosition,
54273                    redraw: creditsSizeAndPosition
54274                }
54275            },
54276            credits: {
54277                enabled: true,
54278                href: null,
54279                style: {
54280                    cursor: 'normal'
54281                }
54282            },
54283            data: {
54284                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
54285                startRow: 5,
54286                firstRowAsNames: true,
54287                beforeParse: function (csv) {
54288                    var parsedCSV = csvParser(csv);
54289                    this.chart.title.update({ text: parsedCSV[0][0] });
54290                    units = parsedCSV[1][0];
54291                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
54292                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
54293                    this.chart.update(
54294                        {
54295							accessibility: {
54296								description: parsedCSV[4][0],
54297							},
54298                            exporting: {
54299                                menuItemDefinitions:
54300                                {
54301                                    label: {
54302                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
54303                                    }
54304                                },
54305                                buttons: {
54306                                    contextButton: {
54307                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
54308                                    }
54309                                }
54310                            }
54311                        }
54312                    );
54313                    return csv;
54314                }
54315            },
54316            xAxis: {
54317				type: "category",
54318                labels: {
54319                    format: "{value}"
54320                }
54321            },
54322            yAxis: {
54323                labels: {
54324                    format: "{value:.1f}"
54325                }
54326            },
54327            plotOptions: {
54328                line: {
54329                    marker: {
54330                        enabled: true,
54331                        radius: 5
54332                    }
54333                }
54334            },
54335            tooltip: {
54336                useHTML: true,
54337                shared: true,
54338                formatter: function () {
54339                    let html = "<b>" + this.points[0].key + "</b><br/>";
54340                    this.points.filter(function (value) {
54341                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>';
54342                    });
54343                    return html;
54344                }
54345            },
54346            responsive: {
54347                rules: [{
54348                    condition: {
54349                        maxWidth: 450
54350                    },
54351                    chartOptions: {
54352						chart: {
54353							height: 650
54354						}
54355                    }
54356                },
54357				{
54358					condition: {
54359						minWidth: 451,
54360						maxWidth: 690
54361					},
54362					
54363					chartOptions: {
54364						chart: {
54365							height: '80%'
54366						}
54367					}
54368				},
54369				{
54370					condition: {
54371						minWidth: 691
54372					},
54373					
54374					chartOptions: {
54375						chart: {
54376							height: '65%'
54377						}
54378					}
54379				}]
54380            }
54381        });
54382    }
54383};
54384
54385},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],299:[function(require,module,exports){
54386const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
54387const csvParser = require('../../includes/csvParser');
54388
54389module.exports = function (Highcharts, appPath) {
54390    const elementId = 'energy-use-by-type-commercial-building';
54391    var units;
54392
54393    if ($('#' + elementId).length > 0) {
54394        Highcharts.chart(elementId, {
54395            chart: {
54396                type: 'bar',
54397                spacingBottom: 25,
54398                events: {
54399                    load: creditsSizeAndPosition,
54400                    redraw: creditsSizeAndPosition
54401                }
54402            },
54403			credits: {
54404                enabled: true,
54405                href: null,
54406                style: {
54407                    cursor: 'normal'
54408                }
54409            },
54410			title: {
54411				margin: 15
54412            },
54413            data: {
54414                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
54415                startRow: 4,
54416                firstRowAsNames: false,
54417                complete: function (options) {
54418                    options.series[0].data.reverse();
54419                },
54420                beforeParse: function (csv) {
54421                    var parsedCSV = csvParser(csv);
54422                    this.chart.title.update({ text: parsedCSV[0][0] });
54423                    this.chart.credits.update({ text: parsedCSV[2][0] });
54424                    units = parsedCSV[1][0];
54425                    this.chart.subtitle.update({
54426                        text: parsedCSV[1][0],
54427                        style: {
54428                            color: "#888",
54429                            fontWeight: "bold",
54430                            fontSize: "12px",
54431                            fill: "#888"
54432                        }
54433                    });
54434                    this.chart.update(
54435                        {
54436							accessibility: {
54437								description: parsedCSV[3][0],
54438							},
54439                            exporting: {
54440                                menuItemDefinitions:
54441                                {
54442                                    label: {
54443                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
54444                                    }
54445                                },
54446                                buttons: {
54447                                    contextButton: {
54448                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
54449                                    }
54450                                }
54451                            }
54452                        }
54453                    );
54454                    return csv;
54455                }
54456            },
54457            yAxis: {
54458                tickInterval: 200,
54459                labels: {
54460                    format: '{value:,.0f}',
54461                },
54462                title: {
54463                    text: ''
54464                }
54465            },
54466            tooltip: {
54467                useHTML: true,
54468                formatter: function () {
54469                    var unitsSplit = units.split(' ');
54470                    unitsSplit.splice(0, 3);
54471                    return '<b>' + this.key + '</b>: ' + Highcharts.numberFormat(this.y) + ' ' + unitsSplit.join(' ');
54472                }
54473            },
54474            legend: {
54475                enabled: false
54476            },
54477			responsive: {
54478                rules: [{
54479                    condition: {
54480                        maxWidth: 450
54481                    },
54482                    chartOptions: {
54483						chart: {
54484							height: 450
54485                        }
54486                    }
54487                },
54488				{
54489					condition: {
54490						minWidth: 451
54491					},
54492					
54493					chartOptions: {
54494						chart: {
54495							height: '65%'
54496						}
54497					}
54498				}]
54499            }
54500        });
54501    }
54502};
54503
54504},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],300:[function(require,module,exports){
54505const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
54506const csvParser = require('../../includes/csvParser');
54507
54508module.exports = function (Highcharts, appPath) {
54509    const elementId = 'ev-cars-projections';
54510    var units = '';
54511
54512    if ($('#' + elementId).length > 0) {
54513        Highcharts.chart(elementId, {
54514            chart: {
54515                type: 'line',
54516                spacingBottom: 30,
54517                events: {
54518                    load: creditsSizeAndPosition,
54519                    redraw: creditsSizeAndPosition
54520                }
54521            },
54522            credits: {
54523                enabled: true,
54524                href: null,
54525                style: {
54526                    cursor: 'normal'
54527                }
54528            },
54529            data: {
54530  
54530              csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
54531                startRow: 5,
54532                firstRowAsNames: true,
54533                beforeParse: function (csv) {
54534                    var parsedCSV = csvParser(csv);
54535                    this.chart.title.update({ text: parsedCSV[0][0] });
54536                    units = parsedCSV[1][0];
54537                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
54538                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
54539                    this.chart.update(
54540                        {
54541							accessibility: {
54542								description: parsedCSV[4][0],
54543							},
54544                            exporting: {
54545                                menuItemDefinitions:
54546                                {
54547                                    label: {
54548                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
54549                                    }
54550                                },
54551                                buttons: {
54552                                    contextButton: {
54553                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
54554                                    }
54555                                }
54556                            }
54557                        }
54558                    );
54559                    return csv;
54560                }
54561            },
54562            xAxis: {
54563				type: "category",
54564                labels: {
54565                    format: "{value}"
54566                }
54567            },
54568            yAxis: {
54569                labels: {
54570                    format: "{value:.2f}%"
54571                }
54572            },
54573            tooltip: {
54574                useHTML: true,
54575                shared: true,
54576                formatter: function () {
54577                    let html = "<b>" + this.points[0].key + "</b><br/>";
54578                    this.points.filter(function (value) {
54579                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + Highcharts.numberFormat(value.y,2) + '% ' + '</span><br/>';
54580                    });
54581                    return html;
54582                }
54583            },
54584            responsive: {
54585                rules: [{
54586                    condition: {
54587                        maxWidth: 450
54588                    },
54589                    chartOptions: {
54590						chart: {
54591							height: 500
54592						}
54593                    }
54594                },
54595				{
54596					condition: {
54597						minWidth: 451
54598					},
54599					
54600					chartOptions: {
54601						chart: {
54602							height: '65%'
54603						}
54604					}
54605				}]
54606            }
54607        });
54608    }
54609};
54610
54611},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],301:[function(require,module,exports){
54612const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
54613const csvParser = require('../../includes/csvParser');
54614
54615module.exports = function (Highcharts, appPath) {
54616    const elementId = 'industrial-sector-energy-consumption-by-type-industry';
54617
54618    if ($('#' + elementId).length > 0) {
54619        Highcharts.chart(elementId, {
54620            chart: {
54621                type: 'pie',
54622                spacingBottom: 25,
54623                events: {
54624                    load: creditsSizeAndPosition,
54625                    redraw: creditsSizeAndPosition
54626                }
54627            },
54628            credits: {
54629                enabled: true,
54630                href: null,
54631                style: {
54632                    cursor: 'normal'
54633                }
54634            },
54635            title: {
54636                text: '',
54637                margin: 5
54638            },
54639            data: {
54640                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
54641                startRow: 5,
54642                firstRowAsNames: false,
54643                complete: function (options) {
54644                    var point, i;
54645
54646                    for (i = 0; i < options.series[0].data.length; i++) {
54647                        point = { name: options.series[0].data[i][0], y: options.series[0].data[i][1] }
54648                        options.series[0].data[i] = point;
54649                        if (point.name === "chemicals") {
54650                            point.color = Highcharts.eiaColors.blue;
54651                            point.dataLabels = { distance: -30 };
54652                        }
54653                        else if (point.name === "petroleum and coal products") {
54654                            point.color = Highcharts.eiaColors.brown;
54655                        }
54656                        else if (point.name === "paper") {
54657                            point.color = Highcharts.eiaColors.green;
54658                            point.dataLabels = { distance: -30 };
54659                        }
54660                        else if (point.name === "primary metals") {
54661                            point.color = Highcharts.eiaColors.red;
54662                        }
54663                        else if (point.name === "food") {
54664                            point.color = Highcharts.eiaColors.darkBrown;
54665                        }
54666                        else if (point.name === "non-metallic minerals") {
54667                            point.color = Highcharts.eiaColors.yellow;
54668                            point.dataLabels = { distance: -30 };
54669                        }
54670                        else if (point.name === "all other") {
54671                            point.color = Highcharts.eiaColors.darkBlue;
54672                        }
54673                        else {
54674                            point.color = Highcharts.eiaColors.darkGreen;
54675                        }
54676                    }
54677                },
54678                beforeParse: function (csv) {
54679                    var parsedCSV = csvParser(csv);
54680                    this.chart.title.update({ text: parsedCSV[0][0] });
54681                    this.chart.subtitle.update({ text: parsedCSV[1][0] })
54682                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] });
54683                    this.chart.update(
54684                        {
54685							accessibility: {
54686								description: parsedCSV[4][0],
54687							},
54688                            exporting: {
54689                                menuItemDefinitions:
54690                                {
54691                                    label: {
54692                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
54693                                    }
54694                                },
54695                                buttons: {
54696                                    contextButton: {
54697                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
54698                                    }
54699                                }
54700                            }
54701                        }
54702                    );
54703                    return csv;
54704                }
54705            },
54706            plotOptions: {
54707                pie: {
54708                    startAngle: -5,
54709                    dataLabels: {
54710                        enabled: true,
54711                        format: "<strong>{point.name}</strong><br/> {point.percentage:.0f}%",
54712                        distance: 10,
54713                        color: "contrast",
54714                        style: {
54715                            "fontSize": "12px"
54716                        }
54717                    }
54718                }
54719            },
54720            tooltip: {
54721                useHTML: true,
54722                formatter: function () {
54723                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>";
54724                }
54725            },
54726            responsive: {
54727                rules: [{
54728                    condition: {
54729                        maxWidth: 450
54730                    },
54731
54732                    chartOptions: {
54733                        chart: {
54734                            height: 520
54735                        },
54736                        plotOptions: {
54737                            pie: {
54738                                size: null,
54739                                dataLabels: {
54740                                    enabled: false
54741                                },
54742                                showInLegend: true
54743                            }
54744                        },
54745                        legend: {
54746                            enabled: true
54747                        }
54748                    }
54749                },
54750                {
54751                    condition: {
54752                        minWidth: 451
54753                    },
54754
54755                    chartOptions: {
54756                        chart: {
54757                            height: '65%'
54758                        },
54759                        plotOptions: {
54760                            pie: {
54761                                size: '75%',
54762                                dataLabels: {
54763                                    enabled: true
54764                                },
54765                                showInLegend: false
54766                            }
54767                        },
54768                        legend: {
54769                            enabled: false
54770                        }
54771                    }
54772                }]
54773            }
54774        });
54775    }
54776};
54777
54778},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],302:[function(require,module,exports){
54779const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
54780const csvParser = require('../../includes/csvParser');
54781
54782module.exports = function (Highcharts, appPath) {
54783    const elementId = 'industrial-sector-energy-use-by-source';
54784    var units = '';
54785
54786    if ($('#' + elementId).length > 0) {
54787        Highcharts.chart(elementId, {
54788            chart: {
54789                type: 'area',
54790                spacingBottom: 30,
54791                events: {
54792                    load: creditsSizeAndPosition,
54793                    redraw: creditsSizeAndPosition
54794                }
54795            },
54796			credits: {
54797                enabled: true,
54798                href: null,
54799                style: {
54800                    cursor: 'normal'
54801                }
54802            },
54803            title: {
54804                text: ''
54805            },
54806            data: {
54807                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
54808                startRow: 5,
54809                firstRowAsNames: true,
54810                beforeParse: function (csv) {
54811                    var parsedCSV = csvParser(csv);
54812                    this.chart.title.update({ text: parsedCSV[0][0] });
54813                    units = parsedCSV[1][0];
54814                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
54815                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
54816                    this.chart.update(
54817                        {
54818							accessibility: {
54819								description: parsedCSV[4][0],
54820							},
54821                            exporting: {
54822                                menuItemDefinitions:
54823                                {
54824                                    label: {
54825                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
54826                                    }
54827                                },
54828                                buttons: {
54829                                    contextButton: {
54830                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
54831                                    }
54832                                }
54833                            }
54834                        }
54835                    );
54836                    return csv;
54837                }
54838
54839            },
54840			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red],
54841            xAxis: {
54842                labels: {
54843                    format: "{value}",
54844                },
54845                tickInterval: 10,
54846                startOnTick: true,
54847                minPadding: 0,
54848                maxPadding: 0
54849            },
54850			legend: {
54851				reversed: true
54852			},
54853            yAxis: {
54854                labels: {
54855                    format: "{value:,.0f}"
54856                },
54857                tickInterval: 5,
54858				reversedStacks: false
54859            },
54860            plotOptions: {
54861                area: {
54862                    stacking: 'normal',
54863                }
54864            },
54865            tooltip: {
54866                useHTML: true,
54867                shared: true,
54868                formatter: function () {
54869                    var html = '<b>' + this.x + '</b><br/>';
54870                    this.points.filter(function (value) {
54871                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>';
54872                    });
54873                    return html;
54874                }
54875            },
54876			responsive: {
54877                rules: [{
54878                    condition: {
54879                        maxWidth: 450
54880                    },
54881                    chartOptions: {
54882						chart: {
54883							height: 450
54884						}
54885                    }
54886                },
54887				{
54888					condition: {
54889						minWidth: 451
54890					},
54891					
54892					chartOptions: {
54893						chart: {
54894							height: '65%'
54895						}
54896					}
54897				}]
54898            }
54899        });
54900    }
54901};
54902
54903},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],303:[function(require,module,exports){
54904const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
54905const csvParser = require('../../includes/csvParser');
54906
54907module.exports = function (Highcharts, appPath) {
54908    const elementId = 'major-energy-sources-used-in-commercial-buildings';
54909    var categories = [];
54910
54911    if ($('#' + elementId).length > 0) {
54912        Highcharts.chart(elementId, {
54913            chart: {
54914                type: 'bar',
54915                spacingBottom: 30,
54916                events: {
54917                    load: creditsSizeAndPosition,
54918                    redraw: creditsSizeAndPosition
54919                }
54920            },
54921			credits: {
54922                enabled: true,
54923                href: null,
54924                style: {
54925                    cursor: 'normal'
54926                }
54927            },
54928			title: {
54929				margin: 5
54930            },
54931            data: {
54932                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
54933                startRow: 3,
54934                firstRowAsNames: false,
54935                beforeParse: function (csv) {
54936                    var parsedCSV = csvParser(csv);
54937                    this.chart.title.update({ text: parsedCSV[0][0] });
54938                    this.chart.credits.update({ text: parsedCSV[1][0] });
54939                    for (var i = 3; i < parsedCSV.length - 1; i++) {
54940                        categories.push(parsedCSV[i][0] + " (" + parsedCSV[i][1] * 100 + "%)");
54941                    }
54942                    this.chart.update(
54943                        {
54944							accessibility: {
54945								description: parsedCSV[2][0],
54946							},
54947                            exporting: {
54948                                menuItemDefinitions:
54949                                {
54950                                    label: {
54951                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
54952                                    }
54953                                },
54954                                buttons: {
54955                                    contextButton: {
54956                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
54957                                    }
54958                                }
54959     
54959                       }
54960                        }
54961                    );
54962                    return csv;
54963                }
54964            },
54965			colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.blue, Highcharts.eiaColors.green, Highcharts.eiaColors.grey],
54966            xAxis: {
54967                categories: categories,
54968                labels: {
54969                    enabled: false
54970                }
54971            },
54972            yAxis: {
54973                tickWidth: 0,
54974                labels: {
54975                    enabled: false
54976                },
54977                title: {
54978                    enabled: false
54979                },
54980                gridLineWidth: 0 // no vertical gridlines
54981            },
54982            plotOptions: {
54983                bar: {
54984                    grouping: false,
54985                    colorByPoint: true,
54986                    dataLabels: {
54987                        enabled: true,
54988                        inside: true,
54989                        align: "left",
54990                        verticalAlign: "top",
54991                        y: -20,
54992                        style: {
54993                            "textOutline": "none",
54994                            "fontWeight": "bold"
54995                        },
54996                        crop: false,
54997                        overflow: "allow",
54998                        formatter: function () {
54999                            // converts to a percentage of the whole
55000                            return '<span style="color: ' + this.point.color + '">' + this.point.category + '</span>';
55001                        }
55002                    }
55003                }
55004            },
55005            tooltip: {
55006                useHTML: true,
55007                formatter: function () {
55008                    return this.x;
55009                }
55010            },
55011            legend: {
55012                enabled: false
55013            },
55014			responsive: {
55015                rules: [{
55016                    condition: {
55017                        maxWidth: 400
55018                    },
55019                    chartOptions: {
55020						chart: {
55021							height: 350
55022						}
55023                    }
55024                },
55025				{
55026					condition: {
55027						minWidth: 451
55028					},
55029					
55030					chartOptions: {
55031						chart: {
55032							height: '50%'
55033						}
55034					}
55035				},
55036				{
55037					condition: {
55038						minWidth: 668
55039					},
55040					
55041					chartOptions: {
55042						chart: {
55043							height: '65%'
55044						}
55045					}
55046				}]
55047            }
55048        });
55049    }
55050};
55051
55052},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],304:[function(require,module,exports){
55053const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
55054const csvParser = require('../../includes/csvParser');
55055
55056module.exports = function (Highcharts, appPath) {
55057    const elementId = 'motor-gasoline-consumption-trans-light-fuel';
55058    var units = '';
55059
55060    if ($('#' + elementId).length > 0) {
55061        Highcharts.chart(elementId, {
55062            chart: {
55063                type: 'line',
55064                spacingBottom: 25,
55065                events: {
55066                    load: creditsSizeAndPosition,
55067                    redraw: creditsSizeAndPosition
55068                }
55069            },
55070			credits: {
55071                enabled: true,
55072                href: null,
55073                style: {
55074                    cursor: 'normal'
55075                }
55076            },
55077            data: {
55078                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
55079                startRow: 5,
55080                firstRowAsNames: true,
55081                complete: function (options) {
55082                    if (options.series.length > 0) {
55083                        options.series[0].yAxis = 0;
55084                        options.series[1].yAxis = 1;
55085                    }
55086                },
55087                beforeParse: function (csv) {
55088                    var parsedCSV = csvParser(csv);
55089                    units = parsedCSV[1][0] + "," + parsedCSV[1][1];
55090                    this.chart.title.update({ text: parsedCSV[0][0] });
55091                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
55092                    this.chart.yAxis[1].update({ title: { text: parsedCSV[1][1] } });
55093                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
55094                    this.chart.update(
55095                        {
55096							accessibility: {
55097								description: parsedCSV[4][0],
55098							},
55099                            exporting: {
55100                                menuItemDefinitions:
55101                                {
55102                                    label: {
55103                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
55104                                    }
55105                                },
55106                                buttons: {
55107                                    contextButton: {
55108                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
55109                                    }
55110                                }
55111                            }
55112                        }
55113                    );
55114                    return csv;
55115                }
55116
55117            },
55118			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
55119            xAxis: {
55120                labels: {
55121                    format: "{value}",
55122                },
55123                tickInterval: 5,
55124                startOnTick: true,
55125                minPadding: 0,
55126                maxPadding: 0
55127            },
55128            yAxis: [
55129                {
55130                    min: 0,
55131                    tickInterval: 50,
55132                    labels: {
55133                        format: "{value}",
55134						style: { "color": Highcharts.eiaColors.blue }
55135                    }, 
55136					title: {
55137						style: { "color": Highcharts.eiaColors.blue }
55138					}
55139                },
55140                {
55141                    min: 0,
55142                    tickInterval: 5,
55143                    opposite: true,
55144                    labels: {
55145                        format: "{value}",
55146						style: { "color": Highcharts.eiaColors.brown }
55147                    },
55148					title: {
55149						style: { "color": Highcharts.eiaColors.brown }
55150					}
55151                }
55152            ],
55153            tooltip: {
55154                useHTML: true,
55155                shared: true,
55156                formatter: function () {
55157                    var index = 0;
55158                    if (this.points[0].series.name === "light-duty vehicle fuel economy") {
55159                        index = 1;
55160                    }
55161                    const yItem = this.y.toFixed(2) + " " + units.split(',')[index];
55162                    return '<span>' + this.x + '<br/><span style="font-size: 16px;color:' + this.points[0].color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + this.points[0].series.name + '</b><br/>' + yItem + '</span><br/><span style="font-size: 16px;color:' + this.points[1].color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + this.points[1].series.name + '</b><br/>' + yItem + '</span>';
55163                }
55164            },
55165			responsive: {
55166                rules: [{
55167                    condition: {
55168                        maxWidth: 450
55169                    },
55170                    chartOptions: {
55171						chart: {
55172							height: 450
55173						}
55174                    }
55175                },
55176				{
55177					condition: {
55178						minWidth: 451
55179					},
55180					
55181					chartOptions: {
55182						chart: {
55183							height: '65%'
55184						}
55185					}
55186				}]
55187            }
55188        });
55189    }
55190};
55191
55192},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],305:[function(require,module,exports){
55193const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
55194const csvParser = require('../../includes/csvParser');
55195
55196module.exports = function (Highcharts, appPath) {
55197    const elementId = 'percentage-of-homes-with-refrigerators-freezers';
55198
55199    if ($('#' + elementId).length > 0) {
55200        Highcharts.chart(elementId, {
55201            chart: {
55202                spacingBottom: 30,
55203                events: {
55204                    load: creditsSizeAndPosition,
55205                    redraw: creditsSizeAndPosition
55206                }
55207            },
55208			credits: {
55209                enabled: true,
55210                href: null,
55211                style: {
55212                    cursor: 'normal'
55213                }
55214            },
55215            data: {
55216                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
55217                startRow: 3,
55218                firstRowAsNames: true,
55219                complete: function (options) {
55220                    var point = {};
55221                    if (options.series.length > 0) {
55222                        for (var i = 0; i < options.series[0].data.length; i++) {
55223                            point = { name: options.series[0].data[i][0], y: options.series[0].data[i][1] };
55224                            options.series[0].data[i] = point;
55225                            switch (i) {
55226                                case 0:
55227                                    options.series[0].data[i] = {};
55228                                    break;
55229                                case 1:
55230                                    point.color = Highcharts.eiaColors.green;
55231                                    break;
55232                                case 2:
55233                                    point.color = Highcharts.eiaColors.green;
55234                                    break;
55235                                case 3:
55236                                    point.color = Highcharts.eiaColors.green;
55237                                    break;
55238                                case 4:
55239                                    options.series[0].data[i] = {};
55240                                    break;
55241                                case 6:
55242                                    point.color = Highcharts.eiaColors.blue;
55243                                    break;
55244                                case 7:
55245                                    point.color = Highcharts.eiaColors.blue;
55246                                    break;
55247                                case 8:
55248                                    point.color = Highcharts.eiaColors.blue;
55249                                    break;
55250                            }
55251                        }
55252                    }
55253                },
55254                beforeParse: function (csv) {
55255                    var parsedCSV = csvParser(csv);
55256                    this.chart.title.update({ text: parsedCSV[0][0] });
55257                    this.chart.credits.update({ text: parsedCSV[1][0] });
55258                    this.chart.yAxis[0].update({ title: { text: parsedCSV[2][0], style: { color: Highcharts.eiaColors.green } } });
55259                    this.chart.yAxis[1].update({ title: { text: parsedCSV[2][1], style: { color: Highcharts.eiaColors.blue } } });
55260                    this.chart.update(
55261                        {
55262							accessibility: {
55263								description: parsedCSV[3][0],
55264							},
55265                            exporting: {
55266                                menuItemDefinitions:
55267                                {
55268                                    label: {
55269                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
55270                                    }
55271                                },
55272                                buttons: {
55273                                    contextButton: {
55274                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
55275                                    }
55276                                }
55277                            }
55278                        }
55279                    );
55280                    return csv;
55281                }
55282            },
55283            xAxis: {
55284                labels: {
55285                    enabled: true
55286                }
55287            },
55288            yAxis: [{
55289                tickInterval: 10,
55290                min: 0,
55291                max: 100,
55292                color: Highcharts.eiaColors.blue,
55293                labels: {
55294                    format: '{value}%',
55295                    style:
55296                    {
55297                        color: Highcharts.eiaColors.green
55298                    }
55299                }
55300            },
55301            {
55302                tickInterval: 10,
55303                min: 0,
55304                max: 100,
55305                opposite: true,
55306                labels: {
55307                    format: '${value}',
55308                    style:
55309                    {
55310                        color: Highcharts.eiaColors.blue
55311                    }
55312                }
55313            }],
55314            tooltip: {
55315                formatter: function () {
55316                    var format = '<b>' + this.key + '</b>:';
55317                    this.color === Highcharts.eiaColors.blue ? format += '$' + this.y.toFixed(0) : format += this.y.toFixed(0) + '%';
55318                    return format;
55319                }
55320            },
55321            series: [
55322                {
55323                    type: 'column',
55324                    name: 'chart1',
55325                    id: 'chart1',
55326                    data: []
55327                },
55328                {
55329                    type: 'column',
55330                    name: 'chart2',
55331                    id: 'chart2',
55332                    data: []
55333                }
55334            ],
55335            legend: {
55336                enabled: false
55337            },
55338			responsive: {
55339                rules: [{
55340                    condition: {
55341                        maxWidth: 450
55342                    },
55343                    chartOptions: {
55344						chart: {
55345							height: 450
55346						}
55347                    }
55348                },
55349				{
55350					condition: {
55351						minWidth: 451
55352					},
55353					
55354					chartOptions: {
55355						chart: {
55356							height: '65%'
55357						}
55358					}
55359				}]
55360            }
55361        });
55362    }
55363};
55364
55365},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],306:[function(require,module,exports){
55366const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
55367const csvParser = require('../../includes/csvParser');
55368
55369module.exports = function (Highcharts, appPath) {
55370    const elementId = 'residential-energy-consumption-by-source';
55371    var units = '';
55372
55373    if ($('#' + elementId).length > 0) {
55374        Highcharts.chart(elementId, {
55375            chart: {
55376                type: 'area',
55377                events: {
55378                    load: creditsSizeAndPosition,
55379                    redraw: creditsSizeAndPosition
55380                }
55381            },
55382			credits: {
55383                enabled: true,
55384                href: null,
55385                style: {
55386                    cursor: 'normal'
55387                }
55388            },
55389            data: {
55390                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
55391                startRow: 5,
55392                firstRowAsNames: true,
55393                complete: function (options) {
55394                    if (options.series.length > 0) {
55395                        options.series[4].color = Highcharts.eiaColors.yellow;
55396                        options.series[3].color = Highcharts.eiaColors.green;
55397                        options.series[2].color = Highcharts.eiaColors.red;
55398                        options.series[1].color = Highcharts.eiaColors.blue;
55399                        options.series[0].color = Highcharts.eiaColors.darkBlue;
55400                        options.series.reverse();
55401                    }
55402                },
55403                beforeParse: function (csv) {
55404                    var parsedCSV = csvParser(csv);
55405                    this.chart.title.update({ text: parsedCSV[0][0] });
55406                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
55407                    units = parsedCSV[1][0];
55408                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
55409                    this.chart.update(
55410                        {
55411							accessibility: {
55412								description: parsedCSV[4][0],
55413							},
55414                            exporting: {
55415                                menuItemDefinitions:
55416                                {
55417                                    label: {
55418                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
55419                                    }
55420                                },
55421                                buttons: {
55422                                    contextButton: {
55423                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
55424                                    }
55425                                }
55426                            }
55427                        }
55428                    );
55429                    return csv;
55430                }
55431            },
55432            xAxis: {
55433                labels: {
55434                    format: "{value}",
55435                    type: 'category',
55436                },
55437                tickInterval: 5,
55438                startOnTick: true,
55439                minPadding: 0,
55440                maxPadding: 0
55441            },
55442            yAxis: {
55443                tickInterval: 2,
55444                max: 12,
55445                labels: {
55446                    format: "{value:,.0f}"
55447                }
55448            },
55449            plotOptions: {
55450                area: {
55451                    stacking: 'normal',
55452                }
55453            },
55454            tooltip: {
55455                useHTML: true,
55456                shared: true,
55457                formatter: function () {
55458                    var html = '<b>' + this.x + '</b><br/>';
55459                    this.points.filter(function (value) {
55460                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>';
55461                    });
55462                    return html;
55463                }
55464            },
55465            legend: {
55466                reversed: true
55467            },
55468			responsive: {
55469                rules: [{
55470                    condition: {
55471                        maxWidth: 450
55472                    },
55473                    chartOptions: {
55474						chart: {
55475							height: 500
55476						}
55477                    }
55478                },
55479				{
55480					condition: {
55481						minWidth: 451
55482					},
55483					
55484					chartOptions: {
55485						chart: {
55486							height: '65%'
55487						}
55488					}
55489				}]
55490            }
55491        });
55492    }
55493};
55494
55495},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],307:[function(require,module,exports){
55496const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
55497const csvParser = require('../../includes/csvParser');
55498
55499module.exports = function (Highcharts, appPath) {
55500    const elementId = 'residential-site-electricity-consumption-by-enduse';
55501    var units = '';
55502
55503    if ($('#' + elementId).length > 0) {
55504        Highcharts.chart(elementId, {
55505            chart: {
55506                type: 'bar',
55507                spacingBottom: 35,
55508                events: {
55509                    load: creditsSizeAndPosition,
55510                    redraw: creditsSizeAndPosition
55511                }
55512            },
55513			credits: {
55514                enabled: true,
55515                href: null,
55516                style: {
55517                    cursor: 'normal'
55518                }
55519            },
55520            title: {
55521                text: '',
55522				margin: 15
55523            },
55524            data: {
55525                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
55526                startRow: 4,
55527                firstRowAsNames: false,
55528
55529                beforeParse: function (csv) {
55530                    var parsedCSV = csvParser(csv);
55531                    this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] });
55532                    this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' });
55533                    units = parsedCSV[1][0];
55534                    this.chart.credits.update({ text: parsedCSV[2][0] });
55535                    this.chart.update(
55536                        {
55537							accessibility: {
55538								description: parsedCSV[3][0],
55539							},
55540                            exporting: {
55541                                menuItemDefinitions:
55542                                {
55543                                    label: {
55544                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
55545                                    }
55546                                },
55547                                buttons: {
55548                                    contextButton: {
55549                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
55550                                    }
55551                                }
55552                            }
55553                        }
55554                    );
55555                    return csv;
55556                }
55557
55558            },
55559			yAxis: {
55560				title: {
55561					enabled: false
55562				},
55563				labels: {
55564					format: '{value:.1f}%',
55565					align: 'right',
55566				}
55567			},
55568			xAxis: {
55569				labels: {
55570					style: {
55571						textOverflow: 'none',
55572						lineHeight: '12px'
55573					}
55574				}
55575			},
55576			legend: {
55577				enabled: false
55578			},
55579            tooltip: {
55580                useHTML: true,
55581                formatter: function () {
55582                    return "<span><b>" + this.key + "</b><br/> " + Highcharts.numberFormat(this.y, 1) + "%</span> " + units;
55583                }
55584            },
55585			responsive: {
55586				rules: [{
55587					condition: {
55588						maxWidth: 450
55589					},
55590
55591					chartOptions: {
55592						chart: {
55593							height: 700
55594						}
55595					}
55596				},
55597				{
55598					condition: {
55599						minWidth: 451
55600					},
55601
55602					chartOptions: {
55603						chart: {
55604							height: '65%'
55605						}
55606					}
55607				}]
55608			}
55609        });
55610    }
55611};
55612
55613},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],308:[function(require,module,exports){
55614const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
55615const csvParser = require('../../includes/csvParser');
55616
55617module.exports = function (Highcharts, appPath) {
55618    const elementId = 'total-energy-consumption-by-end-use-sector-column';
55619    var units;
55620
55621    if ($('#' + elementId).length > 0) {
55622        Highcharts.chart(elementId, {
55623            chart: {
55624                spacingBottom: 25,
55625                events: {
55626                    load: creditsSizeAndPosition,
55627                    redraw: creditsSizeAndPosition
55628                },
55629                type: 'column'
55630            },
55631			credits: {
55632                enabled: true,
55633                href: null,
55634                style: {
55635                    cursor: 'normal'
55636                }
55637            },
55638            data: {
55639                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
55640                startRow: 5,
55641                firstRowAsNames: true,
55642                beforeParse: function (csv) {
55643                    var parsedCSV = csvParser(csv);
55644                    this.chart.title.update({ text: parsedCSV[0][0] });
55645                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
55646                    this.chart.yAxis[0].update({ title: { text: "<span>" + parsedCSV[1][0] + "</span>" } });
55647                    units = parsedCSV[1][0];
55648                    this.chart.update(
55649                        {
55650							accessibility: {
55651								description: parsedCSV[4][0],
55652							},
55653                            exporting: {
55654                                menuItemDefinitions:
55655                                {
55656                                    label: {
55657                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
55658                                    }
55659                                },
55660                                buttons: {
55661                                    contextButton: {
55662                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
55663                                    }
55664                                }
55665                            }
55666                        }
55667                    );
55668                    return csv;
55669                }
55670            },
55671            xAxis: {
55672                labels: {
55673                    enabled: true,
55674                    format: '{value}'
55675                },
55676                type: 'category'
55677            },
55678            yAxis: [{
55679                //tickInterval: 2000,
55680                //max: 20000,
55681                labels: {
55682                    format: '{value:,.0f}'
55683                }
55684            }],
55685            tooltip: {
55686                useHTML: true,
55687                shared: true,
55688                formatter: function () {
55689                    var format = '<b>' + this.points[0].key + '</b><br/>';
55690                    for (var i = 0; i < this.points.length; i++) {
55691                        format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b>  <span>' + Highcharts.numberFormat(this.points[i].y, 2) + ' ' + units + '</span><br/>';
55692                    }
55693                    return format;
55694                }
55695            },
55696			colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue],
55697            legend: {
55698                enabled: true,
55699				reversed: true
55700            },
55701            plotOptions: {
55702                column: {
55703                    stacking: 'normal',
55704                    dataLabels: {
55705                        enabled: true,
55706                        useHTML: true,
55707                        style: {
55708                            color: 'contrast'
55709                        },
55710                        formatter: function () {
55711							var seriesLabel = Highcharts.numberFormat(this.y, 0);
55712							if (seriesLabel <= 1) {
55713								seriesLabel = ' ';
55714							}
55715                            return '<span>' + seriesLabel + '<span>';
55716                        }
55717                    }
55718                }
55719            },
55720            responsive: {
55721                rules: [{
55722                    condition: {
55723                        maxWidth: 450
55724                    },
55725                    chartOptions: {
55726                        chart: {
55727                            height: 500
55728                        },
55729                        plotOptions: {
55730                            column: {
55731                                dataLabels: {
55732                                    enabled: false
55733                                }
55734                            }
55735                        }
55736                    }
55737                },
55738                {
55739                    condition: {
55740                        minWidth: 451
55741                    },
55742
55743                    chartOptions: {
55744                        chart: {
55745                            height: '65%'
55746                        }
55747                    }
55748                }]
55749            }
55750        });
55751    }
55752};
55753
55754},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],309:[function(require,module,exports){
55755const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
55756const csvParser = require('../../includes/csvParser');
55757
55758module.exports = function (Highcharts, appPath) {
55759    const elementId = 'total-energy-consumption-by-end-use-sector';
55760    var units = '';
55761
55762    if ($('#' + elementId).length > 0) {
55763        Highcharts.chart(elementId, {
55764            chart: {
55765                type: 'area',
55766                spacingBottom: 30,
55767                events: {
55768                    load: creditsSizeAndPosition,
55769                    redraw: creditsSizeAndPosition
55770                }
55771            },
55772			credits: {
55773                enabled: true,
55774                href: null,
55775                style: {
55776                    cursor: 'normal'
55777                }
55778            },
55779            title: {
55780                text: ''
55781            },
55782            data: {
55783                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
55784                startRow: 5,
55785                firstRowAsNames: true,
55786                beforeParse: function (csv) {
55787                    var parsedCSV = csvParser(csv);
55788                    this.chart.title.update({ text: parsedCSV[0][0] });
55789                    units = parsedCSV[1][0];
55790                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
55791                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
55792                    this.chart.update(
55793                        {
55794							accessibility: {
55795								description: parsedCSV[4][0],
55796							},
55797                            exporting: {
55798                                menuItemDefinitions:
55799                                {
55800                                    label: {
55801                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
55802                                    }
55803                                },
55804                                buttons: {
55805                                    contextButton: {
55806                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
55807                                    }
55808                                }
55809                            }
55810                        }
55811                    );
55812                    return csv;
55813                }
55814
55815            },
55816			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
55817            xAxis: {
55818                labels: {
55819                    format: "{value}",
55820                },
55821                tickInterval: 5,
55822                startOnTick: true,
55823                minPadding: 0,
55824                maxPadding: 0
55825            },
55826            yAxis: {
55827                labels: {
55828                    format: "{value:,.0f}"
55829                },
55830                max: 100,
55831                tickInterval: 10,
55832				reversedStacks: false
55833            },
55834            plotOptions: {
55835                area: {
55836                    stacking: 'normal',
55837                }
55838            },
55839            tooltip: {
55840                useHTML: true,
55841                shared: true,
55842                formatter: function () {
55843                    var html = '<b>' + this.x + '</b><br/>';
55844                    this.points.filter(function (value) {
55845                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>';
55846                    });
55847                    return html;
55848                }
55849            },
55850            responsive: {
55851                rules: [{
55852                    condition: {
55853                        maxWidth: 450
55854                    },
55855                    chartOptions: {
55856						chart: {
55857							height: 500
55858						}
55859                    }
55860                },
55861				{
55862					condition: {
55863						minWidth: 451
55864					},
55865					
55866					chartOptions: {
55867						chart: {
55868							height: '65%'
55869						}
55870					}
55871				}]
55872            }
55873        });
55874    }
55875};
55876
55877},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],310:[function(require,module,exports){
55878const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
55879const csvParser = require('../../includes/csvParser');
55880
55881module.exports = function (Highcharts, appPath) {
55882    const elementId = 'total-fuel-consumption-in-manufacturing';
55883    var units;
55884
55885    if ($('#' + elementId).length > 0) {
55886        Highcharts.chart(elementId, {
55887            chart: {
55888                spacingBottom: 25,
55889                events: {
55890                    load: creditsSizeAndPosition,
55891                    redraw: creditsSizeAndPosition
55892                },
55893                type: 'column'
55894            },
55895			credits: {
55896                enabled: true,
55897                href: null,
55898                style: {
55899                    cursor: 'normal'
55900                }
55901            },
55902            data: {
55903                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
55904                startRow: 5,
55905                firstRowAsNames: true,
55906                beforeParse: function (csv) {
55907                    var parsedCSV = csvParser(csv);
55908                    this.chart.title.update({ text: parsedCSV[0][0] });
55909                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
55910                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
55911                    units = parsedCSV[1][0];
55912                    this.chart.update(
55913                        {
55914							accessibility: {
55915								description: parsedCSV[4][0],
55916							},
55917                            exporting: {
55918                                menuItemDefinitions:
55919                                {
55920                                    label: {
55921                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
55922                                    }
55923                                },
55924                                buttons: {
55925                                    contextButton: {
55926                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
55927                                    }
55928                                }
55929                            }
55930                        }
55931                    );
55932                    return csv;
55933                }
55934            },
55935			colors: [Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.red, Highcharts.eiaColors.yellow, Highcharts.eiaColors.green, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue],
55936            xAxis: {
55937                labels: {
55938                    enabled: true,
55939                    format: '{value}'
55940                },
55941                type: 'category'
55942            },
55943            yAxis: [{
55944                tickInterval: 2000,
55945                labels: {
55946                    format: '{value:,.0f}'
55947                }
55948            }],
55949            tooltip: {
55950                useHTML: true,
55951                shared: true,
55952                formatter: function () {
55953                    var format = '<b>' + this.points[0].key + '</b><br/>';
55954                    for (var i = 0; i < this.points.length; i++) {
55955                        format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b>  <span>' + Highcharts.numberFormat(this.points[i].y) + ' ' + units + ' (' + this.points[i].percentage.toFixed(1) + '%)</span><br/>';
55956                    }
55957                    return format;
55958                }
55959            },
55960            legend: {
55961                enabled: true,
55962            },
55963            plotOptions: {
55964                column: {
55965                    stacking: 'normal',
55966                    dataLabels: {
55967                        enabled: true,
55968                        style: {
55969                            color: 'contrast',
55970                            textOutline: 'none'
55971                        },
55972                        formatter: function () {
55973                            return '<span>' + Highcharts.numberFormat(this.point.percentage, 1) + '%<span>';
55974                        }
55975                    }
55976                }
55977            },
55978            responsive: {
55979                rules: [{
55980                    condition: {
55981                        maxWidth: 450
55982                    },
55983                    chartOptions: {
55984                        chart: {
55985                            height: 500
55986                        },
55987                        plotOptions: {
55988                            column: {
55989                                dataLabels: {
55990                                    enabled: false
55991                                }
55992                            }
55993                        }
55994                    }
55995                },
55996                {
55997                    condition: {
55998                        minWidth: 451
55999                    },
56000
56001                    chartOptions: {
56002                        chart: {
56003                            height: '65%'
56004                        }
56005                    }
56006                }]
56007            }
56008        });
56009    }
56010};
56011
56012},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],311:[function(require,module,exports){
56013const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
56014const csvParser = require('../../includes/csvParser');
56015
56016module.exports = function (Highcharts, appPath) {
56017    const elementId = 'transportation-by-type';
56018    var categories = [];
56019
56020    if ($('#' + elementId).length > 0) {
56021        Highcharts.chart(elementId, {
56022            chart: {
56023                type: 'bar',
56024                spacingBottom: 40,
56025                events: {
56026                    load: creditsSizeAndPosition,
56027                 
56027   redraw: creditsSizeAndPosition
56028                }
56029            },
56030			credits: {
56031                enabled: true,
56032                href: null,
56033                style: {
56034                    cursor: 'normal'
56035                }
56036            },
56037			title: {
56038				margin: 15
56039            },
56040            data: {
56041                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
56042                startRow: 4,
56043                firstRowAsNames: false,
56044                beforeParse: function (csv) {
56045                    var parsedCSV = csvParser(csv);
56046                    this.chart.title.update({ text: parsedCSV[0][0] });
56047                    this.chart.credits.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0]});
56048                    this.chart.update(
56049                        {
56050							accessibility: {
56051								description: parsedCSV[3][0],
56052							},
56053                            exporting: {
56054                                menuItemDefinitions:
56055                                {
56056                                    label: {
56057                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
56058                                    }
56059                                },
56060                                buttons: {
56061                                    contextButton: {
56062                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
56063                                    }
56064                                }
56065                            }
56066                        }
56067                    );
56068                    return csv;
56069                }
56070            },
56071			colors: [Highcharts.eiaColors.darkPurple, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.lightGreen, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.lightPurple, Highcharts.eiaColors.blue, Highcharts.eiaColors.darkGreen, Highcharts.eiaColors.brown, Highcharts.eiaColors.lightBrown],
56072            xAxis: {
56073                categories: categories,
56074                labels: {
56075                    enabled: false
56076                }
56077            },
56078            yAxis: {
56079                tickWidth: 0,
56080                labels: {
56081                    enabled: false
56082                },
56083                title: {
56084                    enabled: false
56085                },
56086                gridLineColor: "none" // no vertical gridlines
56087            },
56088            plotOptions: {
56089                bar: {
56090                    grouping: false,
56091					pointPadding: 0,
56092					groupPadding: 0,
56093                    colorByPoint: true,
56094                    dataLabels: {
56095                        enabled: true,
56096                        inside: true,
56097                        align: "left",
56098                        verticalAlign: "top",
56099                        style: {
56100                            "textOutline": "none",
56101                            "fontWeight": "bold"
56102                        },
56103                        crop: false,
56104                        overflow: "allow",
56105                        formatter: function () {
56106                            // converts to a percentage of the whole
56107                            return this.y >= 1 ? '<span style="color: ' + this.point.color + '">' + this.point.name + ' ' + Highcharts.numberFormat(this.point.y, 0) + '%</span>' :'<span style="color: ' + this.point.color + '">' + this.point.name + ' &lt;1%</span>' ;
56108                        }
56109                    }
56110                }
56111            },
56112            tooltip: {
56113                useHTML: true,
56114                formatter: function () {
56115                    return this.y >= 1 ? '<b>' + this.key + '</b><br/>' + Highcharts.numberFormat(this.y, 0) + '%' : '<b>' + this.key + '</b><br/>&lt;1%';
56116                }
56117            },
56118            legend: {
56119                enabled: false
56120            },
56121			responsive: {
56122				rules: [{
56123					condition: {
56124						maxWidth: 450
56125					},
56126
56127					chartOptions: {
56128						chart: {
56129							height: 540
56130						},
56131						plotOptions: {
56132                            bar: {
56133                                dataLabels: {
56134                                    y: -21,
56135                                    style: {
56136                                        "fontSize": "14px"
56137                                    }
56138                                }
56139                            },
56140                            series: {
56141                                pointWidth: 18
56142                            }
56143                        }
56144					}
56145				},
56146				{
56147					condition: {
56148                        minWidth: 451
56149                    },
56150                    chartOptions: {
56151                        chart: {
56152                            height: '70%'
56153                        },
56154                        plotOptions: {
56155                            bar: {
56156                                dataLabels: {
56157                                    y: -21,
56158                                    style: {
56159                                        "fontSize": "14px"
56160                                    }
56161                                }
56162                            },
56163                            series: {
56164                                pointWidth: 18
56165                            }
56166                        }
56167                    }
56168				}]
56169            }
56170        });
56171    }
56172};
56173
56174},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],312:[function(require,module,exports){
56175const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
56176const csvParser = require('../../includes/csvParser');
56177
56178module.exports = function (Highcharts, appPath) {
56179    const elementId = 'transportation-energy-source-fuels';
56180
56181    if ($('#' + elementId).length > 0) {
56182        Highcharts.chart(elementId, {
56183            chart: {
56184                type: 'pie',
56185                spacingBottom: 25,
56186                events: {
56187                    load: creditsSizeAndPosition,
56188                    redraw: creditsSizeAndPosition
56189                }
56190            },
56191			credits: {
56192                enabled: false,
56193                href: null,
56194                style: {
56195                    cursor: 'normal'
56196                }
56197            },
56198			caption: {
56199				verticalAlign: 'bottom',
56200				useHTML: true,
56201				style: {
56202					color: '#888',
56203					fontSize: '11px'
56204				},
56205				x: 32,
56206				y: 33
56207			},
56208            title: {
56209                text: '',
56210				margin: 5
56211            },
56212            data: {
56213                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
56214                startRow: 7,
56215                firstRowAsNames: false,
56216                complete: function (options) {
56217                    var point, i;
56218
56219                    for (i = 0; i < options.series[0].data.length; i++) {
56220                        point = { name: options.series[0].data[i][0], y: options.series[0].data[i][1] };
56221                        options.series[0].data[i] = point;
56222                    }
56223                },
56224                beforeParse: function (csv) {
56225                    var parsedCSV = csvParser(csv);
56226                    this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] });
56227                    this.chart.caption.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0] + '<br>' + parsedCSV[3][0] + '<br>' + parsedCSV[4][0] + '<br>' + parsedCSV[5][0] });
56228                    this.chart.update(
56229                        {
56230							accessibility: {
56231								description: parsedCSV[6][0],
56232							},
56233                            exporting: {
56234                                menuItemDefinitions:
56235                                {
56236                                    label: {
56237                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
56238                                    }
56239                                },
56240                                buttons: {
56241                                    contextButton: {
56242                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
56243                                    }
56244                                }
56245                            }
56246                        }
56247                    );
56248                    return csv;
56249                }
56250
56251            },
56252			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown],
56253            plotOptions: {
56254                pie: {
56255					size: '85%',
56256                    startAngle: 0,
56257                    dataLabels: {
56258                        enabled: true,
56259						useHTML: true,
56260                        format: "<strong>{point.name}</strong><br/>{point.percentage:.0f}%",
56261                        distance: 30,
56262                        color: Highcharts.eiaColors.darkGrey,
56263                        style: {
56264                            "fontSize": "12px"
56265                        }
56266                    }
56267                }
56268            },
56269            tooltip: {
56270                useHTML: true,
56271                formatter: function () {
56272                    return "<span><b>" + this.key + "</b><br/> " + Math.round(this.percentage) + "%</span>";
56273                }
56274            },
56275			responsive: {
56276				rules: [{
56277					condition: {
56278						maxWidth: 450
56279					},
56280
56281					chartOptions: {
56282						chart: {
56283							height: 540
56284						},
56285						plotOptions: {
56286							pie: {
56287								size: null,
56288								dataLabels: {
56289									enabled: false
56290								},
56291								showInLegend: true
56292							}
56293						},
56294						legend: {
56295							enabled: true,
56296							useHTML: true
56297						}
56298					}
56299				},
56300				{
56301					condition: {
56302						minWidth: 451
56303					},
56304
56305					chartOptions: {
56306						chart: {
56307							height: '75%'
56308						},
56309						plotOptions: {
56310							pie: {
56311								size: '65%',
56312								dataLabels: {
56313									enabled: true
56314								},
56315								showInLegend: false
56316							}
56317						},
56318						legend: {
56319							enabled: false
56320						}
56321					}
56322				}]
56323			}
56324        });
56325    }
56326};
56327
56328},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],313:[function(require,module,exports){
56329const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
56330const csvParser = require('../../includes/csvParser');
56331
56332module.exports = function (Highcharts, appPath) {
56333    const elementId = 'us-average-by-census-region-selected-years';
56334    var units = '';
56335
56336    if ($('#' + elementId).length > 0) {
56337        Highcharts.chart(elementId, {
56338            chart: {
56339                type: 'column',
56340                spacingBottom: 30,
56341                events: {
56342                    load: creditsSizeAndPosition,
56343                    redraw: creditsSizeAndPosition
56344                }
56345            },
56346			credits: {
56347                enabled: true,
56348                href: null,
56349                style: {
56350                    cursor: 'normal'
56351                }
56352            },
56353            data: {
56354                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
56355                startRow: 5,
56356                firstRowAsNames: true,
56357                beforeParse: function (csv) {
56358                    var parsedCSV = csvParser(csv);
56359                    this.chart.title.update({ text: parsedCSV[0][0] });
56360                    units = parsedCSV[1][0];
56361                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
56362                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
56363                    this.chart.update(
56364                        {
56365							accessibility: {
56366								description: parsedCSV[4][0],
56367							},
56368                            exporting: {
56369                                menuItemDefinitions:
56370                                {
56371                                    label: {
56372                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
56373                                    }
56374                                },
56375                                buttons: {
56376                                    contextButton: {
56377                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
56378                                    }
56379                                }
56380                            }
56381                        }
56382                    );
56383                    return csv;
56384                }
56385            },
56386			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
56387            xAxis: {
56388                labels: {
56389                    enabled: true
56390                }
56391            },
56392            yAxis: {
56393                tickInterval: 10,
56394                labels: {
56395                    format: '{value}'
56396                }
56397            },
56398            tooltip: {
56399                formatter: function () {
56400                    return '<b>' + this.key + '</b><br/><b>' + this.series.name + ': </b>' + this.y.toFixed(0) + ' ' + units;
56401                }
56402            },
56403            legend: {
56404                enabled: true
56405            },
56406			responsive: {
56407                rules: [{
56408                    condition: {
56409                        maxWidth: 450
56410                    },
56411                    chartOptions: {
56412						chart: {
56413							height: 500
56414						}
56415                    }
56416                },
56417				{
56418					condition: {
56419						minWidth: 451
56420					},
56421					
56422					chartOptions: {
56423						chart: {
56424							height: '65%'
56425						}
56426					}
56427				}]
56428            }
56429        });
56430    }
56431};
56432
56433},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],314:[function(require,module,exports){
56434const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
56435const csvParser = require('../../includes/csvParser');
56436
56437module.exports = function (Highcharts, appPath) {
56438    const elementId = 'us-energy-used-for-transportation';
56439
56440    if ($('#' + elementId).length > 0) {
56441        Highcharts.chart(elementId, {
56442            chart: {
56443                type: 'pie',
56444                spacingBottom: 25,
56445                events: {
56446                    load: creditsSizeAndPosition,
56447                    redraw: creditsSizeAndPosition
56448                }
56449            },
56450			credits: {
56451                enabled: true,
56452                href: null,
56453                style: {
56454                    cursor: 'normal'
56455                }
56456            },
56457            title: {
56458                text: '',
56459				margin: 5
56460            },
56461            data: {
56462                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
56463                startRow: 3,
56464                firstRowAsNames: false,
56465                beforeParse: function (csv) {
56466                    var parsedCSV = csvParser(csv);
56467                    this.chart.title.update({ text: parsedCSV[0][0] });
56468                    this.chart.credits.update({ text: parsedCSV[1][0] });
56469                    this.chart.update(
56470                        {
56471							accessibility: {
56472								description: parsedCSV[2][0],
56473							},
56474                            exporting: {
56475                                menuItemDefinitions:
56476                                {
56477                                    label: {
56478                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
56479                                    }
56480                                },
56481                                buttons: {
56482                                    contextButton: {
56483                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
56484                                    }
56485                                }
56486                            }
56487                        }
56488                    );
56489                    return csv;
56490                }
56491            },
56492			colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.blue],
56493            plotOptions: {
56494             
56494   pie: {
56495                    startAngle: -100,
56496                    dataLabels: {
56497                        enabled: true,
56498                        format: "<strong>{point.name}</strong><br/> {point.percentage:.0f}%",
56499                        distance: 10,
56500                        color: "contrast",
56501                        style: {
56502                            "fontSize": "12px"
56503                        }
56504                    }
56505                }
56506            },
56507            tooltip: {
56508                useHTML: true,
56509                formatter: function () {
56510                    return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>";
56511                }
56512            },
56513			responsive: {
56514				rules: [{
56515					condition: {
56516						maxWidth: 450
56517					},
56518
56519					chartOptions: {
56520						chart: {
56521							height: 410
56522						},
56523						plotOptions: {
56524							pie: {
56525								size: null,
56526								dataLabels: {
56527									enabled: false
56528								},
56529								showInLegend: true
56530							}
56531						},
56532						legend: {
56533							enabled: true
56534						}
56535					}
56536				},
56537				{
56538					condition: {
56539						minWidth: 451
56540					},
56541
56542					chartOptions: {
56543						chart: {
56544							height: '65%'
56545						},
56546						plotOptions: {
56547							pie: {
56548								size: '75%',
56549								dataLabels: {
56550									enabled: true
56551								},
56552								showInLegend: false
56553							}
56554						},
56555						legend: {
56556							enabled: false
56557						}
56558					}
56559				}]
56560			}
56561        });
56562    }
56563};
56564
56565},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],315:[function(require,module,exports){
56566const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
56567const csvParser = require('../../includes/csvParser');
56568
56569module.exports = function (Highcharts, appPath) {
56570    const elementId = 'us-households-total-by-census-region';
56571    var units = '';
56572
56573    if ($('#' + elementId).length > 0) {
56574        Highcharts.chart(elementId, {
56575            chart: {
56576                type: 'column',
56577                spacingBottom: 25,
56578                events: {
56579                    load: creditsSizeAndPosition,
56580                    redraw: creditsSizeAndPosition
56581                }
56582            },
56583			credits: {
56584                enabled: true,
56585                href: null,
56586                style: {
56587                    cursor: 'normal'
56588                }
56589            },
56590            data: {
56591                csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv',
56592                startRow: 5,
56593                firstRowAsNames: true,
56594                
56595                beforeParse: function (csv) {
56596                    var parsedCSV = csvParser(csv);
56597                    this.chart.title.update({ text: parsedCSV[0][0] });
56598                    units = parsedCSV[1][0];
56599                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
56600                    this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] });
56601
56602                    this.chart.update(
56603                        {
56604							accessibility: {
56605								description: parsedCSV[4][0],
56606							},
56607                            exporting: {
56608                                menuItemDefinitions:
56609                                {
56610                                    label: {
56611                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
56612                                    }
56613                                },
56614                                buttons: {
56615                                    contextButton: {
56616                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
56617                                    }
56618                                }
56619                            }
56620                        }
56621                    );
56622                    return csv;
56623                }
56624            },
56625			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow],
56626            xAxis: {
56627                labels: {
56628                    enabled: true
56629                }
56630            },
56631            yAxis: {
56632                tickInterval: 20,
56633				maxPadding: 0.01,
56634                labels: {
56635                    format: '{value}'
56636                }
56637            },
56638            tooltip: {
56639                formatter: function () {
56640                    return '<b>' + this.key + '</b><br/><b>' + this.series.name + ': </b>' + this.y.toFixed(0) + ' ' + units;
56641                }
56642            },
56643            legend: {
56644                enabled: true
56645            },
56646			responsive: {
56647                rules: [{
56648                    condition: {
56649                        maxWidth: 450
56650                    },
56651                    chartOptions: {
56652						chart: {
56653							height: 450
56654						}
56655                    }
56656                },
56657				{
56658					condition: {
56659						minWidth: 451
56660					},
56661					
56662					chartOptions: {
56663						chart: {
56664							height: '65%'
56665						}
56666					}
56667				}]
56668            }
56669        });
56670    }
56671};
56672
56673},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],316:[function(require,module,exports){
56674const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
56675const csvParser = require('../../includes/csvParser');
56676
56677module.exports = function (Highcharts, appPath) {
56678    const elementId = 'generation-share-total';
56679
56680    if ($('#' + elementId).length > 0) {
56681        Highcharts.chart(elementId, {
56682            chart: {
56683                type: 'line',
56684                spacingBottom: 25,
56685                events: {
56686                    load: creditsSizeAndPosition,
56687                    redraw: creditsSizeAndPosition
56688                }
56689            },
56690			credits: {
56691                enabled: true,
56692                href: null,
56693                style: {
56694                    cursor: 'normal'
56695                }
56696            },
56697            data: {
56698                csvURL: appPath + '/wind/charts/' + elementId + '.csv',
56699                startRow: 6,
56700                firstRowAsNames: true,
56701                complete: function (options) {
56702                    if (options.series.length > 0) {
56703                        options.series[0].yAxis = 0;
56704                        options.series[1].yAxis = 1;
56705                    }
56706                },
56707                beforeParse: function (csv) {
56708                    var parsedCSV = csvParser(csv);
56709                    this.chart.title.update({ text: parsedCSV[0][0] });
56710                    this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } });
56711                    this.chart.yAxis[1].update({ title: { text: parsedCSV[2][0] } });
56712                    this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] });
56713                    this.chart.update(
56714                        {
56715							accessibility: {
56716								description: parsedCSV[5][0],
56717							},
56718                            exporting: {
56719                                menuItemDefinitions:
56720                                {
56721                                    label: {
56722                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
56723                                    }
56724                                },
56725                                buttons: {
56726                                    contextButton: {
56727                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
56728                                    }
56729                                }
56730                            }
56731                        }
56732                    );
56733                    return csv;
56734                }
56735            },
56736			colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown],
56737            xAxis: {
56738                labels: {
56739                    format: "{value}",
56740					distance: 10
56741                },
56742                showLastLabel: true,
56743                startOnTick: true,
56744                tickPositioner: function () {
56745                    const dateMin = this.dataMin;
56746                    const dateMax = this.dataMax;
56747                    const positions = [];
56748                    for (let position = dateMin; position <= dateMax; position += 4) { // increment in 10 year periods
56749                        positions.push(position);
56750                    }
56751                    return positions;
56752                }
56753            },
56754            yAxis: [
56755                {
56756                    labels: {
56757                        format: "{value}",
56758						style: { "color": Highcharts.eiaColors.blue }
56759                    },
56760					title: {
56761						style: { "color": Highcharts.eiaColors.blue }
56762					},
56763					/*maxPadding: 0,*/
56764					tickInterval: 50,
56765					alignTicks: false
56766                },
56767                {
56768                    opposite: true,
56769                    labels: {
56770                        format: "{value:.0f}%",
56771						style: { "color": Highcharts.eiaColors.brown }
56772                    },
56773					title: {
56774						style: { "color": Highcharts.eiaColors.brown }
56775					},
56776					tickInterval: 0.5,
56777					/*maxPadding: 0,*/
56778					alignTicks: false,
56779                    gridLineColor: 'none'
56780                }
56781            ],
56782            tooltip: {
56783                useHTML: true,
56784                shared: true,
56785                formatter: function () {
56786                    var html = '<b>' + this.x + '</b><br/>';
56787                    this.points.filter(function (value) {
56788                        html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y
56789                        if (value.series.name === "generation") {
56790                            html += ' ' + value.series.yAxis.axisTitle.textStr + '<br/>';
56791                        } else {
56792                            html += '%<br/>';
56793                        }
56794                    });
56795                    return html;
56796                }
56797            },
56798            responsive: {
56799                rules: [{
56800                    condition: {
56801                        maxWidth: 450
56802                    },
56803                    chartOptions: {
56804						chart: {
56805							height: 400
56806						},
56807						yAxis: [
56808							{
56809								tickInterval: 50
56810							},
56811							{
56812								tickInterval: 1
56813							}
56814						]
56815                    }
56816                },
56817				{
56818					condition: {
56819						minWidth: 451
56820					},
56821					
56822					chartOptions: {
56823						chart: {
56824							height: '65%'
56825						},
56826						yAxis: [
56827							{
56828								tickInterval: 50
56829							},
56830							{
56831								tickInterval: 0.5
56832							}
56833						]
56834					}
56835				}]
56836            }
56837        });
56838    }
56839};
56840
56841},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],317:[function(require,module,exports){
56842const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
56843const csvParser = require('../../includes/csvParser');
56844
56845
56846module.exports = function (Highcharts, map, appPath) {
56847    const elementId = 'top-wind-states';
56848    let mapData = Highcharts.geojson(map, 'map');
56849
56850    // Our own options definition as two different series, will populate the data in the complete callback
56851    var seriesOptions = [
56852        {
56853            id: "rank1",
56854            type: "map",
56855            allAreas: true,
56856            keys: ["postal-code"],
56857            joinBy: ['hc-a2', 'code'],
56858            data: [],
56859            mapData: mapData,
56860            states: {
56861                hover: {
56862                    color: '#a4edba'
56863                }
56864            },
56865            dataLabels: {
56866                enabled: true,
56867                formatter: function () {
56868                    if (this.point.nameCode) {
56869                        if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") {
56870                            return this.point.code + " " + this.point.nameCode;
56871                        }
56872                        else {
56873                            return this.point.code + "<br/>" + this.point.nameCode;
56874                        }
56875                    }
56876                    return this.point.code
56877                },
56878                style: {
56879                    fontSize: '10px'
56880                }
56881            },
56882            tooltip: {
56883                valueSuffix: ''
56884            },
56885            showInLegend: false
56886        }
56887    ];
56888
56889    if ($('#' + elementId).length > 0) {
56890        Highcharts.mapChart(elementId, {
56891            chart: {
56892                map: map,
56893                spacingBottom: 25,
56894                events: {
56895                    load: creditsSizeAndPosition,
56896                    redraw: creditsSizeAndPosition
56897                }
56898            },
56899			credits: {
56900                enabled: false,
56901                href: null,
56902                style: {
56903                    cursor: 'normal'
56904                }
56905            },
56906			caption: {
56907				verticalAlign: 'bottom',
56908				useHTML: true,
56909				style: {
56910					color: '#888',
56911					fontSize: '11px'
56912				},
56913				x: 32,
56914				y: 33
56915			},
56916            tooltip: {
56917                enabled: true,
56918                useHTML: true,
56919                formatter: function () {
56920                    if (this.point.nameCode) {
56921                        return '<b>' + this.point.name + '</b><br/>' + this.point.nameCode;
56922                    }
56923                    else {
56924                        return false;
56925                    }
56926                },
56927                style: {
56928                    textAlign: 'center'
56929                }
56930            },
56931            legend: {
56932                enabled: false
56933            },
56934            data: {
56935                csvURL: appPath + '/wind/charts/' + elementId + '.csv',
56936                startRow: 4,
56937				firstRowAsNames: false,
56938                complete: function (options) {
56939                    var point;
56940                    for (var i = 0; i < options.series[0].data.length; i++) {
56941                        point = options.series[0].data[i];
56942
56943                        if (point.value) {
56944                            switch (point.value) {
56945                                case 1:
56946                                    seriesOptions[0].data.push({
56947                                        code: point.name,
56948                                        color: Highcharts.eiaColors.red,
56949                                        nameCode: "<span>#" + point.value + "</span>"
56950                                    });
56951                                    break;
56952                                case 2:
56953                                    seriesOptions[0].data.push({
56954                                        code: point.name,
56955                                        color: Highcharts.eiaColors.blue,
56956                                        nameCode: "<span>#" + point.value + "</span>"
56957                                    });
56958                                    break;
56959                                case 3:
56960                                    seriesOptions[0].data.push({
56961                                        code: point.name,
56962                                        color: Highcharts.eiaColors.yellow,
56963                                        nameCode: "<span>#" + point.value + "</span>"
56964                                    });
56965                                    break;
56966                                case 4:
56967                                    seriesOptions[0].data.push({
56968                                        code: point.name,
56969                                        color: Highcharts.eiaColors.brown,
56970                                        nameCode: "<span>#" + point.value + "</span>"
56971                                    });
56972                                    break;
56973                                case 5:
56974                                    seriesOptions[0].data.push({
56975                                        code: point.name,
56976                                        color: Highcharts.eiaColors.green,
56977                                        nameCode: "<span>#" + point.value + "</span>"
56978                                    });
56979                                    break;
56980                                default:
56981                                    seriesOptions[0].data.push({
56982                                        code: point.name,
56983                                        color: "none",
56984                                        nameCode: "<span>#" + point.value + "</span>"
56985                                    });
56986                            }
56987                        }
56988                    }
56989                    // replace series options parsed by Highcharts with our own options definition
56990                    options.series = seriesOptions;
56991                },
56992                beforeParse: function (csv) {
56993                    var parsedCSV = csvParser(csv);
56994                    this.chart.title.update({ text: parsedCSV[0][0] });
56995                    this.chart.caption.update({ text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0] });
56996
56997                    this.chart.update(
56998                        {
56999							accessibility: {
57000								description: parsedCSV[3][0],
57001							},
57002                            exporting: {
57003								allowHTML: true,
57004                                menuItemDefinitions:
57005                                {
57006                                    label: {
57007                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
57008                                    }
57009                                },
57010                                buttons: {
57011                                    contextButton: {
57012                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
57013                                    }
57014                                }
57015                            }
57016                        }
57017                    );
57018                    return csv;
57019                }
57020            },
57021			responsive: {
57022				rules: [{
57023					condition: {
57024						maxWidth: 321
57025					},
57026					
57027					chartOptions: {
57028						chart: {
57029							height: 330
57030						},
57031						title: {
57032							margin: 5
57033						}
57034					}
57035				},
57036				{
57037					condition: {
57038						minWidth: 322,
57039						maxWidth: 400
57040					},
57041					
57042					chartOptions: {
57043						chart: {
57044							height: 350
57045						},
57046						title: {
57047							margin: 5
57048						}
57049					}
57050				},
57051				{
57052					condition: {
57053						minWidth: 401,
57054						maxWidth: 450
57055					},
57056					
57057					chartOptions: {
57058						chart: {
57059							height: 380
57060						},
57061						title: {
57062							margin: 5
57063						}
57064					}
57065				},
57066				{
57067					condition: {
57068						minWidth: 451
57069					},
57070					
57071					chartOptions: {
57072						chart: {
57073							height: '65%'
57074						},
57075						title: {
57076							margin: 15
57077						}
57078					}
57079				}]
57080			}
57081
57082        });
57083
57084    }
57085};
57086
57087},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],318:[function(require,module,exports){
57088const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition');
57089const csvParser = require('../../includes/csvParser');
57090
57091
57092module.exports = function (Highcharts, map, appPath) {
57093
57094    const elementId = 'utility-scale-wind-generation';
57095    let units = '';
57096    let mapData = Highcharts.geojson(map, 'map');
57097
57098    // Our own options definition as two different series, will populate the data in the complete callback
57099    var seriesOptions = [
57100        {
57101            id: "rank1",
57102            type: "map",
57103            mapData : mapData,
57104            allAreas: false,
57105            keys: ["postal-code"],
57106            joinBy: ['hc-a2', 'code'],
57107            data: [],
57108            mapData: mapData,
57109			borderWidth: 0.5,
57110            states: {
57111                hover: {
57112                    brightness: 0,
57113					borderWidth: 1,
57114					borderColor: Highcharts.eiaColors.darkGrey
57115                }
57116            },
57117			color: '#ffffff',
57118            dataLabels: {
57119                enabled: true,
57120                formatter: function () {
57121                    if (this.point.properties) {
57122                        return this.point.properties['hc-a2'];
57123                    }
57124                    return this.point.options.ucName;
57125                }
57126            },
57127            tooltip: {
57128                valueSuffix: ''
57129            }
57130        },
57131        {
57132            type: 'mapline',
57133            data: Highcharts.geojson(map, 'mapline'),
57134            color: 'silver',
57135            nullColor : 'silver',
57136            lineWidth : 1,
57137            showInLegend: false,
57138			enableMouseTracking: false,
57139            states : {
57140                inactive : {
57141                    enabled : false
57142                }
57143            }
57144        }
57145    ];
57146
57147    if ($('#' + elementId).length > 0) {
57148        Highcharts.mapChart(elementId, {
57149            chart: {
57150                map: map,
57151                spacingBottom: 25,
57152                events: {
57153                    load: creditsSizeAndPosition,
57154                    redraw: creditsSizeAndPosition
57155                }
57156            },
57157            mapView : {
57158                insetOptions : {
57159                    borderWidth : 1,
57160                    borderColor : 'silver'
57161                }
57162            },
57163			credits: {
57164                enabled: false,
57165                href: null,
57166                style: {
57167                    cursor: 'normal'
57168                }
57169            },
57170			caption: {
57171				verticalAlign: 'bottom',
57172				useHTML: true,
57173				margin: 0,
57174				style: {
57175					color: '#888',
57176					fontSize: '11px'
57177				},
57178				x: 32,
57179				y: 33
57180			},
57181            tooltip: {
57182                enabled: true,
57183                useHTML: true,
57184                formatter: function () {
57185                    var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : '';
57186                    if (html !== '')
57187                        return html
57188                }
57189            },
57190            data: {
57191                csvURL: appPath + '/wind/charts/' + elementId + '.csv',
57192                startRow: 5,
57193				firstRowAsNames: false,
57194                complete: function (options) {
57195                    var point;
57196                    var i;
57197
57198                    for (i = 0; i < options.series[0].data.length; i++) {
57199
57200                        point = options.series[0].data[i];
57201                        var pointValueString = Highcharts.numberFormat(point.value, 3) + ' ' + units;
57202
57203                        if (pointValueString) {
57204                            seriesOptions[0].data.push({
57205								code: point.name,
57206								nameCode: "<span>" + pointValueString + "</span>",
57207								value: point.value
57208							});
57209                        }
57210
57211                    }
57212
57213                    // replace series options parsed by Highcharts with our own options definition
57214                    options.series = seriesOptions;
57215
57216                },
57217                beforeParse: function (csv) {
57218
57219                    var parsedCSV = csvParser(csv);
57220                    units = parsedCSV[1][0];
57221                    this.chart.title.update({ text: parsedCSV[0][0] });
57222
57223
57224                    this.chart.update(
57225                        {
57226							caption: {
57227								text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0]
57228							},
57229							legend: {
57230								title: {
57231									text: parsedCSV[1][0]
57232								}
57233							},
57234							accessibility: {
57235								description: parsedCSV[4][0]
57236							},
57237                            exporting: {
57238								allowHTML: true,
57239                                menuItemDefinitions:
57240                                {
57241                                    label: {
57242                                        text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>'
57243                                    }
57244                                },
57245                                buttons: {
57246                                    contextButton: {
57247                                        menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label']
57248                                    }
57249                                }
57250                            }
57251                        }
57252                    );
57253                    return csv;
57254                }
57255            },
57256			colorAxis: {
57257                dataClasses: [{
57258                    color: '#FFFFFF',
57259					from: 0,
57260					to: 0
57261                },{
57262                    color: '#EFF5EB',
57263					from: 0.001,
57264					to: 1.0
57265                }, {
57266                    color: Highcharts.eiaColors.extraLightGreen,
57267					from: 1.001,
57268					to: 5.0
57269                }, {
57270					color: Highcharts.eiaColors.lightGreen,
57271                    from: 5.001,
57272					to: 10.0
57273                }, {
57274					color: Highcharts.eiaColors.green,
57275                    from: 10.001,
57276					to: 20.0
57277                }, {
57278					color: Highcharts.eiaColors.darkGreen,
57279                    from: 20.001,
57280					to: 30.0
57281                }, {
57282					color: '#213512',
57283                    from: 30.001
57284                }]
57285            },
57286            legend: {
57287                align: 'center',
57288                backgroundColor: 'white',
57289                borderColor: 'white',
57290                layout: 'horizontal',
57291                symbolPadding: 10,
57292				symbolRadius: 0,
57293				valueDecimals: 2,
57294				labelFormatter: function () {
57295                    if (this.from === 0) {
57296						$(this.legendItem.symbol.element).attr({
57297							strokeWidth: 1,
57298							stroke: '#e7e7e7',
57299							width: 11.5,
57300							height: 11.5,
57301							x: 2.5
57302						});
57303						return '= 0';
57304                    }
57305					else if (this.from === 30.001) {
57306						return ' > ' + Highcharts.numberFormat((this.from - 0.001), 2);
57307					}
57308					else {
57309						return Highcharts.numberFormat(this.from, 2) + ' - ' + Highcharts.numberFormat(this.to, 2);
57310					}
57311                }
57312            },
57313			plotOptions: {
57314				map: {
57315					dataLabels: {
57316						style: {
57317							fontSize: '6.8px'
57318						}
57319					}
57320				}
57321			},
57322			responsive: {
57323				rules: [{
57324					condition: {
57325						maxWidth: 321
57326					},
57327					
57328					chartOptions: {
57329						chart: {
57330							height: 380
57331						},
57332						title: {
57333							margin: 20
57334						},
57335                        plotOptions: {
57336                            map: {
57337                                dataLabels: {
57338                                    style: {
57339                                        fontSize: '7px',
57340                                        lineHeight: 7
57341                                    }
57342                                }
57343                            }
57344                        }
57345					}
57346				},
57347				{
57348					condition: {
57349						minWidth: 322,
57350						maxWidth: 400
57351					},
57352					
57353					chartOptions: {
57354						chart: {
57355							height: 370
57356						},
57357						title: {
57358							margin: 5
57359						},
57360                        plotOptions: {
57361                            map: {
57362                                dataLabels: {
57363                                    style: {
57364                                        fontSize: '8px',
57365                                        lineHeight: 8
57366                                    }
57367                                }
57368                            }
57369                        }
57370					}
57371				},
57372				{
57373					condition: {
57374						minWidth: 401,
57375						maxWidth: 450
57376					},
57377					
57378					chartOptions: {
57379						chart: {
57380							height: 400
57381						},
57382						title: {
57383							margin: 5
57384						},
57385                        plotOptions: {
57386                            map: {
57387                                dataLabels: {
57388                                    style: {
57389                                        fontSize: '8px',
57390                                        lineHeight: 8
57391                                    }
57392                                }
57393                            }
57394                        }
57395					}
57396				},
57397				{
57398					condition: {
57399						minWidth: 451
57400					},
57401					
57402					chartOptions: {
57403						chart: {
57404							height: '65%'
57405						},
57406						title: {
57407							margin: 15
57408						},
57409						plotOptions: {
57410							map: {
57411								dataLabels: {
57412									style: {
57413                                        fontSize: '16px'
57414                                    }
57415								}
57416							}
57417						}
57418					}
57419				}]
57420			}
57421        });
57422    }
57423};
57424
57425},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}]},{},[233]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.