UNPKG

756 kBSource Map (JSON)View Raw
1{"version":3,"sources":["node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-pack/_prelude.js","lib/compiler/scjson-to-module.js","lib/compiler/scxml-to-scjson.js","lib/compiler/static-analysis/file-utils.js","lib/compiler/static-analysis/scjson-analyzer.js","lib/runtime/compiler-internals.js","lib/runtime/document-string-to-model.js","lib/runtime/facade.js","lib/runtime/platform-bootstrap/node/get.js","lib/runtime/platform-bootstrap/node/platform.js","lib/runtime/platform-bootstrap/node/url.js","node_modules/esprima/esprima.js","node_modules/grunt-browserify/node_modules/browserify/lib/_empty.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/assert/assert.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/buffer/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/buffer/node_modules/base64-js/lib/b64.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/buffer/node_modules/ieee754/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/buffer/node_modules/isarray/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/events/events.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/inherits/inherits_browser.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/path-browserify/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/process/browser.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/punycode/punycode.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/querystring-es3/decode.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/querystring-es3/encode.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/querystring-es3/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/duplex.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/lib/_stream_duplex.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/lib/_stream_passthrough.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/lib/_stream_readable.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/lib/_stream_transform.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/lib/_stream_writable.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/node_modules/buffer-shims/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/node_modules/core-util-is/lib/util.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/node_modules/process-nextick-args/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/node_modules/util-deprecate/browser.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/passthrough.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/readable.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/transform.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/readable-stream/writable.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/stream-browserify/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/stream-http/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/stream-http/lib/capability.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/stream-http/lib/request.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/stream-http/lib/response.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/stream-http/node_modules/builtin-status-codes/browser.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/stream-http/node_modules/to-arraybuffer/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/string_decoder/index.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/url/url.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/url/util.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/util/support/isBufferBrowser.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/util/util.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/xtend/immutable.js","node_modules/optimist/index.js","node_modules/optimist/node_modules/minimist/index.js","node_modules/optimist/node_modules/wordwrap/index.js","node_modules/sax/lib/sax.js","node_modules/scion-core/lib/scion.js","node_modules/text-to-js-identifier/index.js","node_modules/vm-browserify2/index.js","node_modules/vm-browserify2/node_modules/indexof/index.js"],"names":[],"mappings":"sfAAA,48BCAA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;GACA,6BACA,yBACA;AACA;AACA,eACA,MACA,0CACA,oDACA,QACA,CACA,uBACA,yBACA,aACA,6CACA,oCACA,sBACA,0BACA,GACA,CACA,oDACA,0DACA,AACA,yCACA,aACA,KACA,yCACA,qCACA,uCACA,MACA,CACA,+BACA,4CACA,AACA,sBACA,0BACA,CACA,+DACA,oDACA,AACA,+CACA,8GACA,oDACA,AACA,mCACA,AACA,aACA,QACA,EACA,mFACA,uEACA,AACA,kDACA,2CACA,kDACA,AACA,oCACA,AACA,aACA,QACA,EACA,oFACA,uEACA,AACA,2FACA,WACA,EACA,qBACA,8FACA,KACA;AACA;AACA;AACA;AACA,2DACA,iCACA,OACA,WACA,AACA,mFACA,IACA,CACA,gCACA,sBACA,4DACA,+CACA,QACA,0GACA,KACA,UACA,IACA,CACA,kCACA,qDACA,uBACA,8DACA,kFACA,sIACA,uDACA;AACA,IACA,AACA,CACA,iEACA,kCACA,2CACA;AACA,qDACA,CACA;2CACA,4CACA,2DACA,+CACA,OACA;QACA,4DACA,0IACA,yDACA,KACA,cACA,IACA,CACA,2CACA,CACA;yEACA,MACA,CACA,mDACA,CACA;6BACA,MACA,CACA,2BACA,UACA,+CACA,wFACA,+BACA,CACA,uDACA,WACA,GACA,aACA,uBACA,4BACA,qCACA,mCACA,2DACA,AACA,AACA,QACA,0BACA,oBACA,iEACA,WACA,oBACA,MACA,AACA,gFAEA,MACA;AACA,OAHA,CAIA,KACA,CACA,iDACA,oBACA,2BACA,AACA,QACA,AACA;oCACA,CACA;qCACA,GACA;sFACA,SACA,AACA,CACA;yDACA,sFACA,AACA,6BACA,AACA;AACA;MACA,iCACA,sEACA,8HACA,iEACA,8EACA,0FACA,+EACA,AACA,AACA,gDACA,AACA;8CACA,AACA,cACA,kBACA,qDACA,AACA,eACA,GACA,EACA,gCACA,gCACA,iBACA,CACA,mFACA,wCACA,qHACA,AACA,2GACA,AACA,mEACA,yEACA,GACA,CACA,CACA,+CAEA,4BACA,wBACA,MACA,UACA,OACA,AACA,oBACA,MACA;mBACA,sEACA,WACA,AACA,2CACA,qDACA,AACA,gCACA,oDACA,kCACA,kCACA,mCACA,6EACA,SACA,CACA,CACA,AACA,CACA;aACA,AACA,qCACA,MACA,eACA,MACA,CAjCA,CAkCA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;GACA,gEACA,WACA,oBACA,2BACA,wBACA,YACA,CACA,mBACA,wJACA,AACA,wBACA,2JAEA,AACA,AACA,AACA,mBAJA,wFAKA,gDACA,aACA,sBACA,oCACA,uBACA,GACA,AACA,+BACA,oBACA,kCACA,yBACA,0BACA,8BACA,wDACA,mBACA,sBACA,uCACA,WACA,CACA,wCACA,UACA,gDACA,cACA,oBACA,YACA,aACA,GACA,4CAEA,CACA;+BACA,4DACA,2CACA,AACA,iCACA,gCACA,KACA,UACA,YACA,AACA,AACA,0BACA,UACA,AACA,CAhBA,CAiBA,iDACA,aACA,SACA,GACA,AACA,sDACA,8BACA,QACA,sGAEA,oFACA,CACA;+BACA,OACA,aACA,UACA,AACA,eACA,CACA,CAVA,CAWA,AACA,AACA,AACA,AACA,AACA;;;;;GACA,mEACA,CACA;mCACA,KACA;+CACA,uCACA,gCACA,0CACA,QACA,AACA,kCACA,QACA,AACA,uBACA,QACA,EACA,+CACA,CACA;yDACA,EACA,CACA,wDAEA,eACA,2CACA,aACA,eACA,QACA,CACA,AACA,0CACA,sGACA,IACA,AACA,oCACA,YACA,AACA,mBACA,mCACA,kCACA,CACA;sEACA,oBACA,CACA;AACA;YACA,QACA,AACA,gBACA,uEACA,UACA,AACA,oCACA,KACA,AACA,mCACA,OACA,iEACA,AACA,gDACA,AACA,6BACA,AACA,4CACA,sBACA,AACA,mDACA,CACA,WACA,iEACA,MACA,CACA,AACA,CACA;6BACA,kBACA,AACA,6BACA,AACA,kFACA,qCACA,IACA,IACA,WACA,iEACA,MACA,CACA,AACA,8BACA,kBACA,AACA,GACA;wBACA,IACA,eACA,iEACA,MACA,CACA,IACA,AACA,UACA,GACA,AACA,4BACA,iBACA,sCACA,AACA,yBACA,iBACA,oCACA,AACA,gCACA,yDACA,iBACA,AACA,kCACA,oDACA,KACA,AACA,sCACA,AACA,oCACA,AACA;oCACA,AACA,AACA,gBACA,0CACA,OACA,AACA,mBACA,AACA,8BACA,sDACA,4CACA,YACA;AACA;6DACA,kFACA,4BACA,qCACA,0DACA,gCACA,iCACA,iCACA,YACA,OACA,MACA,CACA,AACA,wCACA,AACA,CACA;kBACA,qDACA;4BACA,kEACA,qBACA,WACA,GACA;mBACA,+DACA,mCACA;AACA,GACA,AACA,CACA;uCACA,sCACA,eACA,4FACA,kCACA,4FACA,cACA,CACA,GACA,AACA,+BACA,MACA,CACA,AACA,AACA,AACA,+BACA,6BACA,2EACA,AACA,SACA,OACA,sCACA,6CACA,4CACA,kDACA,MACA,yBACA,AACA,OACA,qBACA,2BACA,iCACA,2BACA,mBACA,QACA,OACA,IACA,iDAEA,wBACA,2BACA,OACA,WACA,0BACA,OACA,kFACA;qBARA,QASA,KACA,eACA,AACA,AACA,UACA,MACA,AACA,CAxMA,2CAyMA,CACA;wBACA,iBACA,sBACA,8FACA,AACA,uFACA,0BACA,2FACA,SACA,CACA,AACA,sDACA,AACA,YACA,mDACA,2CACA,gFACA,yDACA,oGACA,KACA,UACA,qDACA,+DACA,4DACA,wGACA,KACA,cACA,UACA,AACA,UACA,iBACA,kCACA,qBACA,MACA,sBACA,AACA,AACA,oEACA,KACA,AACA,GACA,kCACA,kCACA,iCACA,wCACA,yCACA,4CACA,0CACA,iDACA,QACA,mBACA,aACA,wCACA,OACA,kBACA,OACA,GACA,CACA,CACA;AACA;AACA,8CACA,uDACA,iGAEA,0CACA,QACA,kBACA,+DACA;AACA,sDANA,CAOA,qBACA,IACA,AACA,CACA,eACA,eACA;AACA,yBACA,CACA;UACA,0CACA,kBACA,OACA,sBACA,AACA,aACA,eACA,oBACA,wBACA,AACA,CACA;0BACA,sBACA,AACA,wBACA,sCACA,aACA,EACA,AACA,0BACA,SACA,gBACA,uCACA,WACA,OACA,CACA,CACA,mBACA,YACA,QACA,GACA,AACA,4DACA,gCACA,sBACA,QACA,wBACA,eACA,KACA,AACA,GACA,8JCnsBA;AACA;AACA,AACA;AACA,gBACA,mBACA;AACA,OACA,qBACA,oCACA,UACA,GACA,SACA,IACA,CACA,yCACA,kDACA,MACA,CACA,yBACA,OACA,qCACA,YACA,4CACA,MACA,SACA,GACA,CACA,6BACA,2CACA,AACA,UACA,UACA,qCACA;AACA;AACA;UACA,qBACA,AACA,AACA;+BACA,YACA,MACA,cACA,oBACA,kBACA,AACA,0BACA,AACA,aACA,AACA;GACA,+CACA,CACA;iBACA,sEACA,CACA;iDACA,gCACA,aACA,CACA;yCACA,4BACA,QACA,AACA,AACA,oBACA,OACA,AACA,8BACA,CACA,kBACA,cACA,oBACA,aACA,AACA,2BACA,mBACA,aACA,AACA,+BACA,8BACA,AACA,0BACA,uCACA,MACA,AACA,CACA;gEACA,AACA,qBACA,wBACA,oBACA,GACA,AACA,yBACA,OACA,AACA,oBACA,MACA,AACA,oCACA,AACA,mCACA,AACA,YACA;qBACA,CACA;iDACA,uCACA,qCACA,GACA,CACA,AACA,gBACA,6BACA,yBACA,GACA,AACA,8BACA,YACA,AACA,qBACA,AACA,+BACA,WACA,AACA,iCACA,OACA,cACA,oBACA,YACA,AACA,OACA,AACA,6CAEA,iCACA,MACA,YACA,0BACA,wBACA,2BACA,wBACA,AACA,gBACA;aACA,AACA,qDACA,sDACA,GACA,gCACA,oDACA,GACA,AACA,EACA;UACA,yBACA,uBACA,0BACA,4BACA,0BACA,0BACA,iBACA;AACA;OACA,AACA,iBACA;4BACA,CACA;uCACA,+BACA,oCACA,kBACA,KACA,8BACA,kCACA,2DACA,MACA,CACA,AACA,EACA;KACA,0BACA,wBACA,AACA,iBACA;oCACA,CACA;kCACA,GACA,4BACA,CACA;gCACA,OACA,AACA,CACA;AACA;AACA;AACA,AACA,AACA;AAlEA,8BAmEA,AACA;+BACA,CACA,AACA;0BACA,wBACA,AACA,qBACA,aACA,AACA;AACA;kBACA,AACA,sDACA;KACA,kBACA,qBACA,+BACA,mDACA,GACA,AACA,CACA,AACA,wBACA,OACA,QACA,WACA,WACA,AACA,6CACA,CACA;6BACA,MACA;UACA,6CACA,GACA;AACA;AACA,AACA,mCACA,CACA;AACA;mBACA,oDACA,kFACA,OACA,CACA,AACA,4BACA,CACA;KACA,GACA,AACA,2BACA,CACA;kCACA,iCACA,uBACA;oCACA,qBACA,sCACA,qBACA,mBACA,0BACA,aACA,AACA,QACA,qBACA,EACA,CACA,CACA,AACA,4BACA,qBACA,EACA,AACA,yBACA,CACA;gBACA,MACA;gBACA,AACA,0EACA,AACA;AACA;2CACA,oCACA,0BACA,QACA,GACA,AACA,AACA,0BACA,AACA,cACA,AACA,UACA,CACA,eACA,UACA;AACA,yBACA,CACA;AACA;2FACA,IACA,2GCrTA,qBACA,+GAGA,YACA,OACA,aACA,AACA,AACA,cACA,sCACA,UACA,AACA,iEACA,QACA,4EACA,KACA;KACA,gBACA,KACA,AACA,IACA,AACA,UACA,SACA,AACA,CAvBA,CADA,CAyBA,eACA,sGC5BA,AACA,aACA,+BACA,sBACA,gBACA,mEACA,8EAGA,aACA,gBACA,cACA,kBACA,oDACA,AACA,iCACA,yCACA,kDACA,gDACA,gCACA,oCACA,AACA,uDACA,4BACA,2BACA,gBACA,CACA,GACA,AACA,sBACA,sBACA,eACA,AACA,kFACA,GACA,AACA,oDACA,yCACA,AACA,uDACA,0EACA,AACA,mFACA,WACA,QACA,uCACA,OACA,CACA,AACA,sDACA,sBACA,AACA,4EACA,aACA,oDACA,mCACA,8CACA,OACA,AACA,CACA,YACA,AACA,aACA,oBACA,kEACA,mCACA,8CACA,OACA,CACA,CACA,CACA,AACA,gDAEA,CACA;AACA;2CACA,CACA,AACA,4EACA,UACA,OACA,aACA,aACA,4BACA,mBACA,+BACA,AACA,AACA,oBACA,MACA,CACA,yBACA,sDACA,AACA,4BACA,oDACA,MACA,AACA,gBACA,oBACA,AACA,oCACA,aACA,kDACA,MACA,CACA,gCACA,6BACA,wDACA,MACA,AACA,OACA,GACA,0CACA,cACA,CACA;4CACA,AACA,uBACA,CACA;AACA;eACA,AACA,oCACA,QACA,CACA,AACA,OACA,GACA,CAzDA,wBA0DA,yCACA,MACA,gCACA,yCACA,MACA,qCACA,aACA,CACA;AACA;sBACA,yCACA,SACA,CACA,0BACA,cACA,+CACA,MACA,AACA,OACA,GACA,4BACA,eACA,0CACA,MACA,AACA,OACA,GACA,kCACA,YACA,AACA,gBACA,+CACA,AACA,iCACA,EACA,sBACA,SACA,CACA,AACA,eACA,+CACA,AACA,kCACA,EACA,sBACA,SACA,CACA,AACA,eACA,+CACA,AACA,kCACA,EACA,sBACA,SACA,CACA,AACA,OACA,QACA,AACA,AACA,4DACA,YACA,AACA,iDACA,6GACA,AACA,oCACA,aACA,8CACA,aACA,mFACA,oDACA,UACA,AACA,OACA,QACA,AACA,gDACA,oCACA,WACA,AACA,uDACA,uCACA,cACA,AACA,0CACA,sBACA,AACA,2CACA,AACA,2BACA,AACA,wCACA,AACA,yDACA,+BACA,IACA,CACA,AACA,sDACA,sBACA,AACA,oBACA,cACA,GACA,AACA,YACA,AACA,MACA,iCACA,AACA,kCACA,iBACA,eACA,SACA,AACA,OACA,QACA,AACA,iFAEA,CACA;gFACA,mEACA,MACA,AACA,CACA;kGACA,yEACA,MACA,CACA,AACA,AACA,CAbA,0CAcA,sCACA,yCACA,0CACA,8BACA,QACA,AACA,CACA;2BACA,QACA,CACA,GACA,AACA,wCACA,CACA;4DACA,oCACA,SACA,GACA,AACA,gEACA,+CACA,YACA,4BACA,WACA,aACA,eACA,2BACA,AACA,QACA,AACA,eACA,sBACA,6BACA,cACA,cACA,uBACA,kCACA,AACA,AACA,AACA,kBACA,KACA,UACA,eACA,UACA,eACA,YACA,AACA,YACA,AACA,sCACA,CACA;8EACA,qBACA,KACA,AACA,OACA,WACA,AACA,kCACA,4EACA,MACA,AACA,sCACA,iCACA,uCACA,eACA,6CACA,yEACA,eACA,mCACA,6CACA,+CACA,AACA,oCACA,AACA,sCACA,SACA,4CACA,MACA,CACA,GACA,AACA,wBACA,CACA,aACA,AACA,qBACA,CACA,AACA,aACA;mCACA,CACA,mBACA,CACA,AACA,4BACA,wBACA,QACA,eACA,eACA,QACA,AACA,4BACA,eACA,AACA,qBACA,AACA,4BACA,CACA,wBACA,CACA;gBACA,KACA,CACA,AACA,CAtXA,CADA,CAwXA,eACA,sFChYA,eACA,uBACA,sDACA,uDACA,AACA,0MCLA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;;;EACA,AACA,AACA,aACA,8BACA,yCACA,iDACA,iBACA,qBACA,UACA,oCACA,+CACA,gDACA,eACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;GACA,4DACA,uGACA,aACA,GACA,AACA,0BACA,AACA,yEACA,yBACA,WACA,QACA,OACA,AACA,6CACA,IACA,GACA,CACA,4CACA,4CACA,AACA,sCACA,yCACA,QACA,QACA,UACA,qBACA,uBACA,YACA,CACA,EACA,YACA,uBACA,8BACA,yBACA,AACA,QACA,GACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;GACA,uDACA,mBACA,4BACA,wCACA,0CACA,AACA,6CACA,2BACA,oBACA,qDACA,KACA;0CACA,gBACA,+DACA,IACA,uBACA,yBACA,iEACA,UACA,4BACA,6BACA,AACA,6BACA,uBACA,oBACA,QACA,GACA,CACA,GACA,CACA,AACA,iDACA,IACA,mEACA,UACA,AACA,AACA,iBACA,yBACA,QACA,GACA,CACA,AACA,mDACA,yBACA,SACA,gBACA,IACA,yEACA,UACA,AACA,AACA,iBACA,4BACA,QACA,GACA,CACA,CACA,AACA,8DACA,4BACA,kCACA,qBACA,mBACA,KACA,cACA,YACA,AACA,AACA,wBACA,mCACA,IACA,KACA,GACA,CACA,wDACA,WACA,oBACA,2BACA,wBACA,YACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;GACA,mEACA,sBACA,kCACA,yBACA,AACA,oCACA,mCACA,kBACA,AACA,uGACA,aACA,GACA,AACA,kCACA,oCACA,2CACA,gCACA,oBACA,CACA;wCACA,kBACA,kBACA,4CACA,WACA,CACA,AACA,UACA,gEACA,IACA,mBACA,6BACA,kBACA,AACA,qCACA,6CACA,kBACA,AACA,sCACA,+BACA,kBACA,IACA,GACA,yBACA,IACA,KACA,GACA,EACA,gDACA,mBACA,sDACA,4CACA,mBACA,KACA,CACA,AACA,yEACA,mCACA,gEACA,QACA,AACA,yCACA,4BACA,IACA,KACA,GACA,CACA,eACA,2JC/OA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;;;EACA,AACA,aACA,qBACA,oEACA,8BACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;GACA,AACA,AACA,AACA,AACA;;;;IACA,mCACA,wCACA,QACA,QACA,WACA,kCACA,SACA,GACA,SACA,CACA,AACA,AACA,AACA,AACA;;;;IACA,oCACA,kBACA,iCACA,AACA;qCACA,QACA,QACA,WACA,kCACA,SACA,GACA,SACA,CACA,AACA,AACA,AACA,AACA;;;;IACA,wCACA,sCACA,qCACA,SACA,AACA,CACA;AACA,4BAEA,uBACA,iCACA,sCACA,8BAEA,0DACA,AACA;AAHA,CALA,eASA,AACA,uKCtFA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;;;EACA,AACA,aACA,AACA,AACA,AACA;;GACA,iBACA,qBACA,kBACA,MACA,wBACA,wBACA,mCACA,OACA,4BACA,IACA,EACA,0BACA,yBACA,SACA,QACA,gDACA,IACA,CACA,4BACA,IACA,GACA,GACA,CACA,oCACA,uBACA,kDACA,qCACA;CACA,aACA,8BACA,CACA;uBACA,SACA,CACA;aACA,0BACA,CACA,CACA,eACA,aACA,oBACA,AACA,gGChEA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;;;EACA,AACA,aACA,eACA,mBACA,4BACA,mBACA,kBACA,wBACA,0BAIA;KACA,yBACA,kBACA,IACA,AACA,AACA,MACA,kCACA,yBACA,IACA,AACA,AACA,2BACA,AACA,iFACA,2CACA,QACA,IACA,KACA,OACA,AACA,yCACA,0BACA,SACA,AACA,0CACA,eACA,kCACA,sBACA,iBACA,IACA,GACA,GACA,SACA,AACA,uBACA,AACA;IACA,aACA,AACA,AACA,gBACA,kFACA,aACA,kBACA,wBACA,QACA,AACA,0BACA,AACA,wBACA,6CACA,AACA,YACA;kCACA,gDACA,kCACA,MACA,uBACA,wEACA,yCACA,wCACA,SACA,AACA,QACA,KACA,AACA,EACA,AACA,AACA,AACA,AACA,AACA;;;;;sFACA,yBACA,SACA,AACA,EACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;4DACA,0BACA,SACA,AACA,yCACA,AACA,kBACA,sBACA,AACA,GACA,AACA;AACA;AACA;YACA,kBACA,iCACA,AACA,qCACA,gBACA,8CACA,AACA,YACA;kCACA,iDACA,kCACA,MACA,uBACA,wEACA,yCACA,wCACA,SACA,AACA,OACA,CACA;IACA,yBACA;cACA;aACA,2CACA,eACA;AACA,AACA,CACA;6BACA,UACA,AACA,AACA,0DAEA,iBACA,2DACA;AACA,AACA,AACA,CANA,CAzIA,AACA,aA+IA,AACA,AACA,IAnJA,sJCzBA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;;;EACA,AACA,aACA,sBACA,OACA,eACA,4CACA,0BACA,iBACA,SACA,AACA,mDACA,0BACA,AACA,6BACA,AACA,gCACA,MACA,AACA,uCACA,+BACA,QACA,AACA,AACA,sDCvCA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;;;;;;;;;;;yBAEA,CACA,AACA,aACA;AACA,AACA;AACA,oEACA,oBACA,+CACA,SACA,cACA,sBACA,IACA,0BACA,CACA,AACA,gBACA,OACA,UACA,aACA,OACA,aACA,SACA,MACA,OACA,OACA,MACA,WACA,UACA,kBACA,UACA,eACA,cACA,WACA,gBACA,eACA,SACA,OACA,UACA,MACA,MACA,iBACA,mBACA,AACA,qCACA,gBACA,MACA,aACA,UACA,cACA,iBACA,aACA,gBACA,oBACA,WACA,AACA,AACA,cACA,mCACA,+BACA,oCACA,sCACA,uCACA,uCACA,sCACA,4CACA,4CACA,8CACA,AACA,WACA;qDACA,uCACA,OACA;yCACA,sBACA,IACA;8CACA,iDACA,uBACA,AACA,cACA,sBACA,yCACA,oCACA,+BACA,uCACA,yCACA,kCACA,kCACA,gCACA,6BACA,wBACA,6BACA,mCACA,wCACA,0CACA,qCACA,qCACA,mCACA,sCACA,gDACA,kDACA,yCACA,sCACA,mCACA,8BACA,gCACA,qCACA,yCACA,gCACA,yBACA,gCACA,2CACA,kDACA,2CACA,0BACA,2BACA,qCACA,qCACA,gCACA,gCACA,iCACA,iCACA,iCACA,wBACA,mBACA,uBACA,8BACA,qCACA,mCACA,sBACA,mBACA,6BACA,2CACA,2CACA,kCACA,iCACA,gCACA,8BACA,+BACA,mCACA,uCACA,yCACA,oCACA,+BACA,gCACA,AACA,AACA,gCACA,2BACA,AACA,AACA,6BACA;SACA,iBACA,uCACA,qCACA,yCACA,2CACA,8CACA,oCACA,4CACA,4CACA,gDACA,+DACA,yDACA,uDACA,8DACA,oEACA,kDACA,uCACA,sDACA,0CACA,wCACA,0CACA,wEACA,2EACA,4EACA,iFACA,iFACA,+EACA,8DACA,0EACA,iFACA,oGACA,sGACA,kEACA,kFACA,oEACA,kDACA,4CACA,yFACA,gEACA,wDACA,yEACA,4CACA,0CACA,4CACA,4CACA,oCACA,AACA,AACA,wBACA;MACA,CACA;wBACA,AACA,8wMACA;uBACA,AACA,AACA,i+OACA;AACA;AACA;AACA,AACA;kCACA,CACA,sCACA,4BACA,SACA,CACA,AACA,4BACA,2BACA;AACA,AACA,wBACA,6CACA,EACA,AACA,0BACA,+BACA,EACA,AACA,4BACA,CACA;2CACA,AACA,iDACA,OACA,2CACA,AACA,UACA;AACA;uBACA,SACA,oCACA,uCACA,UACA,CACA,AACA,OACA,MACA,WACA,AACA,OACA,AACA,CACA,AACA;yBACA,yDACA,wJACA,EACA,AACA,CACA,AACA;6BACA,gDACA,OACA,AACA,CACA,AACA;0BACA,uCACA,4CACA,4CACA,OACA,AACA,+BACA,8BACA;oBACA;oBACA;WACA;2DACA,KACA,AACA,8BACA,8BACA;oBACA;oBACA;oBACA;WACA;0DACA,KACA,AACA,CACA,AACA;iCACA,QACA,QACA,WACA,aACA,aACA,cACA,MACA,cACA,AACA,QACA,AACA,sCACA,QACA,QACA,iBACA,gBACA,cACA,cACA,gBACA,aACA,aACA,YACA,YACA,MACA,cACA,AACA,QACA,AACA,8BACA,0BACA,YACA,AACA,CACA,AACA;sBACA,WACA,YACA,qCACA,SACA,uCACA,wBACA,UACA,yCACA,uCACA,WACA,2CACA,0CACA,4BACA,YACA,6CACA,6CACA,aACA,+CACA,cACA,iDACA,eACA,gBACA,aACA,cACA,AACA,QACA,AACA,CACA,AACA;6CACA,IACA,AACA,wCACA,AACA,2DACA,AACA,cACA,MACA,WACA,AACA,sBACA,sBACA,KACA,cACA,aACA,IACA,qBACA,gCACA,4BACA,qCACA,SACA,mBACA,2BACA,4BACA,wBACA,SACA,mBACA,SACA,CACA,AACA,uCACA,kBACA,AACA,oBACA,WACA,OACA,MACA,kCACA,AACA,AACA,AACA,4BACA,sBACA,SACA,8BACA,mBACA,uBACA,yCACA,WACA,MACA,kCACA,AACA,2CACA,KACA,2CACA,GACA,MACA,GACA,qBACA,MACA,OACA,CACA,AACA,mBACA,mCACA,eACA,MACA,wBACA,AACA,iDACA,KACA,CACA,AACA,gCACA,kBACA,AACA,0BACA,aACA,MACA,OACA,MACA,kCACA,AACA,AACA,IACA,AACA,oBACA,sBACA,+BACA,iDACA,GACA,MACA,mBACA,OACA,aACA,gBACA,yBACA,CACA;qCACA,GACA,QACA,wBACA,oCACA,WACA,MACA,wBACA,AACA,kDACA,KACA,CACA,OACA,GACA,WACA,GACA,MACA,CACA,AACA,CACA;kBACA,SACA,MACA,wBACA,AACA,wCACA,8CACA,KACA,CACA,0BACA,AACA,uBACA,QACA,wBACA,AACA,oBACA,qBACA,sBACA,AACA,2BACA,GACA,oCACA,mBACA,OACA,oDACA,GACA,MACA,GACA,qBACA,YACA,yBACA;2BACA,gBACA,GACA,QACA,4BACA,SACA,yBACA;EACA,QACA,MACA,4BACA,CACA,MACA,4BACA;AACA;wEACA,CACA;OACA,wBACA,QACA,CACA,MACA,qBACA;yCACA,SACA;QACA;QACA;QACA;sBACA,QACA,CACA,MACA,MACA,CACA,MACA,CACA,CACA,AACA,+BACA,mBACA,AACA,qBACA,oBACA,4CACA,WACA,oDACA,oBACA,OACA,GACA,CACA,4BACA,MACA,AACA,sCACA,QACA,AACA,eACA,YACA,AACA,EACA;YACA,CACA,uBACA,AACA,oBACA,WACA,4BACA,CACA,MACA,4CACA,eACA,AACA,4BACA,CACA,uBACA,AACA,sBACA,MACA,AACA,wBACA,cACA,AACA,4BACA,6BACA,4BACA,qCACA,OACA,yCACA,QACA,CACA,AACA,OACA,IACA,AACA,gCACA,WACA,AACA,kBACA,wBACA,cACA,AACA,OACA;aACA,oCACA,CACA,uBACA,GACA,6BACA,GACA,SACA,kCACA,kBACA,sBACA,6CACA,CACA,uBACA,CACA,IACA,GACA,AACA,oBACA,gBACA,gCACA,CACA,MACA,kBACA,QACA,aACA,AACA,OACA;aACA,0BACA,sCACA,CACA,uBACA,GACA,6BACA,GACA,SACA,kCACA,kBACA,sBACA,4CACA,CACA,uBACA,CACA,KACA,GACA,CACA,AACA,OACA,IACA,AACA,yBACA,WACA,AACA,SACA,2BACA,sBACA,oBACA,CACA;MACA,YACA,uDACA,CACA;MACA,YACA,wBACA,yBACA,GACA,WACA,CACA,MACA,CACA,AACA,2BACA,OACA,AACA,0BACA,cACA,AACA,WACA,AACA,MACA;0DACA,AACA,gBACA;AACA;iBACA,YACA,kCACA,YACA,6BACA,YACA,+CACA,YACA,oBACA,YACA,WACA,AACA,OACA,MACA,WACA,cACA,qBACA,gBACA,UACA,AACA,OACA,AACA,AACA,CACA,AACA;yBACA,WACA,AACA,UACA,YACA,iBACA,cACA,qBACA,gBACA,UACA,AACA,AACA,OACA;WACA,cACA,AACA,SACA,sBACA,wCACA,OACA,GACA,MACA,AACA,UACA,sBACA,wCACA,OACA,uBACA,OACA,MACA,AACA,UACA,MACA,oDACA,CACA;OACA,MACA,MACA,CACA,AACA,UACA,MACA,uBACA,MACA,UACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,MACA,MACA,AACA,MACA,QACA;wBACA,mBACA,QACA,OACA,AACA,CACA;iBACA,sCACA,gCACA,QACA,OACA,AACA,CACA;iBACA,gDACA,gDACA,gDACA,gDACA,yCACA,QACA,OACA,AACA,CACA;WACA,yCACA,GACA,MACA,CACA,CACA,CACA,AACA,AACA,yBACA,CACA,uBACA,AACA,WACA,kBACA,UACA,OACA,AACA,CACA,AACA;8BACA,YACA,AACA,sBACA,+BACA,CACA,MACA,gBACA,SACA,AACA,sBACA,CACA,uBACA,AACA,gDACA,CACA,uBACA,AACA,OACA,YACA,0CACA,eACA,qBACA,gBACA,UACA,AACA,OACA,AACA,kCACA,QACA,AACA,cACA,AACA,sBACA,WACA,6BACA,CACA,MACA,gBACA,SACA,AACA,sBACA,CACA;AACA,uBACA,AACA,iBACA,sBACA,OACA,uEACA,CACA,uBACA,CACA,AACA,OACA,YACA,qCACA,cACA,qBACA,gBACA,UACA,AACA,OACA,AACA,wCACA,YACA,AACA,8BACA,OACA,uBACA,cACA,OACA,QACA,aACA,GACA,AACA,oBACA,iCACA,CACA,MACA,gBACA,SACA,AACA,8BACA,CACA;AACA,uBACA,AACA,0FACA,CACA,uBACA,AACA,OACA,YACA,qCACA,SACA,iBACA,qBACA,gBACA,UACA,AACA,OACA,AACA,kCACA,OACA,AACA,GACA;AACA;2BACA,WACA,yBACA,OACA,OACA,sBACA,OACA,MACA,CACA,AACA,OACA,MACA,AACA,8BACA,kBACA,AACA,aACA,qDACA,IACA,AACA,4EACA,aACA,eACA,eACA,mBACA,AACA,OACA;AACA;AACA;AACA;gBACA,uBACA,GACA,4BACA,OACA,uBACA,GACA,+BACA,OACA,uBACA,4BACA,OACA,AACA,qBACA,6BACA,4BACA,OACA,CACA,CACA,AACA,gDACA,gBACA,SACA,WACA,OACA,AACA,aACA,gBACA,wDACA,gBACA,SACA,WACA,OACA,AACA,uBACA,gBACA,AACA,mBACA,6BACA,gBACA,SACA,6CACA,gDACA,gBACA,SACA,MACA,CACA,uBACA,CACA,AACA,gDACA,CACA,uBACA,AACA,OACA,YACA,gCACA,mBACA,qBACA,gBACA,UACA,AACA,OACA,AACA,CACA,AACA;4BACA,oDACA,AACA,mBACA,oCACA,IACA,AACA,iDACA,QACA,AACA,yBACA,WACA,AACA,uBACA,OACA,GACA,yBACA,WACA,qDACA,QACA,QACA,QACA,2BACA,GACA,WACA,kCACA,yBACA,kBACA,MACA,wBACA,MACA,UACA,CACA,UACA,SACA,KACA,UACA,SACA,KACA,UACA,SACA,KACA,UACA,SACA,KACA,UACA,SACA,KACA,UACA,SACA,OACA,UACA,QACA,SACA,GACA,0BACA,AACA,MACA,4BACA,yBACA,AACA,0BACA,wCACA,WACA,MACA,GACA,CACA,AACA,YACA,GACA,8CACA,GACA,MACA,WACA,MACA,6CACA,CACA,WACA,MACA,GACA,CACA,AACA,eACA,OACA,MACA,uBACA,AACA,OACA,YACA,oBACA,UACA,iBACA,0BACA,qBACA,UACA,AACA,OACA,AACA,CACA,AACA;uBACA,+DACA,AACA,qBACA,WACA,YACA,2BACA,cACA,AACA,IACA,AACA,yBACA,WACA,qBACA,WACA,OACA,gBACA,KACA,wBACA,wBACA,uBACA,QACA,iBACA,KACA,MACA,SACA,sBACA,WACA,gDACA,QACA,QACA,YACA,KACA,UACA,YACA,KACA,UACA,YACA,KACA,UACA,QACA,2BACA,GACA,cACA,kCACA,SACA,8BACA,iBACA,SACA,eACA,OACA,gBACA,GACA,CACA,CACA,UACA,YACA,KACA,UACA,YACA,KACA,UACA,YACA,KACA,AACA,MACA,oBACA,6CACA,CACA;oBACA,sBACA,SACA,+BACA,CACA;oBACA,2BACA,SACA,GACA,CACA,AACA,YACA,GACA,8CACA,GACA,MACA,WACA,MACA,6CACA,GACA,8CACA,GACA,MACA,WACA,cACA,UACA,SACA,GACA,CACA,AACA,gBACA,CACA,uBACA,AACA,UACA,kBACA,MACA,AACA,OACA,YACA,eACA,QACA,sCACA,AACA,iBACA,UACA,gBACA,qBACA,gBACA,UACA,AACA,OACA,AACA,CACA,AACA;kCACA,CACA;AACA;AACA;AACA;AACA;AACA;qBACA,QACA,AACA,iCACA,QAEA;AACA;AACA;AACA;AAJA,wEAKA,+BACA,0BACA,oCACA,eACA,sBACA,4BACA,WACA,OACA,kBACA,EACA;AACA;AACA;CACA,QACA,kCACA,AACA,kBACA,AACA,CACA;GACA,QACA,cACA,oCACA,eACA,AACA,CACA;AACA;AACA;GACA,2BACA,wBACA,OACA,MACA,CACA,AACA,0BACA,mCACA,AACA,eACA,uBACA,iEACA,AACA,qBACA,iBACA,yBACA,WACA,cACA,gBACA,WACA,SACA;sCACA,oCACA,oBACA,MACA,+CACA,oCACA,yCACA,aACA,aACA,MACA,MACA,aACA,YACA,KACA,wBACA,aACA,KACA,CACA,CACA,AACA,gBACA,oCACA,oBACA,AACA,CACA;6BACA,SACA,OACA,aACA,AACA,KACA,AACA,2BACA,kBACA,AACA,YACA,SACA,sBACA,WACA,8CACA,CACA,MACA,AACA,GACA,iCACA,WACA,mBACA,GACA,cACA,uBACA,WACA,QACA,0CACA,aACA,SACA,MACA,OACA,eACA,SACA,MACA,CACA,+BACA,MACA,KACA,0BACA,MACA,QACA,QACA,GACA,CACA,AACA,OACA,OACA,cACA,AACA,KACA,AACA,sBACA,sBACA,eACA,AACA,eACA,KACA,oBACA,AACA,WACA,uBACA,oDACA,gBACA,wBACA,OACA,YACA,wBACA,YACA,cACA,kBACA,AACA,kBACA,qBACA,gBACA,UACA,AACA,OACA,AACA,OACA,4BACA,cACA,YACA,cACA,kBACA,AACA,aACA,UACA,AACA,OACA,AACA,wBACA,mBACA,AACA,MACA,AACA,kBACA,UACA,OACA,MACA,wBACA,AACA,AACA,AACA,kBACA,AACA,qBACA,MACA,wBACA,AACA,AACA,WACA,6CACA,CACA;yBACA,wCACA,sDACA,0CACA,cACA,MACA,CACA,CACA,AACA,mBACA,MACA,gCACA,oBACA,iBACA,WACA,AACA,MACA,AACA,OACA,OACA,AACA,iCACA,2BACA,+BACA,4BACA,mCACA,YACA,AACA,CACA;AACA,AACA;uBACA,oBACA,AACA,iCACA,wDACA,IACA,AACA,gDACA,oBACA,AACA,YACA,cACA,WACA,UACA,MACA,AACA,UACA,iDACA,+DACA,OACA,AACA,UACA,IACA;AACA;MACA,gEACA,CACA;6CACA,6CACA,sEACA,CACA;6CACA,6CACA,KACA,AACA,AACA,8BACA,iBACA,AACA,mBACA,QACA,AACA,uBACA,OACA,YACA,eACA,qBACA,gBACA,UACA,AACA,OACA,AACA,sBACA,AACA,gCACA,OACA,kEACA,kBACA,QACA,OACA,OACA,AACA,CACA;mCACA,OACA,kBACA,AACA,CACA;wBACA,OACA,qBACA,AACA,CACA;AACA;aACA,+CACA,OACA,sBACA,OACA,kBACA,AACA,uBACA,OACA,sBACA,AACA,CACA;6BACA,OACA,gBACA,AACA,CACA;AACA;4EACA,OACA,gBACA,AACA,CACA;yBACA,gBACA,gCACA,OACA,kBACA,CACA,AACA,OACA,kBACA,AACA,wBACA,qBACA,AACA,UACA,OACA,MACA,wBACA,AACA,AACA,AACA,kBACA,kBACA,MACA,wBACA,AACA,AACA,qCACA,sCACA,WACA,sBACA,YACA,+BACA,SACA,AACA,oBACA,aACA,qBACA,0BACA,AACA,OACA,sBACA,sFACA,MACA,mBACA,iBACA,cACA,MACA,eACA,cACA,IACA,mBACA,sBACA,OACA,CACA,mBACA,OACA,AACA,OACA,OACA,AACA,eACA,IACA,gBACA,AACA,eACA,qBACA,yBACA,AACA,UACA,AACA,oBACA,AACA,qBACA,sBACA,0BACA,AACA,qEACA,mBACA,YACA,OACA,AACA,gBACA,UACA,AACA,KACA,AACA,wBACA,qBACA,yBACA,AACA,qBACA,sBACA,0BACA,AACA,qEACA,mBACA,MACA,AACA,oBACA,WACA,uCACA,eACA,AACA,0BACA,eACA,qBACA,KACA,AACA,4CACA,YACA,iBACA,8CACA,AACA,oBACA,KACA,AACA,gBACA,gBACA,wBACA,GACA,cACA,aACA,kBACA,CACA,AACA,kCACA,gBACA,8BACA,GACA,cACA,qCACA,YACA,CACA,AACA,gFAGA,IACA,WACA,cACA,gBACA,mCACA,iBACA,EACA,4CACA,AACA,iCACA,uBACA,CACA,OACA,CACA,CACA,AACA,AACA,AACA,AACA;;;0EACA,eACA,iDACA,+BACA,sCACA,uBACA,wCACA,mCACA,GACA,CACA,yBACA,oBACA,cACA;AACA,OACA,CACA,AACA,oCACA,kBACA,kDACA,gCACA,sCACA,0BACA,yCACA,GACA,CACA,wBACA,QACA,kFACA,uBACA,6BACA,iBACA,CACA,AACA,CACA;yCACA,uBACA,0CACA,GACA,AACA,cACA,8BACA,iBACA,qDACA,mCACA,sCACA,yBACA,4CACA,GACA,CACA,AACA,sCACA,2BACA,UACA,CACA,yCACA,iBACA,iDACA,+BACA,sCACA,yBACA,wCACA,GACA,CACA,CACA,AACA,AACA,8CACA,sBACA,gBACA,gDACA,uBACA,iBACA,AACA,kBACA,MACA,AACA,CAlGA,AACA,yBAkGA,gBACA,eACA,UACA,cACA,cACA,MACA,gCACA,AACA,+BACA,uBACA,OACA,CACA,AACA,wBACA,MACA,iBACA,CACA,AACA,gEACA,kBACA,8BACA,cACA,eACA,MACA,AACA,0DACA,kBACA,2BACA,cACA,eACA,MACA,AACA,uGACA,kBACA,gCACA,iBACA,qBACA,mBACA,oBACA,sBACA,gBACA,eACA,MACA,AACA,qFACA,kBACA,mCACA,mBACA,gBACA,WACA,eACA,MACA,AACA,sEACA,kBACA,4BACA,gBACA,WACA,eACA,MACA,AACA,6EACA,4EACA,+BACA,mBACA,gBACA,WACA,eACA,MACA,AACA,0DACA,kBACA,yBACA,UACA,eACA,MACA,AACA,2DACA,kBACA,0BACA,WACA,eACA,MACA,AACA,iEACA,kBACA,2BACA,sBACA,UACA,eACA,MACA,AACA,0DACA,kBACA,uBACA,gBACA,UACA,eACA,MACA,AACA,gDACA,kBACA,oBACA,UACA,eACA,MACA,AACA,4EACA,kBACA,yBACA,mBACA,qBACA,UACA,eACA,MACA,AACA,0EACA,kBACA,wBACA,mBACA,qBACA,UACA,eACA,MACA,AACA,6FACA,kBACA,gCACA,qBACA,0BACA,eACA,eACA,MACA,AACA,iEACA,kBACA,6BACA,WACA,eACA,MACA,AACA,4DACA,kBACA,uBACA,eACA,MACA,AACA,mEACA,kBACA,2BACA,eACA,UACA,eACA,MACA,AACA,sDACA,kBACA,oBACA,eACA,MACA,AACA,0EACA,kBACA,oCACA,gBACA,eACA,MACA,AACA,uEACA,kBACA,uBACA,eACA,iBACA,iBACA,UACA,eACA,MACA,AACA,qEACA,kBACA,yBACA,gBACA,gBACA,UACA,eACA,MACA,AACA,qEACA,kBACA,yBACA,gBACA,gBACA,eACA,WACA,eACA,MACA,AACA,iGACA,kBACA,4BACA,eACA,qBACA,mBACA,oBACA,0BACA,WACA,eACA,MACA,AACA,+FACA,kBACA,2BACA,eACA,qBACA,mBACA,oBACA,0BACA,WACA,eACA,MACA,AACA,kDACA,kBACA,qBACA,UACA,eACA,MACA,AACA,yEACA,kBACA,sBACA,qBACA,0BACA,eACA,eACA,MACA,AACA,oEACA,kBACA,4BACA,gBACA,UACA,eACA,MACA,AACA,6CACA,kBACA,yBACA,8CACA,oBACA,kBACA,MACA,MACA,eACA,MACA,AACA,kFACA,kBACA,0CACA,gBACA,qBACA,cACA,eACA,MACA,AACA,+DACA,kBACA,uBACA,mBACA,cACA,eACA,MACA,AACA,+DACA,kBACA,0BACA,sBACA,UACA,eACA,MACA,AACA,oEACA,kBACA,iCACA,gBACA,eACA,MACA,AACA,8DACA,kBACA,8BACA,gBACA,eACA,MACA,AACA,6EACA,kBACA,+BACA,uBACA,qBACA,WACA,eACA,MACA,AACA,uDACA,kBACA,kBACA,qBACA,gBACA,eACA,MACA,AACA,kFACA,kBACA,kBACA,kBACA,oBACA,gBACA,iBACA,sBACA,eACA,eACA,MACA,AACA,wDACA,kBACA,0BACA,cACA,eACA,MACA,AACA,gEACA,kBACA,8BACA,cACA,eACA,MACA,AACA,yEACA,kBACA,oCACA,iBACA,eACA,MACA,AACA,4DACA,kBACA,4BACA,cACA,eACA,MACA,AACA,6DACA,kBACA,qBACA,qBACA,gBACA,eACA,MACA,AACA,oCACA,kBACA,WACA,eACA,MACA,AACA,0EACA,kBACA,kCACA,wBACA,WACA,eACA,MACA,AACA,mFACA,kBACA,kCACA,eACA,WACA,eACA,MACA,AACA,kEACA,kBACA,2BACA,gBACA,UACA,eACA,MACA,AACA,0EACA,kBACA,4BACA,wBACA,iBACA,eACA,MACA,AACA,sDACA,kBACA,oBACA,eACA,MACA,AACA,8DACA,kBACA,6BACA,cACA,eACA,MACA,AACA,yEACA,kBACA,wBACA,2BACA,mCACA,gBACA,uBACA,eACA,eACA,MACA,AACA,yEACA,2EACA,8BACA,uBACA,qBACA,UACA,eACA,MACA,AACA,4EACA,kBACA,sCACA,uBACA,WACA,eACA,MACA,AACA,+EACA,kBACA,sCACA,uBACA,UACA,eACA,MACA,AACA,qEACA,kBACA,2BACA,aACA,UACA,eACA,MACA,AACA,+DACA,kBACA,yBACA,eACA,UACA,eACA,MACA,AACA,+DACA,kBACA,0BACA,iBACA,UACA,eACA,MACA,AACA,sEACA,kBACA,wCACA,iBACA,WACA,eACA,MACA,AACA,2EACA,kBACA,kCACA,WACA,eACA,MACA,AACA,+EACA,kBACA,oCACA,WACA,eACA,MACA,AACA,gGACA,kBACA,wCACA,4BACA,uBACA,SACA,eACA,MACA,AACA,qFACA,kBACA,0CACA,iBACA,eACA,MACA,AACA,qEACA,kBACA,iCACA,SACA,eACA,MACA,AACA,sEACA,kBACA,kCACA,uBACA,cACA,eACA,MACA,AACA,0EACA,kBACA,kCACA,uBACA,SACA,eACA,MACA,AACA,yEACA,kBACA,8BACA,uBACA,cACA,eACA,MACA,AACA,AACA,AACA,8BACA,OACA,AACA,2CACA,uBACA,GACA;AACA,4FACA,CACA,OACA,CACA,AACA,mBACA,OACA,AACA,oCACA,qBACA,QACA,MACA,mBACA,CACA,kEACA,qBACA,kDACA,SACA,SACA,OACA,OACA,CACA,AACA,2CACA,gBACA,AACA,4BACA,0DACA,2BACA,yBACA,uBACA,wBACA,UACA,OACA,AACA,CACA,AACA;kCACA,UACA,AACA,8CACA,6BACA,4BACA,wBACA,kDACA,KACA,AACA,AACA,8CACA,KACA,AACA,sCACA,cACA,AACA,gDACA,GACA,oDACA,4BACA,wBACA,kDACA,KACA,AACA,AACA,0CACA,qBACA,aACA,YACA,MACA,OACA,CACA,AACA,CACA,AACA;4CACA,iCACA,AACA,yBACA,aACA,qCACA,qDACA,gEACA,2DACA,sDACA,4BACA,AACA,8CACA,sCACA,cACA,0EACA,cACA,mBACA,CACA,CACA,AACA,yDACA,WACA,OACA,UACA,AACA,sBACA,AACA,+CACA,kDACA,6EACA,KACA,AACA,6CACA,kCACA,SACA,AACA,gDACA,sCACA,yBACA,aACA,YACA,MACA,OACA,CACA,AACA,CACA;AACA,AACA;sBACA,WACA,4DACA,sBACA,OACA,CACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA;;;;;sCACA,IACA,AACA,uBACA,OACA,8DACA,CACA,gEACA,CACA,8BACA,YACA,wCACA,iBACA,MACA,QACA,KACA,CACA,AACA,CACA;AACA,AACA;+BACA,WACA,2DACA,sBACA,OACA,CACA,AACA,CACA,AACA;qBACA,6DACA,MACA,AACA,CACA,AACA;8BACA,0DACA,QACA,AACA,CACA;AACA,AACA;wCACA,6DACA,QACA,AACA,CACA,AACA;sBACA,IACA,AACA,yCACA,OACA,OACA,cACA,kBACA,UACA,WACA,WACA,WACA,WACA,WACA,YACA,YACA,aACA,WACA,WACA,KACA,AACA,4BACA,CACA;oDACA,CACA,MACA,OACA,AACA,sBACA,CACA,OACA,AACA,CACA;UACA,0BACA,8BACA,AACA,0DACA,sBACA,WACA,CACA,AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;oCACA,yBACA,uCACA,qDACA,+BACA,wBACA,wBACA,oCACA,YACA,kDACA,sBACA,gCACA,kBACA,uCACA,qDACA,wCACA,QACA,AACA,qCACA,yBACA,uCACA,qDACA,+BACA,wBACA,wBACA,oCACA,YACA,4CACA,2DACA,wFACA,qCACA,QACA,AACA,CACA,AACA;uCACA,sCACA,gBACA,AACA,uBACA,eACA,CACA,oBACA,WACA,iBACA,aACA,QACA,kBACA,wCACA,+CACA,OACA,WACA,8CACA,OACA,gBACA,QACA,KACA,CACA,AACA,CACA,AACA,QACA,AACA,oCACA,UACA,AACA,2CACA,sDACA,0CACA,UACA,cACA,wCACA,aACA,UACA,WACA,AACA,wCACA,0BACA,yEACA,2BACA,aACA,gEACA,MACA,MACA,KACA,yBACA,QACA,yCACA,gEACA,OACA,AACA,yCACA,gCACA,AACA,UACA,AACA,uBACA,6CACA,sBACA,QACA,KACA,CACA,AACA,CACA,AACA,sCACA,YACA,AACA,mCACA,eACA,iCACA,0BACA,kCACA,mCACA,iCACA,4CACA,iBACA,CACA,AACA,aACA,0CACA,MACA,AACA,8CACA,qDACA,kCACA,oBACA,CACA,+BACA,4BACA,+BACA,4CACA,wFACA,OACA,OACA,SACA,AACA,CACA,AACA;gCACA,iCACA,AACA,kBACA,AACA,uBACA,eACA,CACA,oBACA,4BACA,eACA,QACA,yDACA,AACA,2CACA,qCACA,aACA,KACA,eACA,iBACA,mCACA,AACA,2CACA,QACA,KACA,CACA,CACA,AACA,CACA,AACA,wCACA,UACA,AACA,CACA,AACA;0DACA,oBACA,AACA,yCACA,AACA,qBACA,gCACA,AACA,kEACA,6DACA,SACA,+BACA,sDACA,SACA,AACA,QACA,kGACA,aACA,AACA,uCACA,2BACA,iCACA,AACA,4BACA,aACA,+BACA,AACA,oCACA,+CACA,wBACA,AACA,yBACA,QACA,AACA,kCACA,2BACA,AACA,WACA,AACA,MACA;AACA,AACA;aACA,iBACA,yBACA,sCACA,wCACA,oBACA,2BACA,kBACA,sBACA,0BACA,uBACA,2CACA,kBACA,gCACA,0BACA,kCACA,WACA,MACA,CACA,AACA,4BACA,OACA,AACA,iCACA,kBACA,iBACA,sBACA,yBACA,0BACA,uBACA,0BACA,cACA,iBACA,oCACA,AACA,WACA,OACA,AACA,CACA;AACA;AACA;AACA;AACA;AACA;0DACA,8BACA,gCACA,AACA,4CACA,CACA,AACA;gDACA,gBACA,SACA,uCACA,eACA,YACA,AACA,sBACA,6CACA,QACA,YACA,YACA,qBACA,aACA,MACA,wBACA,AACA,6EACA,6DACA,gBACA,SACA,uCACA,eACA,AACA,aACA,QACA,gBACA,WACA,mBACA,cACA,AACA,kBACA,yBACA,gBACA,kBACA,iBACA,0BACA,+CACA,kBACA,GACA,CACA,QACA,AACA,sBACA,qDACA,wBACA,AACA,6EACA,OACA,oFACA,gBACA,SACA,uCACA,AACA,yBACA,YACA,+BACA,AACA,oCACA,oDACA,uBACA,AACA,6EACA,OACA,AACA,oBACA,OACA,wFACA,OACA,AACA,CACA;MACA,MACA,AACA,uCACA,oEACA,AACA,qBACA,mBACA,CACA,WACA,KACA,yBACA,yDACA,qBACA,OACA,aACA,AACA,SACA,sBACA,WACA,AACA,CACA;aACA,gDACA,oDACA,qCACA,wBACA,wBACA,iBACA,MACA,AACA,eACA,CACA,gCACA,sFACA,OACA,AACA,kCACA,eACA,gCACA,UACA,gCACA,iEACA,0EACA,MACA,0DACA,MACA,AACA,sBACA,WACA,AACA,kCACA,kDACA,AACA,eACA,AACA,uBACA,qCACA,AACA,0BACA,CACA,uBACA,CACA,AACA,QACA,AACA,wCACA,YACA,AACA,8CACA,IACA,eACA,kBACA,uBACA,6BACA,wBACA,kBACA,kBACA,+BACA,gDACA,UACA,kBACA,iCACA,gDACA,4BACA,8CACA,IACA,CACA,CACA,kBACA,kCACA,mDACA,mDACA,OACA,CACA,kBACA,sCACA,sDACA,MACA,MACA,QACA;AACA,AACA,OACA,AACA,CACA,AACA;qCACA,UACA,AACA,uEACA,CACA,uBACA,AACA,SACA,cACA,AACA,8FACA,MACA,AACA,gCACA,sCACA,AACA,yCACA,eACA,mBACA,AACA,qBACA,kBACA,oDACA,oBACA,OACA,AACA,0CACA,aACA,AACA,CACA,AACA;+BACA,0CACA,AACA,UACA,AACA,mBACA,CACA,sBACA,QACA,MACA,OACA,mBACA,iCACA,aACA,AACA,IACA,AACA,YACA,0BACA,uBACA,eACA,qBACA,QACA,MACA,OACA,mBACA,kCACA,AACA,OACA,AACA,kBACA,8BACA,AACA,yCACA,oBACA,mBACA,AACA,8BACA,gBACA,CACA,MACA,CACA,AACA,sBACA,sBACA,sBACA,WACA,mCACA,gBACA,qBACA,QACA,MACA,kBACA,uCACA,4CACA,IACA,OACA,mBACA,iCACA,AACA,aACA,AACA,sCACA,4BACA,AACA,4DACA,aACA,AACA,AACA,QACA,AACA,oBACA,uDACA,OACA,mBACA,kCACA,AACA,OACA,AACA,sBACA,sBACA,WACA,AACA,0CACA,uCACA,iDACA,IACA,MACA,gCACA,MACA,AACA,MACA,mBACA,yFACA,AACA,OACA,kBACA,YACA,MACA,AACA,AACA,CACA,AACA;iCACA,qBACA,AACA,mBACA,kBACA,iCACA,sBACA,AACA,eACA,4BACA,uBACA,AACA,eACA,4BACA,wBACA,AACA,gBACA,aACA,AACA,mCACA,2DACA,yBACA,WACA,kCACA,wEACA,qCACA,iCACA,4CACA,oBACA,yBACA,qCACA,qDACA,OACA,4BACA,iCACA,oCACA,OACA,qCACA,kCACA,OACA,2BACA,yBACA,CACA,kBACA,uBACA,0BACA,OACA,wBACA,sBACA,4CACA,qCACA,YACA,gCACA,+BACA,yCACA,qCACA,YACA,kBACA,6BACA,wCACA,qCACA,YACA,AACA,gDACA,OACA,oBACA,OACA,aACA,CACA,8BACA,sCACA,MACA,4BACA,sBACA,OACA,AACA,OACA,MACA,AACA,CACA,AACA;yBACA,aACA,AACA,YACA,AACA,oBACA,yBACA,iBACA,SACA,QACA,mDACA,iCACA,0BACA,2BACA,WACA,oBACA,CACA,MACA,CACA,uBACA,CACA,AACA,QACA,AACA,WACA,MACA,AACA,oCACA,mBACA,AACA,cACA,AACA,kCACA,sBACA,OACA,AACA,oCACA,OACA,AACA,kCACA,QACA,AACA,WACA,4BACA,AACA,+BACA,IACA,AACA,aACA,AACA,8BACA,AACA,wBACA,AACA,WACA,MACA,AACA,CACA,AACA;6BACA,yBACA,AACA,sBACA,AACA,qBACA,CACA,uEACA,yBACA,CACA,2CACA,UACA,CACA,sBACA,WACA,AACA,4BACA,8DACA,AACA,uCACA,AACA,6CACA,MACA,AACA,CACA,AACA;+CACA,+DACA,AACA,mBACA,wBACA,AACA,oDACA,SACA,QACA,gBACA,uDACA,sBACA,WACA,MACA,iEACA,wBACA,AACA,QACA,eACA,kBACA,yBACA,cACA,2FACA,8BACA,kBACA,yBACA,WACA,6EACA,0BACA,kBACA,yBACA,cACA,wFACA,mEACA,OACA,6FACA,YACA,CACA,MACA,CACA,eACA,AACA,sBACA,MACA,AACA,CACA,AACA;sCACA,yBACA,gCACA,AACA,gEACA,AACA,yDACA,SACA,QACA,gBACA,0CACA,sBACA,WACA,MACA,iEACA,wBACA,AACA,QACA,eACA,kBACA,yBACA,cACA,wFACA,8BACA,kBACA,yBACA,cACA,2FACA,mEACA,OACA,6FACA,YACA,CACA,MACA,CACA,OACA,MACA,AACA,CACA,AACA;iCACA,2BACA,AACA,mCACA,AACA,+FACA,6BACA,CACA;sEACA,wBACA,kBACA,AACA,wBACA,wBACA,wBACA,AACA,qCACA,AACA,YACA,4EACA,MACA,CACA,AACA,OACA,MACA,AACA,CACA,AACA;+BACA,gBACA,AACA,gFACA,MACA,2DACA,YACA,gBACA,+BACA,sBACA;sEACA,wBACA,iBACA,AACA,wBACA,wBACA,wBACA,qEACA,0CACA,8DACA,YACA,gBACA,+BACA,0FACA,0CACA,oFACA,YACA,gBACA,+BACA,0FACA,kFACA,wBACA,cACA,qCACA,WACA,MACA,yBACA,AACA,OACA,MACA,AACA,yCACA,UACA,AACA,+DACA,OACA,GACA,AACA,cACA,WACA,UACA,EACA,AACA,UACA,UACA,EACA,AACA,UACA,SACA,EACA,AACA,UACA,SACA,EACA,AACA,UACA,SACA,EACA,AACA,UACA,SACA,SACA,UACA,WACA,EACA,AACA,UACA,QACA,QACA,SACA,SACA,kBACA,EACA,AACA,UACA,oBACA,EACA,AACA,UACA,SACA,SACA,WACA,EACA,AACA,UACA,QACA,SACA,EACA,AACA,UACA,QACA,QACA,SACA,GACA,AACA,MACA,QACA,AACA,AACA,aACA,MACA,AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;gCACA,8DACA,AACA,SACA,mCACA,AACA,4BACA,4CACA,qBACA,OACA,MACA,qCACA,iBACA,KACA,AACA,sBACA,qCACA,AACA,wCACA,AACA,gEACA,AACA,CACA;uDACA,aACA,2BACA,iBACA,cACA,4FACA,kBACA,MACA,AACA,CACA;MACA,iBACA,gBACA,oBACA,oCACA,iCACA,MACA,AACA,CACA;eACA,aACA,WACA,gBACA,yFACA,SACA,EACA,AACA,OACA,MACA,AACA,AACA,CACA,AACA;qCACA,+CACA,AACA,sBACA,AACA,mCACA,qCACA,CACA,4BACA,sBACA,oCACA,yCACA,uBACA,mCACA,AACA,yGACA,+CACA,MACA,AACA,OACA,MACA,AACA,CACA,AACA;2BACA,eACA,OACA,+BACA,4BACA,2BACA,AACA,0CACA,IACA,gBACA,kBACA,6CACA,MACA,kBACA,4CACA,UACA,kBACA,kDACA,MACA,kBACA,iDACA,6BACA,0CACA,IACA,CACA,CACA,kBACA,gBACA,MACA,iDACA,sDACA,+CACA,OACA,CACA,AACA,OACA,6CACA,sDACA,AACA,eACA,gBACA,UACA,AACA,kBACA,kBACA,WACA,wBACA,sCACA,OACA,MACA,cACA,AACA,AACA,eACA,UACA,AACA,AACA,yCACA,cACA,gBACA,kBACA,kCACA,kDACA,yBACA,sBACA,WACA,yBACA,4BACA,2BACA,4BACA,SACA,qBACA,SACA,6CACA,MACA,MACA,kCACA,iBACA,oBACA,MACA,AACA,OACA,AACA,8BACA,sCACA,cACA,0CACA,sBACA,WACA,CACA,CACA,AACA,+CACA,uCACA,mDACA,SACA,AACA,qBACA,UACA,GACA,AACA,OACA,QACA,gBACA,0BACA,iCACA,gCACA,AACA,SACA,AACA,oDACA,uCACA,AACA,0BACA,yBACA,WACA,QACA,AACA,qBACA,gCACA,4BACA,AACA,UACA,AACA,sDACA,sDACA,SACA,6BACA,kDACA,SACA,AACA,QACA,gCACA,AACA,qHACA,gBACA,AACA,CACA,AACA;+BACA,4BACA,AACA,4BACA,aACA,iBACA,AACA,oBACA,AACA,+BACA,0BACA,4BACA,qBACA,iBACA,CACA,eACA,iCACA,sEACA,UACA,4BACA,CACA,kBACA,mBACA,AACA,4CACA,UACA,AACA,CACA,AACA;oCACA,2BACA,AACA,sBACA,gBACA,AACA,sDACA,OACA,wBACA,AACA,MACA,AACA,gGACA,qCACA,yCACA,AACA,cACA,gCACA,+DACA,aACA,AACA,OACA,MACA,AACA,kBACA,wBACA,wBACA,wBACA,AACA,CACA;yCACA,gCACA,wCACA,qBACA,wCACA,wCACA,oBACA,CACA,AACA,gBACA,qCACA,WACA,gCACA,MACA,AACA,OACA,gCACA,yGACA,sCACA,KACA,AACA,OACA,MACA,AACA,CACA,AACA;0BACA,+BACA,AACA,qCACA,AACA,yCACA,cACA,AACA,8BACA,gBACA,CACA,MACA,CACA,2CACA,4BACA,AACA,4DACA,aACA,AACA,OACA,MACA,AACA,CACA,AACA;iCACA,mCACA,kBACA,WACA,wCACA,4CACA,0BACA,OACA,8BACA,wCACA,4CACA,0BACA,OACA,8BACA,8CACA,YACA,8CACA,aACA,cACA,AACA,0BACA,AACA,gDACA,uCACA,QACA,AACA,OACA,kBACA,AACA,8BACA,UACA,2BACA,eACA,CACA,MACA,WACA,0BACA,AACA,OACA,MACA,AACA,sBACA,mBACA,AACA,eACA,AACA,WACA,AACA,4BACA,AACA,sCACA,OACA,AACA,CACA,AACA;sCACA,mBACA,AACA,cACA,AACA,2DACA,WACA,wCACA,0CACA,sBACA,OACA,wCACA,8EACA,wCACA,yBACA,8CACA,sBACA,OACA,CACA,4FACA,yBACA,OACA,AACA,oCACA,OACA,AACA,2CACA,yCACA,AACA,0BACA,AACA,OACA;qCACA,wBACA,eACA,AACA,eACA,CACA,+BACA,gFACA,QACA,KACA,AACA,yCACA,MACA,AACA,+CACA,SACA,AACA,wBACA,sCACA,AACA,uBACA,CACA,yCACA,MACA,AACA,OACA,MACA,AACA,sCACA,IACA,AACA,4BACA,AACA,wDACA,AACA,QACA,AACA,yDACA,cACA,AACA,CACA,AACA;0CACA,yCACA,AACA,0BACA,AACA,MACA;kEACA,wBACA,eACA,AACA,mBACA,uDACA,QACA,8BACA,2BACA,kEACA,QACA,8BACA,2BACA,AACA,yCACA,MACA,AACA,wCACA,oCACA,AACA,2BACA,CACA,yCACA,UACA,AACA,OACA,MACA,AACA,AACA,0BACA,OACA,OACA,iBACA,qBACA,4BACA,4BACA,yBACA,6BACA,yBACA,2BACA,+BACA,yBACA,sDACA,AACA,GACA,AACA,iCACA,UACA,oBACA,wBACA,+BACA,+BACA,4BACA,gCACA,4BACA,8BACA,kCACA,4BACA,0BACA,gDACA,QACA,CACA,AACA,gCACA,aACA,AACA,MACA,AACA,iBACA,mEACA,wCACA,AACA,6BACA,AACA,UACA,SACA,AACA,0CACA,+BACA,AACA,mBACA,0CACA,AACA,sFACA,AACA,SACA,AACA,qEACA,MACA,AACA,kCACA,mBACA,AACA,QACA,AACA,oBACA,qBACA,8BACA,AACA,aACA,AACA,iBACA,AACA,wCACA,qBACA,sBACA,AACA,gBACA,qBACA,6BACA,AACA,+BACA,OACA,AACA,CACA,AACA;kCACA,QACA,iBACA,uBACA,AACA,CACA,AACA;uCACA,UACA,kBACA,yDACA,MACA,AACA,CACA,AACA;+BACA,qBACA,AACA,wBACA,AACA,aACA,AACA,UACA,AACA,yBACA,AACA,gBACA,AACA,yCACA,CACA,gBACA,sBACA,WACA,KACA,AACA,+CACA,WACA,AACA,CACA,AACA;oCACA,eACA,AACA,6BACA,AACA,2BACA,8BACA,AACA,UACA,AACA,mCACA,AACA,6BACA,AACA,gBACA,AACA,UACA,AACA,yBACA,AACA,mBACA,CACA,MACA,AACA,yCACA,MACA,AACA,mCACA,eACA,AACA,6BACA,AACA,gBACA,AACA,UACA,AACA,yBACA,AACA,0BACA,8BACA,AACA,UACA,AACA,mCACA,AACA,qDACA,MACA,AACA,iCACA,mEACA,uDACA,AACA,yBACA,WACA,AACA,mBACA,AACA,cACA,AACA,mBACA,CACA,WACA,wBACA,SACA,QACA,AACA,oBACA,uDACA,qBACA,AACA,+DACA,qCACA,cACA,WACA,WACA,uBACA,iGACA,qCACA,cACA,WACA,WACA,iCACA,WACA,WACA,qCACA,qBACA,KACA,qDACA,SACA,mBACA,AACA,yCACA,4BACA,MACA,WACA,WACA,uBACA,UACA,eACA,gDACA,qBACA,AACA,4FACA,iDACA,MACA,WACA,WACA,uBACA,iGACA,iDACA,MACA,WACA,WACA,iCACA,WACA,WACA,CACA,mEACA,MACA,CACA,MACA,gBACA,wBACA,+BACA,yCACA,AACA,sCACA,wBACA,wBACA,mBACA,AACA,CACA,qCACA,WACA,WACA,uBACA,2CACA,wBACA,wBACA,qBACA,AACA,CACA,qCACA,WACA,WACA,iCACA,WACA,WACA,eACA,UACA,uBACA,CACA,uCACA,4BACA,gEACA,SACA,QACA,KACA,CACA,CACA,AACA,8BACA,AACA,gBACA,MACA,kBACA,QACA,AACA,oBACA,QACA,kBACA,CACA,AACA,QACA,AACA,0BACA,8BACA,AACA,8BACA,AACA,kCACA,AACA,oCACA,qDACA,iDACA,2CACA,MACA,AACA,CACA,AACA;qCACA,gBACA,AACA,kBACA,AACA,YACA;wCACA,CACA,AACA,4BACA,qBACA,iBACA,AACA,qCACA,MACA,AACA,sBACA,uBACA,qBACA,iBACA,AACA,qCACA,MACA,AACA,sCACA,OACA,AACA,wCACA,kEACA,wCACA,MACA,CACA,AACA,CACA,AACA,uDACA,qBACA,iBACA,AACA,qCACA,OACA,AACA,CACA,AACA;kCACA,gBACA,AACA,kBACA,AACA,SACA;uCACA,CACA,AACA,8CACA,qBACA,cACA,AACA,kCACA,MACA,AACA,sBACA,yCACA,qBACA,cACA,4CACA,OACA,AACA,wCACA,kEACA,wCACA,MACA,CACA,AACA,CACA,AACA,yEACA,qBACA,cACA,AACA,kCACA,OACA,AACA,CACA,AACA;mCACA,cACA,AACA,mBACA,AACA,mCACA,wBACA,eACA,AACA,CACA;uCACA,sDACA,UACA,kBACA,qDACA,UACA,CACA,AACA,sBACA,CACA;kCACA,MACA,AACA,gBACA,4CACA,UACA,kBACA,CACA,AACA,CACA,AACA,qDACA,UACA,AACA,CACA,AACA;iCACA,YACA,AACA,eACA,wBACA,gBACA,AACA,eACA,AACA,eACA,AACA,YACA,AACA,yBACA,AACA,UACA,AACA,wDACA,MACA,AACA,CACA,AACA;0BACA,0CACA,AACA,mCACA,CACA,WACA,UACA,eACA,aACA,kBACA,QACA,AACA,6BACA,8DACA,CACA,MACA,WACA,yCACA,WACA,AACA,mCACA,YACA,AACA,oCACA,2CACA,AACA,2BACA,AACA,iBACA,AACA,kBACA,AACA,yBACA,AACA,YACA,AACA,WACA,AACA,iBACA,CACA,qDACA,OACA,AACA,mBACA,wBACA,kBACA,AACA,8BACA,eACA,CACA,MACA,QACA,wCACA,iBACA,qBACA,0BACA,cACA,KACA,YACA,QACA,AACA,gBACA,AACA,mBACA,AACA,oDACA,OACA,AACA,CACA,AACA;kCACA,IACA,AACA,wBACA,AACA,8BACA,qBACA,mBACA,AACA,UACA,AACA,kBACA,AACA,oDACA,UACA,AACA,CACA,AACA;2BACA,oDACA,AACA,sBACA,AACA,gBACA,mBACA,sBACA,WACA,AACA,oBACA,oCACA,mBACA,4DACA,mDACA,OACA,eACA,KACA,AACA,CACA;wCACA,wBACA,qBACA,AACA,QACA,UACA,iDACA,MACA,AACA,iCACA,kCACA,AACA,mBACA,AACA,aACA,AACA,sCACA,SACA,mBACA,AACA,4BACA,CACA,gBACA,aACA,AACA,yBACA,qBACA,kBACA,AACA,8CACA,WACA,AACA,CACA,AACA;qCACA,eACA,AACA,YACA,AACA,+BACA,0BACA,AACA,CACA,AACA;yBACA,oBACA,KACA,KACA,YACA,IACA,AACA,yBACA,sBACA,WACA,AACA,mDACA,OACA,cACA,qCACA,aACA,AACA,mCACA,kBACA,WACA,+BACA,UACA,oCACA,MACA,QACA,AACA,qCACA,kBACA,WACA,mCACA,UACA,yCACA,UACA,yCACA,UACA,kCACA,UACA,+BACA,UACA,2CACA,UACA,6BACA,UACA,qCACA,UACA,qCACA,UACA,mCACA,UACA,+BACA,UACA,oCACA,UACA,mCACA,UACA,iCACA,MACA,QACA,AACA,OACA,AACA,MACA,AACA,kBACA;6CACA,CACA,AACA,mBACA,iEACA,gDACA,MACA,AACA,qBACA,iBACA,uCACA,6CACA,aACA,AACA,CACA,AACA,yDACA,MACA,AACA,CACA,AACA;sCACA,uCACA,uDACA,0BACA,AACA,eACA,AACA,6BACA,yCACA,CACA,MACA,OACA,AACA,oBACA,mCACA,yDACA,CACA;AACA,MACA,gDACA,+BACA,QACA,wBACA,kDACA,oBACA,MACA,kCACA,iBACA,MACA,CACA,CACA,AACA,mBACA,8BACA,8BACA,iCACA,AACA,8BACA,qBACA,qBACA,2BACA,AACA,6BACA,eACA,CACA,MACA,WACA,0BACA,AACA,QACA,AACA,oBACA,8BACA,8BACA,iCACA,AACA,mDACA,MACA,AACA,2CACA,aACA,eACA,2BACA,kBACA,+BACA,gBACA,+DACA,kBACA,+BACA,gBACA,mCACA,2BACA,yBACA,+BACA,wDACA,yBACA,+BACA,uFACA,kBACA,+BACA,gBACA,CACA,uBACA,KACA,AACA,6BACA,6BACA,AACA,UACA,iCACA,wBACA,4DACA,0BACA,6BACA,YACA,OACA,AACA,+BACA,oCACA,2CACA,OACA,AACA,0CACA,WACA,kBACA,eACA,aACA,AACA,qBACA,6BACA,AACA,kBACA,KACA,AACA,sCACA,IACA,AACA,iBACA,QACA,gBACA,WACA,mBACA,AACA,AACA,wBACA,AACA,oBACA,kBACA,2BACA,yBACA,CACA,MACA,QACA,KACA,CACA,AACA,QACA,AACA,iCACA,kBACA,GACA,AACA,OACA,gBACA,wBACA,0BACA,iCACA,gCACA,AACA,SACA,AACA,6DACA,mFACA,2BACA,AACA,4CACA,AACA,yBACA,AACA,8BACA,oBACA,CACA,MACA,AACA,uCACA,OACA,aACA,oCACA,kCACA,wCACA,oBACA,MACA,kCACA,iBACA,uBACA,kEACA,iBACA,uBACA,mBACA,CACA,CACA,AACA,mBACA,4BACA,4BACA,oBACA,sBACA,6BACA,+BACA,aACA,QACA,AACA,AACA,gBACA,YACA,yDACA,sCACA,SACA,qBACA,kCACA,SACA,AACA,QACA,gCACA,AACA,iFACA,aACA,AACA,mCACA,oDACA,sDACA,oBACA,AACA,4CACA,AACA,yBACA,AACA,8BACA,oBACA,CACA,MACA,AACA,mBACA,2BACA,OACA,qFACA,oCACA,kCACA,wCACA,oBACA,MACA,kCACA,iBACA,uBACA,kEACA,iBACA,uBACA,mBACA,CACA,CACA,AACA,iBACA,4BACA,oBACA,sBACA,6BACA,+BACA,aACA,QACA,AACA,gBACA,YACA,yDACA,sCACA,SACA,qBACA,kCACA,SACA,QACA,gCACA,AACA,gFACA,aACA,AACA,CACA,AACA;yBACA,wEACA,AACA,iBACA,AACA,eACA,UACA,qBACA,eACA,CACA,WACA,WACA,cACA,mBACA,qBACA,mBACA,CACA,WACA,KACA,uFACA,OACA,mBACA,oBACA,mBACA,CACA,WACA,KACA,yBACA,CACA,CACA,oDACA,kBACA,2BACA;wBACA,aACA,SACA,cACA,qFACA,mEACA,qCACA,0BACA,mBACA,qCACA,2BACA,gBACA,KACA,aACA,cACA,MACA,mFACA,qCACA,iBACA,CACA,oBACA,+BACA,qBACA,oBACA,aACA,sBACA,WACA,CACA,CACA,CACA,uCACA,MACA,AACA,qDACA,2EACA,cACA,AACA,mBACA,AACA,qEACA,IACA,0BACA,AACA,4BACA,CACA,qCACA,sCACA,WACA,wBACA,AACA,qEACA,WACA,AACA,gCACA,2EACA,cACA,AACA,mBACA,AACA,8CACA,IACA,0BACA,AACA,4BACA,CACA,qCACA,sCACA,WACA,wBACA,AACA,oEACA,WACA,AACA,CACA,AACA;+BACA,aACA,AACA,gDACA,qBACA,wBACA,2BACA,OACA,AACA,CACA,AACA;+BACA,oCACA,+BACA,CACA;OACA,QACA,iCACA,gBACA,OACA,0BACA,iCACA,CACA,eACA,2BACA,yCACA,UACA,AACA,2CACA,iBACA,KACA,2CACA,AACA,GACA;kCACA,CACA;AACA;iBACA,WACA,UACA,mDACA,wEACA,UACA,UACA,YACA,uBACA,yFACA,AACA,OACA,AACA,QACA,uBACA,6DACA,2BACA,uCACA,QACA,mBACA,CACA,MACA,CACA,CACA,QACA,AACA,uCACA,CACA;AACA;AACA;AACA,UACA,uBACA,mDACA,CACA;AACA;qBACA,oEACA,YACA,CACA;AACA;AACA,mBACA,iEACA,KACA,AACA,6CACA,iBACA,gBACA,AACA,KACA;AACA;cACA,AACA,uCACA,CACA;AACA;AACA;gDACA,iDACA,aACA,0BACA,mCACA,iDACA,aACA,AACA,mCACA,+CACA,OACA,AACA,CACA;AACA;AACA;AACA;cACA,YACA,6CACA,YACA,6BACA,YACA,4BACA,CACA,8DACA,YACA,AACA,yCACA,IACA,AACA,KACA;AACA;OACA,wCACA,sBACA,oEACA,OACA,CACA,UACA,uBACA,AACA,0DACA,KACA,AACA,kCACA,aACA,gCACA,qBACA,0BACA,AACA,eACA,AACA,qCACA,sCACA,MACA,eACA,kCACA,MACA,oCACA,MACA,AACA,CACA,AACA;+BACA,CACA;2BACA,AACA,iBACA,2DACA,CACA,YACA,0BACA,AACA,yCACA,UACA,AACA,6BACA,gBACA,GACA;OACA,uBACA,iBACA,uCACA,QACA,mBACA,CACA,MACA,CACA,CACA,QACA,WACA,YACA,AACA,uCACA,CACA;kBACA,AACA,cACA,AACA,oEACA,OACA,AACA,yCACA,CACA;kBACA,AACA,eACA,sCACA,qBACA,0BACA,CACA,YACA,AACA,sEACA,OACA,AACA,kCACA,+BACA,AACA,gCACA,qBACA,0BACA,AACA,eACA,AACA,kDACA,CACA;IACA,4BACA,AACA,eACA,CACA;6BACA,yCACA,CACA;gBACA,gGACA,CACA;gBACA,6CACA,CACA,oBACA,CACA;gBACA,qDACA,CACA;6BACA,0BACA,sBACA,WACA,CACA,MACA,sBACA,OACA,AACA,oCACA,sBACA,oEACA,OACA,CACA,UACA,uBACA,AACA,CACA,kEACA,KACA,AACA,CACA,AACA;0BACA,uCACA,AACA,wCACA,OACA,8CACA,CACA,MACA,AACA,WACA,mCACA,yDACA,CACA;AACA,MACA,gDACA,+BACA,QACA,wBACA,kDACA,oBACA,MACA,kCACA,iBACA,MACA,CACA,CACA,AACA,yBACA,WACA,yBACA,0DACA,CACA,MACA,WACA,WACA,OACA,MACA,AACA,wBACA,UACA,AACA,KACA,eACA,AACA,aACA,uDACA,YACA,AACA,+BACA,0BACA,AACA,qCACA,oBACA,SACA,YACA,iBACA,AACA,sBACA,aACA,qBACA,0BACA,AACA,OACA,gBACA,mBACA,MACA,cACA,iBACA,IACA,aACA,OACA,AACA,cACA,OACA,AACA,yCACA,IACA,UACA,AACA,gBACA,4DACA,eACA,MACA,AACA,QACA,WACA,+BACA,YACA,aACA,sBACA,0BACA,wBACA,iBACA,WACA,SACA,gBACA,cACA,kBACA,kBACA,eACA,wBACA,aACA,AACA,AACA,UACA,AACA,GACA;iBACA,AACA,GACA;eACA,kBACA,qBACA,kBACA,oBACA,AACA,SACA;sBACA,wBACA,AACA,wDACA,wDACA,AACA,2DACA,gBACA,GACA,0DACA,cACA,GACA,AACA,IACA,CACA,qCACA,cACA,OACA,AACA,CACA,uCACA,IACA,CACA,sBACA,iBACA,aACA,UACA;AACA;AACA,WACA,MACA,UACA,CACA,CACA,AACA,cACA,4CACA,qBACA,OACA,UACA,MACA,WACA,OACA,GACA,OACA,QACA,AACA,6BACA,aACA,AACA,kBACA,4DACA,eACA,MACA,AACA,QACA,WACA,+BACA,YACA,aACA,sBACA,0BACA,wBACA,iBACA,WACA,SACA,gBACA,cACA,kBACA,kBACA,eACA,wBACA,aACA,cACA,AACA,iBACA,AACA,YACA,mCACA,uDACA,wDACA,0EACA,AACA,8EACA,+BACA,QACA,AACA,sDACA,cACA,GACA,wDACA,gBACA,GACA,0DACA,cACA,GACA,wBACA,aACA,oBACA,0BACA,0BACA,yBACA,GACA,kCACA,CACA;yBACA,kBACA,KACA,CACA,AACA,IACA,SACA,sDACA,wBACA,SACA,sCACA,CACA,2CACA,OACA,sCACA,sBACA,OACA,UACA,MACA,WACA,OACA,GACA,AACA,OACA,SACA,AACA,CACA;gBACA,AACA,yBACA,AACA,uBACA,AACA,MACA;AACA,mDACA,gBACA,AACA,wCACA,qBACA,MACA,AACA,oBACA,gCACA,oBACA,MACA,CACA,AACA,sCACA,eACA,OACA,AACA,OACA,OACA,AACA,MAjlLA,CAklLA,AACA,6EC3mLA,4CCAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA;AACA;AACA;AACA,iBACA,SACA,iCACA,4BACA,eACA;AACA;AACA,AACA;AACA,0BACA,GACA;AACA;AACA;AACA,AACA;AACA,sDACA,WACA,qCACA,6BACA,+BACA,4BACA,sBACA,8BACA,WACA,yBACA,4BACA,KACA,oDACA,AACA,gCACA,8BACA,oBACA,KACA,CACA;WACA,sBACA,aACA,AACA,MACA;+BACA,8BACA,mBACA,CACA;AACA;mCACA,+BACA,GACA,AACA,YACA,IACA,CACA,CACA,EACA;AACA,oCACA,OACA,4BACA,4BACA,UACA,MACA,2CACA,cACA,WACA,iDACA,cACA,WACA,OACA,OACA,CACA,sBACA,qBACA,+BACA,QACA,OACA,GACA,CACA,CACA,yBACA,2DACA,kBACA,oDACA,KACA,CACA;AACA;AACA;AACA,AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA,kEACA,iCACA,SACA,eACA,gBACA,kBACA,4BACA,AACA,qBACA,CACA;AACA,YACA,KACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA,0BACA,+CACA,KACA,UACA,GACA;AACA;AACA,AACA;AACA,oDACA,8DACA,OACA,EACA;AACA,AACA;AACA,0DACA,qBACA,0CACA,UACA,CACA,EACA;AACA,AACA;AACA,4DACA,iCACA,iDACA,WACA,CACA,EACA,oCACA,CACA;qBACA,OACA,AACA,8DACA,yCACA,AACA,uCACA,kCACA,OACA,AACA,OACA,AACA,MACA;AACA;oDACA,oCACA,AACA,UACA;AACA;AACA;wDACA,iCACA,iCACA,oCACA,uCACA,wCACA,AACA,WACA;AACA;0DACA,gBACA,AACA,SACA;AACA;AACA;AACA;AACA;AACA;KACA,wBACA,UACA,CACA,CACA,4BACA,gDACA,qBACA,CACA,sBACA,sDACA,SACA,OACA;mCACA,OACA;4CACA,YACA,EACA,yBACA,uBACA,mCACA,cACA,kBACA,eACA,iBACA,uBACA,GACA,mBACA,iBACA,OACA,EACA;AACA;iBACA,aACA,OACA;GACA,UACA,OACA;2BACA,cACA,SACA,OACA,CACA;AACA;2BACA,QACA,uCACA,OACA,OACA,MACA,CACA;AACA,AACA;AACA,kEACA,gCACA,oDACA,cACA,CACA,EACA;AACA,AACA;AACA,gEACA,sBACA,2CACA,aACA,CACA,EACA;AACA,AACA;AACA,sEACA,sBACA,2CACA,gBACA,CACA,EACA,2CACA,uBACA,OACA,OACA,AACA,gEACA,sBACA,4CACA,OACA,+CACA,OACA,MACA,AACA,OACA,OACA,CACA,oDACA,IACA,AACA,mCACA,SACA,kBACA,KACA,AACA,IACA,CACA,iBACA,QACA,EACA,AACA,0DACA,0BACA,AACA,6BACA,mDACA,SACA,AACA,qDACA,+CACA,SACA,AACA,yBACA,oEACA,MACA,QACA,CACA,CACA;AACA,AACA;AACA,mEACA,8CACA,aACA,EACA;AACA,uDACA,+CACA,aACA,EACA,gDACA,EACA,yCACA,UACA,sBACA,mCACA,KACA,OACA,MACA,yKCvWA,AACA,AACA,AACA,AACA,AACA;;;;;GACA,AACA,6BACA,AACA,aACA,gCACA,+BACA,oBACA,WACA,sBACA,8BACA,0BACA,GACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;;;;;;;;;;;;GACA,wDACA,iBACA,oBACA,oBACA,AACA,AACA;;GACA,mBACA,aACA,4BACA,IACA,wBACA,8EACA,0BACA;kCACA;iCACA;SACA,OACA,OACA,CACA,CACA,qBACA,eACA,oBACA,WACA,WACA,CACA,kCACA,wBACA,sBACA,8BACA,+BACA,CACA;oBACA,8BACA,eACA,CACA;eACA,iBACA,QACA,aACA,OACA,AACA,OACA,MACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;GACA,4CACA,2DACA,wCACA,QACA,AACA,CACA;yBACA,uCACA,UACA,OACA,AACA,qEACA,yBACA,KACA,uCACA,QACA,CACA,qBACA;AACA;AACA,6BACA,sBACA,gBACA,KACA,EACA,iDACA,4BACA,qBACA,yCACA,AACA,mEACA,oDACA,QACA,AACA,4BACA,8BACA,kBACA,AACA,wBACA,OACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;IACA,mDACA,yCACA,QACA,EACA,8BACA,uCACA,2BACA,kDACA,yCACA,CACA;4CACA,OACA,kBACA,AACA,OACA,CACA,CACA,yBACA,2BACA,qBACA,oCACA,CACA,CACA,uCACA,YACA,iBACA,0BACA,MACA,qBACA,CACA;AACA;AACA;yBACA,2CACA,uCACA,MACA,0BACA,MACA,CACA,AACA,AACA,AACA;;;IACA,yCACA,6BACA,UACA,EACA,+BACA,YACA,oDACA,kCACA,wBACA,SACA,EACA,CACA,OACA,MACA,CACA,AACA,AACA;;KACA,iCACA,yBACA,QACA,AACA,AACA;;GACA,qCACA,yBACA,MACA,EACA,yCACA,8CACA,UACA,OACA,AACA,iCACA,qBACA,8CACA,AACA,wCACA,yBACA,AACA,qCACA,AACA,6BACA,CACA;AACA;AACA;kBACA,QACA,AACA,OACA,MACA,CACA,kCACA,kCACA,yBACA,kCACA,kBACA,IACA,OACA,MACA,CACA,sDACA,kBACA,AACA;6CACA,sBACA,+BACA,AACA,4CACA,sBACA,+BACA,AACA,+CACA,sBACA,mCACA,4BACA,iBACA,uCACA,QACA,AACA,+BACA,CACA;KACA,4BACA,eACA,CACA;wBACA,OACA,OACA,MACA,CACA,6BACA,yBACA,6BACA,yBACA,AACA,wBACA,OACA,MACA,AACA,mBACA,WACA,MACA,AACA,QACA,yBACA,+DACA,oDACA,0BACA,GACA,2BACA,KACA,AACA,2CACA,+BACA,MACA,CACA,AACA,qBACA,sFACA,CACA,wBACA,CACA;AACA;wBACA,sBACA,uFACA,UACA,eACA,EACA,CACA,2BACA,qBACA;OACA,EACA,sBACA,QACA,CACA,oCACA,qBACA,WACA,EACA,oCACA,6CACA,qBACA,6BACA,AACA,gBACA,AACA,WACA,eACA,AACA,+CACA,gBACA,KACA,OACA,GACA,MACA,CACA,AACA,eACA,eACA,SACA,GACA,EACA,+CACA,yBACA,mBACA,UACA,WACA,YACA,YACA,aACA,aACA,aACA,WACA,YACA,cACA,iBACA,MACA,cACA,AACA,QACA,EACA,0CACA,mBACA,qBACA,+CACA,AACA,oBACA,qBACA,GACA,AACA,IACA,yBACA,QACA,4BACA,iBACA,OACA,CACA,AACA,+BACA,gBACA,4BACA,cACA,4BACA,qBACA,+CACA,iBACA,cACA,OACA,OACA,QACA,EACA,oCACA,4BACA,eACA,OACA,kEACA,wEACA,eACA,WACA,6BACA,WACA,OACA,AACA,gBACA,wBACA,AACA,GACA;gBACA,aACA,QACA,cACA,YACA,aACA,eACA,SACA,WACA,YACA,sCACA,WACA,WACA,YACA,cACA,sBACA,MACA,mBACA,MACA,sCACA,OACA,yDACA;uBACA,0BACA,AACA,MACA,EACA,kBACA,WACA,yCACA,iBACA,AACA,MACA;AACA,AACA;AACA;AACA;AACA;AACA;8BACA,OACA,EACA,CACA;AACA;qBACA,OACA,GACA,AACA,qCACA,UACA,OACA,AACA,WACA,OACA,GACA,AACA,CACA;OACA,WACA,AACA,gBACA,OACA,GACA,AACA,uBACA,AACA,kBACA,QACA,cACA,iCACA,AACA,SACA,WACA,oCACA,AACA,SACA,qCACA,AACA,SACA,aACA,uCACA,AACA,SACA,uCACA,AACA,SACA,WACA,YACA,cACA,0CACA,AACA,KACA,gEACA,iCACA,0BACA,AACA,MACA,CACA,CACA;AACA;AACA,2BACA,KACA,oBACA,SACA,UACA,QACA,EACA,CACA,yCACA,cACA,oBACA,sBACA,6CACA,wBACA,eACA,GACA,OACA,MACA,EACA,yCACA,cACA,oBACA,sBACA,6CACA,wBACA,eACA,mBACA,GACA,OACA,MACA,EACA,yCACA,cACA,oBACA,sBACA,6CACA,wBACA,eACA,mBACA,mBACA,mBACA,GACA,OACA,MACA,EACA,6CACA,wBACA,sBACA,mDACA,uCACA,WACA,EACA,0CACA,4CACA,+CACA,sCACA,EACA,EACA,2CACA,SACA,mBACA,mCACA,oDACA,6BACA,QACA,sBACA,IACA,EACA,6EACA,6BACA,qBACA,6BACA,AACA,sBACA,OACA,EACA,oBACA,0BACA,EACA,0BACA,WACA,EACA,wBACA,cACA,OACA,AACA,iEACA,sBACA,sBACA,AACA,mCACA,OACA,GACA,uBACA,QACA,EACA,eACA,OACA,GACA,AACA,UACA,SACA,eACA,aACA,AACA,yBACA,AACA,iBACA,oBACA,yBACA,AACA,qCACA,2CACA,AACA,2BACA,gCACA,YACA,gBACA,GACA,MACA,CACA,AACA,eACA,eACA,SACA,GACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEACA,CACA;4BACA,AACA,EACA;gCACA,UACA,sBACA,iCACA,YACA,2CACA,aACA,WACA,wBACA;qBACA,CACA;+BACA,EACA,AACA,CACA;yCACA,wCACA,eACA,gCACA,wBACA,mBACA,cACA,EACA,AACA,CACA;yBACA,qBACA,UACA,AACA,CACA;wBACA,CACA;kBACA,QACA,EACA,oDACA,oCACA,cACA;UACA,sEACA,QACA,qDACA,iBACA,yDACA,YACA,CACA,sDACA,KACA,AACA,qBACA,wCACA,CACA,sDACA,eACA,oBACA,yBACA,AACA,+BACA,2BACA,+CACA,qDACA,+BACA,QACA,EACA,WACA,aACA,aACA,cACA,EACA,CACA,AACA,qBACA,kBACA,YACA,QACA,2BACA,WACA,CACA,AACA,IACA,UACA,iBACA,mCACA,2DACA,+BACA,kDACA,eACA,yBACA,uBACA,EACA,CACA,MACA,wDACA,oCACA,WACA,iCACA,gCACA,OACA,MACA,MACA,CACA,gBACA,GACA,CACA,AACA,QACA,EACA,CACA,oEACA,iDACA,EACA,EACA,kEACA,0DACA,MACA,EACA,0EACA,0DACA,OACA,EACA,2CACA,wBACA,2BACA,kBACA,QACA,eACA,eACA,4BACA,QACA,UACA,CACA,AACA,CACA;kBACA,2CACA,AACA,yCACA,eACA,EACA,0BACA,0CACA,2BACA,iBACA,OACA,OACA,GACA,CACA,4CACA,oEACA,QACA,CACA,6CACA,mDACA,QACA,CACA,8CACA,qCACA,QACA,CACA,8CACA,oDACA,QACA,CACA,4CACA,uEACA,QACA,qEAEA,CACA;sBACA,UACA,mBACA,cACA,EACA;sDACA,UACA,mBACA,cACA,EACA;0BACA,eACA,sBACA,eACA,mCACA,YACA,UACA,cACA,UACA,CACA;KACA,UACA,OACA,AACA,2EACA,AACA,2BACA,sDACA,AACA,uEACA,sBACA,0CACA,AACA,uBACA,AACA,uBACA,aACA,QACA,cACA,yCACA,AACA,YACA,WACA,4CACA,AACA,YACA,6CACA,AACA,YACA,aACA,+CACA,AACA,YACA,SACA;sCACA,AACA,YACA,WACA,YACA,cACA,+CACA,AACA,QACA,gEACA,iCACA,0BACA,AACA,MACA,CACA,CAvEA,CAwEA,yCACA,OACA,MACA,yDACA,AACA,IACA,EACA,mCACA,gCACA,6BACA,UACA,6CACA,MACA,CACA,CACA,iCACA,yBACA,aACA,AACA,SACA,kBACA,mBACA,iBACA,yCACA,iBACA,iBACA,EACA,AACA,6BACA,qCACA,AACA,qBACA,sBACA,qBACA,WACA,UACA,CACA,UACA,oBACA,+BACA,gDACA,2BACA,WACA,cACA,CACA,CACA,UACA,oBACA,mBACA,wDACA,qEACA,0EACA,WACA,cACA,CACA,CACA,UACA,oBACA,mBACA,oBACA,kFACA,6FACA,qDACA,WACA,cACA,CACA,AACA,EACA,AACA,qBACA,CACA;AACA;UACA,wBACA,4BACA,CACA;WACA,sCACA,mCACA,MACA,AACA,UACA,cACA,iBACA,AACA,8BACA,KACA,CACA;AACA;AACA;AACA,yBACA,OACA,0CACA,oBACA,oCACA,qDACA;AACA,AACA,CACA;QACA,SACA,cACA,0BACA,MACA,6BACA,AACA,uBACA,OACA,KACA,CACA,kCACA,SACA,2BACA,AACA,+BACA,iCACA,MACA,OACA,KACA,CACA,mCACA,SACA,2BACA,AACA,+BACA,8BACA,IACA,OACA,KACA,CACA,gCACA,aACA,AACA,gCACA,8BACA,AACA,YACA,6BACA,gBACA,IACA,OACA,KACA,CACA,oCACA,2BACA,aACA,mCACA,8CACA,KACA,OACA,KACA,CACA,gDACA,cACA,eACA,gCACA,AACA,eACA,QACA,qBACA,qBACA,OACA,IACA,AACA,UACA,MACA,iBACA,mBACA,KACA,IACA,AACA,kBACA,AACA,SACA,sCACA,4BACA,6BACA,eACA,kBACA,iCACA,sCACA,kBACA,OACA,CACA,AACA,OACA,QACA,EACA,AACA,AACA;;GACA,uCACA,gDACA,gEACA,yCACA,CACA,2EACA,eACA,wBACA,kDACA,AACA,qBACA,gBACA,QACA,qCACA,qBACA,IACA,AACA,OACA,KACA,EACA,2EACA,eACA,wBACA,eACA,oCACA,QACA,AACA,uBACA,oBACA,mCACA,gCACA,IACA,AACA,OACA,KACA,EACA,8DACA,wCACA,oBACA,QACA,EACA,oEACA,wCACA,4CACA,EACA,EACA,oEACA,wCACA,2CACA,GACA,EACA,oEACA,wCACA,AACA,oBACA,wBACA,kBACA,mBACA,UACA,EACA,oEACA,wCACA,AACA,4BACA,2BACA,mBACA,cACA,IACA,EACA,yEACA,eACA,wBACA,kDACA,AACA,qBACA,gBACA,QACA,qCACA,qBACA,IACA,MACA,AACA,mCACA,AACA,kBACA,KACA,EACA,yEACA,eACA,wBACA,kDACA,AACA,cACA,mBACA,wBACA,2BACA,uBACA,IACA,MACA,AACA,mCACA,AACA,kBACA,KACA,EACA,4DACA,wCACA,4CACA,qCACA,EACA,EACA,kEACA,wCACA,6CACA,mCACA,IACA,EACA,kEACA,wCACA,6CACA,mCACA,IACA,EACA,kEACA,wCACA,AACA,oBACA,wBACA,kBACA,mBACA,GACA,EACA,kEACA,wCACA,AACA,6BACA,mBACA,mBACA,cACA,GACA,EACA,kEACA,wCACA,gDACA,GACA,EACA,kEACA,wCACA,iDACA,GACA,EACA,oEACA,wCACA,gDACA,GACA,EACA,oEACA,wCACA,iDACA,GACA,EACA,+CACA,8CACA,4FACA,mFACA,sBACA,CACA,mFACA,QACA,oBACA,wBACA,eACA,uCACA,iDACA,GACA,AACA,SACA,QACA,qBACA,wCACA,0BACA,KACA,AACA,eACA,WACA,EACA,mFACA,QACA,oBACA,wBACA,eACA,uCACA,iDACA,GACA,AACA,kBACA,UACA,uBACA,gCACA,0BACA,KACA,AACA,eACA,WACA,EACA,sEACA,QACA,oBACA,iDACA,mDACA,0BACA,mBACA,EACA,EACA,yDACA,+BACA,sDACA,gDACA,2BACA,EACA,CACA,CACA,4EACA,QACA,oBACA,mDACA,iCACA,oBACA,4BACA,OACA,qCACA,MACA,eACA,EACA,EACA,4EACA,QACA,oBACA,mDACA,iCACA,sBACA,uBACA,UACA,qCACA,OACA,eACA,EACA,EACA,yDACA,mCACA,sDACA,8CACA,KACA,CACA,CACA,4EACA,QACA,oBACA,uDACA,iCACA,wBACA,0BACA,0BACA,qBACA,UACA,qCACA,MACA,eACA,EACA,EACA,4EACA,QACA,oBACA,uDACA,iCACA,sBACA,0BACA,0BACA,uBACA,UACA,qCACA,OACA,eACA,EACA,EACA,iFACA,QACA,oBACA,eACA,mCACA,AACA,kDACA,OACA,AACA,OACA,UACA,UACA,qBACA,wCACA,2CACA,KACA,EACA,mCACA,KACA,AACA,eACA,WACA,EACA,iFACA,QACA,oBACA,eACA,mCACA,AACA,kDACA,OACA,AACA,kBACA,UACA,UACA,uBACA,gCACA,2CACA,KACA,EACA,mCACA,KACA,AACA,eACA,WACA,EACA,oEACA,QACA,oBACA,kDACA,sDACA,mCACA,qBACA,mBACA,EACA,EACA,0EACA,QACA,oBACA,oDACA,sCACA,oBACA,4BACA,OACA,qCACA,MACA,eACA,EACA,EACA,0EACA,QACA,oBACA,oDACA,sCACA,sBACA,uBACA,UACA,qCACA,OACA,eACA,EACA,EACA,0EACA,QACA,oBACA,wDACA,0CACA,oBACA,4BACA,yBACA,0BACA,QACA,qCACA,MACA,eACA,EACA,EACA,0EACA,QACA,oBACA,wDACA,8CACA,gCACA,sBACA,0BACA,0BACA,uBACA,UACA,qCACA,OACA,eACA,EACA,EACA,mDACA,+CACA,uDACA,sBACA,CACA,2DACA,cACA,yDACA,wBACA,gDACA,iBACA,EACA,CACA,0EACA,0CACA,UACA,EACA,0EACA,2CACA,UACA,EACA,4DACA,cACA,0DACA,yBACA,gDACA,iBACA,EACA,CACA,4EACA,2CACA,UACA,EACA,4EACA,4CACA,UACA,EACA;AACA,iEACA,iBACA,4BACA,wDACA,mCACA,0BACA,AACA,MACA;qBACA,+CACA,AACA,GACA;iBACA,sBACA,6BACA,qDACA,2DACA,AACA,2BACA;4BACA,8CACA,+BACA,MACA,AACA,aACA,SACA,AACA,wDACA,CACA;qBACA,8BACA,OACA,gDACA,CACA;kBACA,8BACA,OACA,MACA,0BACA,KACA,iCACA,KACA,AACA,aACA,AACA,OACA,KACA,EACA;AACA;AACA;AACA;AACA,2DACA,CACA;yBACA,4BACA,UACA,YACA,WACA,sCACA,UACA,aACA,OACA,mBACA,yBACA,eACA,KACA,KACA,CACA,qDACA,qBACA,6BACA,6DACA,0CACA,UACA,gCACA,SACA,IACA,AACA,CACA;+CACA,sBACA,sBACA,AACA,eACA,OACA,MACA,AACA,eACA,wCACA,AACA,cACA,AACA,KACA,4BACA,uBACA,SACA,IACA,MACA,2BACA,KACA,yCACA,0BACA,+BACA,uBACA,KACA,CACA,AACA,OACA,MACA,EACA;AACA,AACA;AACA,sBACA,qBACA,yBACA,CACA;8CACA,IACA;sBACA,GACA;uBACA,SACA,IACA,OACA,KACA,CACA,wBACA,wBACA,uCACA,IACA,CACA,iBACA,8BACA,sBACA,IACA,CACA,kCACA,cACA,YACA,6BACA,yBACA,eACA,AACA,4BACA,6BACA,AACA,GACA;sCACA,CACA;kBACA,CACA;oBACA,CACA;sCACA,MACA,+BACA,CACA;sCACA,MACA,SACA,AACA,CACA;cACA,AACA,UACA,SACA,AACA,CACA;oBACA,uCACA,oBACA,UACA,SACA,AACA,CACA;sDACA,+BACA,CACA;sCACA,MACA,AACA,eACA,AACA,KACA;kBACA,iBACA,iBACA,oCACA,iBACA,YACA,oBACA,oBACA,AACA,iCACA,iBACA,YACA,oBACA,yBACA,oBACA,AACA,kCACA,iBACA,YACA,qBACA,yBACA,yBACA,oBACA,AACA,WACA,iBACA,sBACA,CACA,AACA,OACA,OACA,CACA,0BACA,eACA,gCACA,CACA;iCACA,MACA,OACA,WACA,CACA,kCACA,UACA,iBACA,gCACA,iBACA,AACA,uBACA,SACA,OACA,mBACA,mBACA,IACA,AACA,OACA,WACA,CACA,2BACA,uCACA,MACA,CACA,0CACA,0BACA,wCACA,wBACA,GACA,OACA,GACA,CACA,mBACA,kBACA;AACA,0MC3vDA,AACA,aACA,gCACA,sBACA,cACA,cACA,iBACA,mDACA,MACA,eACA,UACA,yGACA,gBACA,iCACA,EACA,AACA,8BACA,gCACA,GACA,CACA,AACA,OACA,yBACA,4BACA,gBACA,AACA,kBACA,iBACA,kDACA,AACA,CACA;AACA;AACA;AACA;AACA;mDACA,AACA,EACA;oBACA,AACA,cACA;uBACA,AACA,UACA,AACA,4BACA,sIACA,qBACA,qBACA,kBACA,KACA,AACA,qBACA,qEACA,eACA,+BACA,wGACA,kBACA,kBACA,KACA,AACA,OACA,KACA,CACA,6BACA,iFACA,MACA,CACA,qCACA,IACA,gBACA,8BACA,4CACA,+BACA,MACA,oBACA,IACA,CACA,6BACA,IACA,mBACA,4BACA;WACA,aACA,4BACA,AACA;AACA;yDACA,6DACA,iBACA,AACA,CACA;kBACA,eACA,uBACA,yBACA,cACA,6BACA,iCACA,uBACA,0BACA,4BACA,cACA,IACA,AACA,YACA,AACA,0BACA,IACA,4CC7GA,qDACA,OACA,yBACA,qBACA,kBACA,aACA,sBACA,gBACA,sBACA,AACA,MACA,AACA,kBACA,OACA,aACA,0DACA,AACA,iBACA,OACA,aACA,0DACA,AACA,UACA,KACA,wBACA,uBACA,cACA,gBACA,UACA,MACA,+BACA,MACA,EACA,4DACA,SACA,yBACA,qBACA,kBACA,mDACA,sBACA,gBACA,wCACA,AACA,iBACA,AACA,yCACA,kBACA,IACA,UACA,mCACA,mCACA,CACA,OACA,EACA,eACA,WACA,OACA,wBACA,OACA,eACA,CACA,OACA,EACA,AACA,kBACA,GACA,IACA,yBACA,0BACA,UACA,WACA,wCACA,QACA,EACA,CACA,AACA,2DACA,AACA,WACA,QACA,8DACA,AACA,uBACA,IACA,6CCpFA,gBACA,SACA,2CACA,4BACA,iBACA,6CCLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA,uBACA,4BACA,0CACA,WACA,eACA,aACA;AACA,0BACA,aACA,yCACA,qCACA,UACA;AACA;AACA,iCACA,GACA;AACA;AACA,kDACA,6BACA,mBACA,kDACA,QACA,MACA,EACA,0CACA,2BACA,AACA,mBACA,qBACA,AACA,GACA;kBACA,kBACA,gEACA,cACA,0BACA,UACA;KACA,CACA;8DACA,iBACA,QACA,KACA,CACA,CACA,AACA,sBACA,AACA,qBACA,eACA,AACA,8BACA,kBACA,QACA;IACA,gBACA,MACA,UACA,+BACA,IACA,UACA,4CACA,IACA,MACA;AACA,kDACA,sBACA,AACA,kCACA,2CACA,qBACA,sBACA,qBACA,6BACA,OACA,AACA,OACA,MACA,4DAEA,IACA,AACA,kBACA,0BACA,AACA,wCACA,qBACA,AACA,GACA;AACA;gBACA,oCACA,yBACA,4BACA,AACA,2BACA,MACA;mBACA,uCACA,OACA;wBACA,AACA,cACA;uCACA,AACA,UACA;4DACA,qCACA,QACA,mBACA,gBACA,oBACA,AACA,wCACA,2BACA,mBACA,gDACA,sCACA,sEACA,6CACA,CACA;QACA,QACA,CACA,CACA,AACA,OACA,MACA,CAjDA,CAkDA,iDACA,YACA,mDACA,gBACA,0BACA,AACA,yCACA,AACA,kBACA,0BACA,AACA,aACA,OACA,yBACA,WACA,CACA,AACA,YACA,sBACA,AACA,SACA,MACA,EACA;AACA,6DACA,0BACA,AACA,iBACA,0BACA,AACA,+DACA,YACA,AACA,wBACA,kBACA,iBACA,AACA,YACA,8DACA,qBACA,sBACA,+CACA,AACA,kCACA,qBACA,cACA,wDACA,UACA,EACA,MACA,CACA,AACA,aACA,QACA,AACA,yBACA,aACA,sBACA,WACA,sBACA,GACA,AACA,iBACA,+CACA,UACA,AACA,OACA,MACA,0DAEA,SACA,AACA,mBACA,cACA,AACA,MACA;gCACA,uBACA,eACA,wBACA,0BACA,YACA,MACA,AACA,CACA;wBACA,yBACA,2BACA,iCACA,KACA,yBACA,+BACA,SACA,MACA,AACA,wBACA,AACA,+BACA,0BACA,8BACA,CACA;gBACA,4DACA,KACA,qBACA,AACA,YACA,MACA,CAvCA,CAwCA,+CACA,IACA,qCACA,UACA,mCACA,yBACA,AACA,mCACA,cACA,KACA,EACA,mDACA,iBACA,6BACA,AACA,oBACA,kBACA,WACA,6BACA,OACA,OACA,GACA,EACA,iDACA,8BACA,MACA,EACA,wBACA,qBACA,WACA,CACA,sBACA,qBACA,SACA,CACA,sBACA,6EACA,KACA,CACA,yBACA,kBACA,GACA,iFC7SA,CACA;gDACA,aACA,2DACA,aACA,OACA,gBACA,eACA,kBACA,AACA,AACA,QACA,GAbA,IAcA,CACA;gDACA,aACA,2CACA,+BACA,4BACA,uCACA,KACA,EACA,4CCvBA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;GACA;AACA;AACA,4BACA,4DACA,WACA,EACA,sBACA,iGACA,KACA,CACA;AACA,0BACA,iGACA,IACA,+DCrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA;AACA;AACA;AACA;AACA,6CACA,CACA;OACA,oCACA,gBACA,iBACA,gBACA,wBACA,gBACA,GACA,iBACA,gBACA,GACA,KACA,CACA,AACA,CACA;kBACA,cACA,eACA,MACA,CACA,AACA,OACA,OACA,CACA;AACA;AACA,GACA,6EACA,0CACA,yCACA,GACA,EACA;AACA;AACA,0BACA,kBACA,oBACA,AACA,gEACA,oCACA,AACA,MACA;0BACA,qBACA,4DACA,CACA,SACA,AACA,uBACA,+CACA,IACA,AACA,CACA;AACA,AACA;AACA;sEACA,SACA,6BACA,AACA,mDACA,IACA,EACA;AACA;AACA,gCACA,mCACA,sCACA,AACA,IACA;sDACA,SACA,uBACA,AACA,2BACA,MACA,IACA,wBACA,OACA,IACA,AACA,2BACA,KACA,EACA;AACA,iCACA,yBACA,IACA,EACA;AACA,uBACA,gDACA,0DACA,wBACA,qBACA,0CACA,OACA,WACA,MACA,AACA,EACA;AACA;AACA,kCACA,mCACA,iCACA,AACA,qBACA,WACA,gCACA,oBACA,MACA,AACA,oBACA,oBACA,kBACA,MACA,AACA,oBACA,oCACA,GACA,AACA,+BACA,gCACA,AACA,mDACA,4BACA,gCACA,8BACA,iBACA,EACA,MACA,CACA,AACA,iBACA,oDACA,kBACA,MACA,AACA,8CACA,AACA,0CACA,KACA,EACA,gBACA,kBACA,kCAEA,sBACA,kBACA,cACA,AACA,kBACA,CACA;MACA,IACA,AACA,QACA,CACA;4BACA,GACA,AACA,aACA,IACA,AACA,CAlBA,CAmBA,mCACA,uBACA,GACA;sCACA,2BACA,QACA,OACA,GACA,AACA,EACA,8BACA,wBACA,GACA,EACA,qBACA,+BACA,WACA,+BACA,8BACA,IACA,OACA,KACA,CACA;AACA,6BACA,yDACA,yBACA,6BACA,8BACA,KACA,AACA,4FChOA;AACA,2BACA,GACA;AACA;AACA;AACA,AACA;AACA,qBACA,GACA,+BAEA,IACA,kBACA,oBACA,6CACA,iBACA,6BACA,EACA,IACA,oBACA,sBACA,iDACA,iBACA,+BACA,EACA,KAfA,CAgBA,wBACA,kCACA,CACA;sBACA,GACA,IACA,CACA;4BACA,YACA,IACA,CACA;sCACA,YACA,CACA;sCACA,GACA,CACA,AACA,AACA,EACA,gCACA,sCACA,CACA;oBACA,QACA,IACA,CACA;0BACA,iBACA,IACA,CACA;oCACA,iBACA,CACA;AACA;oCACA,QACA,CACA,AACA,AACA,AACA,EACA,aACA,mBACA,iBACA,gBACA,EACA,0BACA,6BACA,CACA,OACA,UACA,6BACA,2BACA,YACA,aACA,EACA,iBACA,CACA,aACA,CACA,CACA,qBACA,aACA,CACA,OACA,wBACA,0BACA,AACA,mBACA,iBACA,cACA,YACA,0BACA,iBACA,0BACA,MACA,CACA,aACA,YACA,OACA,cACA,cACA,sBACA,SACA,CACA,8BACA,qCACA,yBACA,oCACA,qBACA,GACA,CACA,yBACA,sCACA,YACA,YACA,CACA,EACA;AACA,wBACA,UACA,eACA,OACA,6BACA,0BACA,SACA,wBACA,qBACA,eACA,gBACA;AACA,iBACA,GACA,gBACA,CACA,gBACA,yBACA,kBACA,iBACA,4BACA,gCACA,aACA,KACA,8BACA,iBACA,oCACA,EACA,mCACA,2BACA,iBACA,oCACA,kCACA,+DChKA,kDACA,gBACA,AACA,CACA,mHACA,4BACA,4FACA,0BACA,2FACA,OACA,uBACA,gCACA,8BACA,WACA,MACA,WACA,AACA,CACA,AACA,AACA,AACA,AACA;;;;OACA,AACA,UACA,mEACA,AACA;AACA,iCACA,QACA,OACA,QACA,QACA,gBACA,gBACA;cACA,AACA;AACA,wCACA,qCACA;4CACA,AACA;AACA,4BACA,YACA,8DACA,iEACA,AACA,AACA,iBACA,+CACA,gBACA,gCACA,AACA,aACA,yBACA,AACA,IACA,AACA,8EACA,AACA,AACA,AACA,AACA,AACA;;;;;wBACA,6BACA,OACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;0BACA,kBACA,kBACA,kBACA,yBACA,SACA,OACA,QACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;iCACA,wBACA,gBACA,qBACA,CACA;AACA;gBACA,iBACA,GACA,CACA;sCACA,gCACA,qCACA,mBACA,QACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;+BACA,YACA,WACA,gBACA,OACA,MACA,2BACA,yBACA,2DACA,CACA;wBACA,sCACA;8CACA,cACA,CACA;AACA;YACA,OACA,UACA,MACA,aACA,OACA,CACA,OACA,QACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;8BACA,iCACA,YACA,mBACA,QACA,oDACA,2BACA,MACA,4BACA,aACA,gBACA,IACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;oCACA,oBACA,kBACA,GACA,oBACA,kBACA,GACA,oBACA,kBACA,GACA,OACA,MACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;qCACA,CACA;AACA;0CACA,GACA,AACA,CACA,AACA,AACA,AACA,AACA;;;;6CACA,OACA,2CACA,qBACA,2EACA,mBACA,eACA,+CACA,OACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;0BACA,CACA;WACA,qBACA,OACA,MACA,IACA,cACA,YACA,MACA,EACA,MACA,KACA,EACA,EACA,MACA,EACA,iCACA,AACA,WACA;AACA;AACA,AACA;wBACA,sBACA,OACA,EACA,AACA,qBACA,CACA;6BACA,OACA,aACA,8BACA,IACA,AACA,CACA;AACA,AACA;wEACA,AACA,CACA;AACA;AACA;AACA;AACA;iDACA,AACA,uBACA,OACA,iBACA,AACA,qCACA,AACA,oDACA,OACA,YACA,AACA,UACA,qCACA,AACA,gBACA,CACA,MACA,AACA,iBACA,gCACA,OACA,YACA,AACA,IACA,AACA,WACA,AACA,mBACA,8BACA,AACA,GACA;AACA;yBACA,OACA,YACA,AACA,YACA,QACA,AACA,IACA;oBACA,AACA,GACA,AACA,mBACA,QACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;0BACA,IACA,GACA,MACA,eACA,YACA,KACA,EACA,EACA,EACA,EACA,EACA,oBACA,GACA,oEACA,YACA,iCACA,sBACA,WACA,AACA,QACA;iBACA,AACA,OACA;kBACA,AACA,OACA;EACA,eACA,OACA,AACA,YACA;0BACA,oBACA,wBACA,gCACA,eACA,CACA,AACA,mCACA,AACA,OACA;AACA,AACA;AACA;eACA,aACA,WACA,AACA,CACA;iCACA,AACA,CACA;AACA;mCACA,oBACA,sCACA,GACA,aACA,CACA,AACA,CACA;AACA;qCACA,qDACA,OACA,YACA,AACA,cACA,wBACA,AACA,4BACA,oBACA,AACA,qCACA,OACA,YACA,AACA,oBACA,CACA;8CACA,oCACA,YACA,CACA,MACA,WACA,kBACA,SACA,0DACA,AACA,qBACA,YACA,AACA,+CACA,4DACA,mBACA,IACA,eACA,CACA,AACA,GACA,QACA,AACA,EACA,oBACA,IACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;6BACA,wCACA,2BACA,+BACA,eACA,OACA,GACA,AACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;2BACA,wCACA,2BACA,sBACA,QACA,OACA,GACA,AACA,CACA,AACA,8EACA,sCAEA,AACA,AACA,AACA,AACA;;;;eACA,OANA,CAOA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;YACA,UACA,oBACA,AACA,qBACA,gBACA,iBACA,oBACA,AACA,AACA,WACA,wBACA;AACA;AACA,kBACA,iCACA,iBACA,IACA,6BACA,OACA,UACA,oCACA,gCACA,CACA;mBACA,cACA,CACA;oBACA,0DACA,MACA,CACA,MACA,CACA;cACA,SACA,AACA,IACA,uKCrhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA,AACA,aACA;AACA;AACA;AACA,iCACA,iDACA,MACA,CACA,0CACA,UACA,WACA,YACA,AACA,0CACA,OACA,KACA,AACA,YACA,kBACA,AACA,iBACA,mDACA,iBACA,QACA,AACA,YACA,OACA;0BACA,KACA,QACA,AACA,uBACA,4BACA,qBACA,gBACA,AACA,YACA,iBACA,uBACA,QACA,MACA,OACA,GACA,AACA,sBACA,2BACA,AACA,gCACA,QACA,2BACA,aACA,QACA,gBACA,GACA,CACA,AACA,OACA,KACA,EACA,uCACA,6CACA,iBACA,6CCpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA,AACA,aACA,qDACA,cACA,6CACA,eACA,AACA,OACA,0BACA,AACA,YACA,8BACA,AACA,GACA,cACA,AACA,IACA,EACA,wCACA,UACA,WACA,kBACA,KACA,UACA,AACA,mEACA,uCACA,kDACA,sBACA,8BACA,iDACA,YACA,UACA,qDACA,KACA,SACA,AACA,KACA,AACA,gBACA,uDACA,yCACA,MACA,EACA,uCACA,6CACA,iBACA,EACA,kBACA,yBACA,WACA,+BACA,kBACA,IACA,OACA,KACA,CACA,yCACA,SACA,sBACA,2DACA,KACA,OACA,KACA,6CCrFA,AACA,aACA,iDACA,yCACA,kFCJA,uBACA,kGCDA;AACA;AACA;AACA,AACA;AACA,AACA,aACA,AACA,iBACA,yCACA,UACA,sBACA,WACA,YACA,QACA,AACA,kBACA,eACA,OACA,iBACA,oDACA,AACA,kBACA,iBACA,iCACA,kCACA,AACA,kBACA,2CACA,qBACA,sBACA,qBACA,UACA,wCACA,8BACA,iBACA,4EACA,QACA,CACA,wBACA,gDACA,AACA,4BACA,4BACA,AACA,4DACA,AACA,yDACA,AACA,yBACA,kEACA,AACA,sBACA,OACA,CACA;AACA,gBACA,CACA;AACA;iDACA,AACA,OACA;AACA;wBACA,MACA,CACA,sBACA,MACA,MACA,CACA,sBACA,iCACA,SACA,GACA,sJC1EA;AACA;AACA,AACA;AACA,AACA,aACA,eACA,YACA,sBACA,uBACA,iBACA,iCACA,kCACA,AACA,kBACA,0BACA,WACA,6BACA,0DACA,AACA,6BACA,SACA,CACA,4DACA,SACA,+HCzBA,AACA,aACA,eACA,SACA,iBACA,oDACA,AACA,kBACA,iBACA,+BACA,AACA,kBACA,uBACA,cACA,iBACA,yBACA,aACA,0DACA,gCACA,SACA,AACA,kBACA,iBACA,WACA,WACA,IACA,qBACA,0BACA,qCACA,aACA,MACA,AACA,kBACA,oCACA,iBACA,uCACA,AACA,kBACA,iBACA,iCACA,kCACA,AACA,kBACA,iBACA,8BACA,iBACA,iCACA,0BACA,eACA,wBACA,GACA,AACA,kBACA,GACA,eACA,uBACA,QACA,6DACA,WACA,0CACA,4DACA,AACA,IACA;AACA;AACA;AACA;AACA;6LACA,QACA,CACA,WACA,sCACA,wBACA,AACA,qCACA,AACA,GACA;AACA;0BACA,AACA,kFACA,AACA,mBACA;AACA;gBACA,mDACA,yCACA,AACA,WACA;0BACA,AACA,0BACA,eACA,aACA,qBACA,eACA,gBACA,sBACA,mBACA,AACA,MACA;AACA;AACA;AACA;UACA,AACA,KACA;AACA;kBACA,2BACA,6BACA,2BACA,AACA,MACA;AACA;AACA;8CACA,AACA,OACA;AACA;YACA,AACA,MACA;gBACA,AACA,EACA;iBACA,AACA,mBACA,mBACA,yBACA,4DACA,qDACA,gCACA,SACA,CACA,CACA,WACA,0BACA,wBACA,AACA,uEACA,AACA,uDACA,AACA,MACA;cACA,AACA,qEACA,AACA,iBACA,MACA,CACA;AACA;AACA;AACA;AACA,gDACA,gBACA,AACA,6DACA,0BACA,6CACA,6BACA,mBACA,GACA,CACA,AACA,mDACA,OACA,EACA;AACA,0CACA,gBACA,2DACA,MACA,EACA,sCACA,sCACA,MACA,EACA,iEACA,2BACA,aACA,qBACA,0BACA,eACA,wBACA,wDACA,6BACA,iBACA,+CACA,yCACA,kBACA,wDACA,SACA,IACA,kDACA,2BACA,iDACA,EACA,AACA,8BACA,AACA,MACA;AACA;YACA,CACA;gDACA,oBACA,mBACA,QACA,CACA;uCACA,wEACA,AACA,0CACA,QACA,CACA,AACA,sBACA,OACA,sBACA,eACA,MACA,AACA,qBACA,OACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BACA,2FACA,GACA,CACA;AACA,4CACA,4DACA,4DACA,kCACA,UACA,MACA,EACA;AACA,qBACA,mCACA,eACA,GACA,aACA,CACA;AACA,WACA,SACA,SACA,SACA,SACA,GACA,IACA,OACA,GACA,CACA,+BACA,wCACA,AACA,sCACA,AACA,wBACA,CACA;sFACA,OACA,AACA,eACA,AACA,GACA;AACA;AACA;AACA;qEACA,AACA,GACA;kBACA,iBACA,oBACA,WACA,QACA,cACA,OACA,CACA,AACA,OACA,GACA,CACA;AACA,mCACA,cACA,kBACA,yBACA,AACA,oDACA,AACA,MACA;AACA;AACA;+EACA,+CACA,4EACA,YACA,MACA,AACA,mBACA,AACA,OACA;sBACA,iCACA,YACA,MACA,AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA;iBACA,mCACA,AACA,QACA;wDACA,QACA,wCACA,QACA,AACA,CACA;AACA;8BACA,QACA,+BACA,QACA,AACA,WACA,OACA,yBACA,gBACA,KACA;uCACA,KACA;iBACA,0BACA,MACA,AACA,CACA;AACA;gDACA,AACA,UACA,2CACA,AACA,mBACA,oBACA,OACA,EACA,AACA,eACA,AACA,EACA;AACA;qDACA,AACA,KACA;wDACA,AACA,qCACA,AACA,WACA,KACA,EACA,kCACA,QACA,6GACA,kBACA,mCACA,OACA,IACA,CACA,iCACA,gBACA,wBACA,yBACA,6BACA,mBACA,8CACA,OACA,CACA,aACA,AACA,KACA;aACA,QACA,CACA;AACA;AACA;AACA,6BACA,kBACA,kCACA,gCACA,4BACA,+BACA,4EACA,QACA,CACA,CACA,8BACA,OACA,6BACA,iBACA,QACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,oCACA,uBACA,mBACA,2CACA,OACA,CACA,CACA,qCACA,eACA,4FACA,OACA,oCACA,kBACA,OACA;qBACA,OACA,mBACA,MACA,CACA;AACA;AACA;AACA;AACA,oCACA,6BACA,oBACA,iDAEA,SACA,oBACA,AACA,4BACA,gBACA,eACA,KACA,UACA,4BACA,MACA,MACA,yBACA,MACA,AACA,yBACA,iDACA,AACA,6FACA,AACA,6BACA,uEACA,AACA,wBACA,qCACA,OACA,8BACA,CACA,UACA,CACA,AACA,iBACA,OACA,cACA,MACA,AACA,CACA;AACA;AACA;AACA;wBACA,qBACA,AACA,uBACA,wBACA,OACA,WACA;4BACA,sCACA,sCACA,qCACA,sCACA,mCACA,gCACA,mCACA,AACA,kBACA,AACA,KACA;AACA;AACA;AACA;AACA;2EACA,UACA,AACA,eACA,8BACA,OACA,6BACA,sBACA,CACA;AACA;AACA;AACA;8GACA,wDACA,+BACA,aACA,KACA,QACA,CACA,AACA,CACA;AACA;oBACA,iBACA,IACA,qCACA,gEACA,IACA,AACA,CACA;6BACA,AACA,SACA;kBACA,8BACA,UACA,SACA,mBACA,4BACA,OACA,wCACA,SACA,SACA,oBACA,AACA,2BACA,OACA,qBACA,MACA,AACA,CACA;iBACA,AACA,KACA;kBACA,OACA,mBACA,SACA,AACA,OACA,MACA,CA5HA,CA6HA,yBACA,kBACA,eACA,yCACA,sCACA,kEACA,eACA,UACA,KACA,CACA,EACA,yCAEA,gBACA,AACA,eACA;8BACA,AACA,MACA;wBACA,CACA;kCACA,AACA,0BACA,AACA,MACA;YACA,sBACA,gBACA,iCACA,YACA,MACA,AACA,CACA,AACA;SACA,CACA;gBACA,oBACA,uBACA,sBACA,gBACA,AACA,+BACA,yBACA,aACA,MACA,AACA,CACA;0BACA,sBACA,AACA,2BACA,qBACA,kDACA,AACA,sBACA,AACA,YACA,MACA,CAhDA,CAiDA;AACA;AACA,qCACA,0CACA,AACA,IACA;AACA;oDACA,MACA,SACA,AACA,qDACA,gBACA,2CACA,yBACA,2BACA,yBACA,uBACA,kCACA,4BACA,mBACA,OACA,CACA,CACA,AACA,OACA,OACA,kDACA,GACA,+BACA,OACA,sCACA,GACA,CACA;AACA;AACA,oCACA,gBACA,iCACA,OACA,wBACA,iBACA,OACA,OACA,MACA,EACA,6BACA,2BACA,uBACA,oCACA,OACA,CACA,CACA,8BACA,mBACA,OACA,6BACA,GACA,AACA,uBACA,kBACA,eACA,qDACA,GACA,CACA,mCACA,mDACA,gDACA,OACA,qCACA,gBACA,SACA,OACA,MACA,EACA,qBACA,kBACA,kCACA,0BACA,GACA,kBACA,kCACA,SACA,CACA,CACA;AACA;AACA;AACA,wCACA,gBACA,0BACA,AACA,eACA,+BACA,OACA,8CACA,yBACA,uCACA,OACA,AACA,WACA,MACA,AACA,mCACA,OACA,2DACA,AACA,OACA;iHACA,AACA,yBACA,eACA,QACA,YACA,QACA,CACA,AACA,GACA;AACA;oBACA,uDACA,yBACA,kBACA,oCACA,WACA,IACA,GACA,CACA,AACA,CACA;8CACA,qCACA,kCACA,KACA,AACA,GACA;AACA;sBACA,uBACA,aACA,QACA,aACA,SACA,CACA,AACA,QACA,MACA,EACA;AACA,mBACA,SACA;AACA;AACA,0BACA,gBACA,wBACA,8BACA,+BACA,cACA,AACA,KACA;yBACA,AACA,uFACA,CACA;gGACA,oBACA,OACA,CACA;oBACA,CACA;AACA;aACA,mBACA,qBACA,+BACA,CACA;SACA,aACA,CACA;AACA;qDACA,AACA,SACA,yCACA,eACA,6BACA,AACA,oEACA,AACA,0DACA,AACA,WACA,IACA,CACA,CACA,AACA,OACA,KACA,CACA,4BACA,kBACA,AACA,eACA;AACA;kCACA,AACA,mEACA,aACA,yCACA,QACA,CACA,CACA,oCACA,CACA;uCACA,kBACA,qBACA,kBACA,OACA,CACA,CACA,sBACA,iCACA,SACA,GACA,CACA,CACA,sBACA,iCACA,oBACA,GACA,QACA,mQC53BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA,AACA,aACA,eACA,UACA,mBACA,oBACA,iBACA,iCACA,kCACA,AACA,kBACA,wBACA,QACA,+BACA,sCACA,iCACA,MACA,AACA,qBACA,wBACA,mBACA,qBACA,wBACA,KACA,CACA,uCACA,eACA,gCACA,AACA,gBACA,AACA,oDACA,AACA,gDACA,gBACA,AACA,kDACA,AACA,SACA,AACA,kBACA,0BACA,qDACA,iBACA,eACA,CACA,CACA,2BACA,sDACA,AACA,0BACA,AACA,iDACA,AACA,MACA;WACA,AACA,KACA;iCACA,AACA,KACA;AACA;AACA;yBACA,AACA,iBACA,kEACA,AACA,mEACA,MACA,AACA,iCACA,4DACA,aACA,iBACA,QACA,GACA,CACA,iDACA,oCACA,mDACA,UACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DACA,iBACA,mBACA,EACA,sDACA,aACA,2BACA,iBACA,uBACA,6BACA,aACA,8FACA,eACA,CACA,EACA;AACA;AACA;AACA,qCACA,aACA,AACA,sEACA,iBACA,uDACA,qBACA,CACA;AACA;iBACA,KACA,CACA,EACA,wBACA,kCACA,AACA,IACA;AACA;cACA,6BACA,AACA,6CACA,AACA,iFACA,AACA,qEACA,0HCnLA;AACA;AACA,AACA;AACA,AACA,aACA,eACA,SACA,iBACA,oDACA,AACA,kBACA,iBACA,uHACA,AACA,kBACA,uBACA,cACA,iBACA,iCACA,kCACA,AACA,kBACA,iBACA,iBACA,mBACA,mBACA,AACA,kBACA,iBACA,WACA,WACA,IACA,qBACA,0BACA,qCACA,aACA,MACA,AACA,kBACA,oCACA,iBACA,uCACA,AACA,kBACA,uBACA,QACA,eACA,CACA,oCACA,YACA,oBACA,uBACA,aACA,KACA,CACA,WACA,sCACA,wBACA,AACA,qCACA,AACA,GACA;AACA;0BACA,AACA,kFACA,AACA,mBACA;AACA;AACA;gBACA,mDACA,yCACA,AACA,WACA;0BACA,AACA,6BACA,MACA;YACA,MACA;WACA,MACA;cACA,AACA,MACA;AACA;AACA;qCACA,0BACA,AACA,SACA;AACA;AACA;8CACA,AACA,OACA;AACA;AACA;YACA,AACA,EACA;aACA,AACA,MACA;YACA,AACA,EACA;AACA;AACA;AACA;UACA,AACA,KACA;AACA;AACA;sBACA,AACA,MACA;yBACA,gBACA,IACA,AACA,EACA;aACA,AACA,KACA;cACA,AACA,uBACA,8BACA,AACA,KACA;AACA;eACA,AACA,EACA;AACA;iBACA,AACA,MACA;kBACA,AACA,MACA;0BACA,AACA,EACA;AACA;0CACA,MACA,CACA,mEACA,kBACA,wBACA,iBACA,UACA,yBACA,KACA,OACA,KACA,EACA,WACA,IACA,wDACA,sCACA,aACA,mFACA,AACA,wBACA,CACA,KACA,WACA,0BACA,wBACA,AACA,oBACA;AACA;8EACA,AACA,uDACA,AACA,MACA;cACA,AACA,gBACA,0DACA,AACA,iEACA,OACA,AACA,aACA,MACA,CACA;AACA,kCACA,6BACA,8BACA,EACA,iCACA,kBACA,mBACA;oBACA,uBACA,IACA,CACA;AACA;AACA;AACA;AACA;AACA,0CACA,WACA,YACA,MACA;AACA;AACA;gBACA,kBACA,uIACA,kBACA,mCACA,OACA,qBACA,uBACA,UACA,MACA,OACA,OACA,CACA,oDACA,gBACA,uBACA,AACA,sCACA,IACA,kBACA,KACA,AACA,8EACA,AACA,6CACA,AACA,kFACA,OACA,wDACA,IACA,AACA,OACA,KACA,EACA,kCACA,gBACA,AACA,qBACA,SACA,EACA,oCACA,gBACA,AACA,+BACA,OACA,AACA,4HACA,OACA,CACA,6EAEA,CACA;gDACA,gMACA,8CACA,eACA,MACA,CAPA,CAQA,0CACA,4EACA,6BACA,UACA,OACA,OACA,CACA;AACA;AACA;AACA,sDACA,+BACA,AACA,6CACA,0CACA,AACA,qBACA,AACA,+BACA,cACA;wBACA,AACA,oCACA,gBACA,0EACA,YACA,iBACA,yBACA,6BACA,oBACA,6BACA,OACA,+CACA,IACA,AACA,OACA,KACA,CACA,2DACA,gBACA,kBACA,iBACA,gBACA,2FACA,oBACA,MACA,CACA,8CACA,SACA,iDACA,AACA,uCACA,yBACA,IACA,CACA,kCACA,eACA,oBACA,yBACA,wBACA,EACA,CACA,2BACA,kBACA,8BACA,kBACA,AACA,2BACA,AACA,uDACA,CACA;wBACA,AACA,mFACA,oBACA,OACA,AACA,SACA,CACA,6DACA,IACA,uBACA,kCACA,IACA,CACA,CACA,CACA,6CACA,kCACA,aACA,YACA,wBACA,OACA,CACA;AACA;AACA;AACA,mCACA,sCACA,iBACA,kBACA,SACA,CACA,CACA;AACA,kCACA,wBACA,qBACA,AACA,qDACA,CACA;YACA,0CACA,oBACA,gCACA,AACA,gBACA,cACA,eACA,kBACA,YACA,EACA,AACA,yDACA,AACA,QACA;AACA;MACA,sCACA,oBACA,iCACA,iBACA,UACA,4CACA,OACA,MACA,CACA;YACA,iBACA,yBACA,sBACA,0CACA,AACA,qDACA,gBACA,KACA;AACA;AACA;AACA;iBACA,CACA,MACA,CACA,AACA,2CACA,KACA,AACA,4BACA,wBACA,6BACA,MACA,CACA,qDACA,cACA,oBACA,EACA,2BACA,uDAEA,gBACA,AACA,4CACA,IACA,YACA,cACA,2CACA,IACA,kBACA,KACA,AACA,qDACA,AACA,UACA;gBACA,cACA,OACA,SACA,AACA,CACA;yDACA,IACA,CAvBA,CAwBA,0BACA,8FACA,QACA,CACA,gCACA,uBACA,mBACA,iBACA,aACA,CACA,CACA,kCACA,qBACA,eACA,wBACA,kBACA,sBACA,iBACA,eACA,kBACA,OACA,CACA,OACA,MACA,CACA,qCACA,cACA,wBACA,aACA,iEACA,IACA,aACA,qBACA,MACA,CACA;AACA;AACA,6BACA,WACA,AACA,eACA,gBACA,AACA,8BACA,iBACA,kBACA,iBACA,cACA,eACA,eACA,iBACA,KACA,6BACA,+BACA,WACA,0BACA,MACA,CACA,6PC7gBA,AACA,aACA,6BACA,yBACA,iCACA,0CACA,gDACA,qCACA,+BACA,UACA,+BACA,qBACA,+BACA,2BACA,qBACA,yBACA,iBACA,sBACA,qBACA,SACA,mBACA,0BACA,KACA,gBACA,EACA,oBACA,iCACA,8BACA,sBACA,cACA,iBACA,kBACA,MACA,MACA,UACA,OACA,OACA,OACA,8CACA,2CACA,2BACA,MACA,2BACA,qBACA,yBACA,iBACA,sBACA,qBACA,mBACA,QACA,yDACA,yFACA,2CACA,QACA,4BACA,qBACA,yCACA,4BACA,yBACA,kBACA,mEACA,YACA,yCACA,mBACA,OACA,gCACA,QACA,EACA,SACA,mCACA,sBACA,OACA,6BACA,sBACA,+BACA,gCACA,sBACA,+BACA,6CACA,MACA,2BACA,0BACA,iCACA,cACA,KACA,UACA,kHACA,mBACA,OACA,qDACA,yBACA,MACA,CACA,AACA,iEACA,+CACA,sDACA,+CACA,+BACA,MACA,2BACA,qBACA,yBACA,kBACA,sBACA,qBACA,uBACA,MACA,gMC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA;AACA,AACA;AACA,qBACA,kBACA,sBACA,KACA,8BACA,kBACA,gBACA,QACA,uBACA,qBACA,WACA,kBACA,UACA,oBACA,cACA,MACA,eACA,OACA,+BACA,aACA,MACA,0BACA,kBACA,sBACA,qBACA,UACA,iBACA,SACA,sBACA,qBACA,UACA,iBACA,SACA,sBACA,6DACA,UACA,iBACA,SACA,yBACA,kBACA,IACA,oBACA,YACA,qBACA,6BACA,mBACA,iBACA,SACA,sBACA,6EACA,MACA,iBACA,SACA,kBACA,4BACA,iBACA,eACA,OACA,mBACA,0DACA,QACA,gBACA,QACA,wBACA,qBACA,YACA,mBACA,WACA,yBACA,cACA,mBACA,wBACA,uBACA,0EACA;aACA,aACA,oBACA,YACA,wBACA,SACA,0BACA,uCACA,GACA,6UC3GA,AACA,aACA,YACA,0CACA,4EACA,gBACA,cACA,wBACA,SACA,CACA,oCACA,2BACA,qBACA,0CACA,mBACA,gBACA,SACA,SACA,OACA,2BACA,QACA,kDACA,cACA,MACA,OACA,kDACA,mBACA,MACA,OACA,oDACA,wBACA,MACA,GACA,2BACA,KACA,sBACA,qBACA,GACA,6CACA,eACA,MACA,AACA,IACA,4GC3CA,CACA,AACA,AACA,AACA;;GACA,eACA,UACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;;;;;GACA,0BACA,4BACA,OACA,IACA,AACA,YACA,2BACA,YACA,+BACA,iBACA,yCACA,eACA,UACA,cACA,KACA,QACA,KACA,sBACA,WACA,AACA,OACA,YACA,CACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;GACA,qBACA,CACA;GACA,+BACA,gBACA,OACA,OACA,6BACA,yBACA,0CACA,OACA,kKCnEA,uBACA,oJCAA,IACA,6BACA;UACA,IAJA,CAKA,4DACA,+BACA,yBACA,sDACA,kDACA,wDACA,4BACA,gCACA,qEACA,gBACA,OACA,wPChBA,uBACA,wGCDA,uBACA,sGCDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA,eACA,OACA,sCACA,qBACA,YACA,oBACA,uDACA,uDACA,mDACA,yDACA,2BACA,kCACA;AACA,cACA,AACA,AACA,OACA;AACA,AACA;AACA,iBACA,SACA,MACA,6CAEA,YACA,AACA,2BACA,kBACA,4CACA,QACA,QACA,CACA,CACA,AACA,kBACA,AACA,0BACA,mCACA,QACA,SACA,CACA,AACA,iBACA,AACA,SACA;AACA;mDACA,iBACA,yBACA,SACA,AACA,cACA,sBACA,aACA,gBACA,AACA,UACA,MACA,AACA,AACA,mBACA,aACA,gBACA,AACA,8CACA,UACA,AACA,CACA;oBACA,CACA,gDACA,UACA;AACA,CACA,AACA,mBACA,yBACA,AACA,SACA;kBACA,8BACA,oCACA,AACA,qCACA,qCACA,AACA,uCACA,qCACA,AACA,qCACA,uCACA,AACA,qCACA,SACA,AACA,iBACA,2BACA,AACA,yBACA,AACA,0BACA,AACA,QACA;MACA,MACA,CAlFA,8PC7CA,2CACA,4BACA,gDACA,gBACA,OACA,SACA,sCAEA,kBACA,wBACA,AACA,uBACA,AACA,MACA;AACA;AACA;8EACA,AACA,+BACA,6CACA,mBACA,yBACA,AACA,IACA;8BACA,gBACA,AACA,IACA;yDACA,sCACA,yCACA,AACA,GACA,AACA;0BACA,SACA,qBACA,UACA,KACA,CAhCA,CAiCA,8BACA,2BACA,QACA,YACA,KACA,EACA,wBACA,6BACA,EACA,kBACA,YACA,aACA,CACA,WACA,UACA,OACA,SACA,MACA,OACA,OACA,WACA,QACA,aACA,QACA,OACA,SACA,UACA,QACA,OACA,WACA,YACA,QACA,MACA,SACA,SACA,YACA,QACA,SACA,kQC9EA,0DACA,gBACA,8BACA,GACA,2BACA,6BACA,eACA,CACA,oCACA;AACA;AACA,wCACA,uBACA,+BACA,IACA,kBACA,+BACA,eACA,OACA,OACA,CACA;AACA;AACA,4DACA,uEACA,OACA,qEACA;AACA;AACA,0EACA,8CACA,6DACA,0DACA,kCACA,SACA,0BACA,uBACA,WACA,CACA,SACA;kMCxCA,uCACA,iCACA,mCACA,sCACA,0BACA,kBACA,6CACA,qBACA,YACA,iCACA,qBACA,OACA,kDACA,OACA,uDACA,OACA,0DACA,OACA,wDACA,OACA,oBACA,OACA,OACA,CACA,gDAEA,UACA,0BACA,AACA,iBACA,gBACA,iBACA,WACA,4EACA,2DACA,kCACA,OACA,AACA,MACA,gDACA,CACA;AACA;aACA,sDACA,CACA;yBACA,uFACA,CACA;aACA,UACA,iBACA,+BACA,uBACA,AACA,yCACA,MACA,YACA,GACA,CAjCA,CAkCA,8BACA,gEAEA,UACA,wBACA,cACA;AACA;AACA;uCACA,EACA,AACA,gCACA,MACA,WACA,AACA,OACA,CAdA,CAeA,gDACA,UACA,8CACA,MACA,EACA,mDACA,UACA,+BACA,eACA,8CAEA,UACA,AACA,aACA,WACA,qBACA,AACA,0BACA,YACA,0EACA,+BACA,qDACA,sBACA,WACA,8CACA,AACA,UACA,CACA;+BACA,WACA,CACA,AACA,yBACA,uDACA,+CACA,OACA,AACA,+BACA,mBACA,eACA,aACA,UACA,kDACA,uCACA,qBACA,cACA,6BACA,mBACA,QACA,QACA,8BACA,oBACA,2CACA,iBACA,4BACA,mBACA,KACA,GACA,OACA,AACA,CACA;mBACA,4CACA,AACA,yBACA,gCACA,AACA,4DACA,0BACA,AACA,oFACA,6DACA,OACA,AACA,kBACA,sCACA,YACA,yBACA,qBACA,UACA,iBACA,AACA,OACA,EACA;AACA;0CACA,0BACA,MACA,iBACA,EACA,AACA,uBACA,SACA,WACA,mCACA,cACA,AACA,KACA,UACA,iBACA,4BACA,mBACA,KACA,GACA,OACA,CACA,CACA,CAjGA,CAkGA,AACA,AACA,AACA,AACA;;;;GACA,yBACA,IACA,gBACA,sCACA,WACA,OACA,OACA,CACA,CACA,iDACA,UACA,AACA,sCACA,WACA,AACA,gBACA,eACA,AACA,0BACA,iBACA,EACA,2CACA,UACA,AACA,aACA,WACA,AACA,6EACA,iCACA,WACA,EACA,0DACA,UACA,AACA,qBACA,OACA,KACA,0EAEA,UACA,qBACA,aACA,oCACA,aACA,eACA,QACA;AACA;AACA,CAVA,CAWA,sDACA,UACA,iCACA,IACA,UACA,UACA,AACA,uDACA,IACA,EACA,kDACA,gDACA,gDACA,sDACA,EACA;AACA,kBACA,CACA,iBACA,kBACA,iCACA,gCACA,aACA,iBACA,SACA,UACA,OACA,MACA,SACA,OACA,aACA,SACA,UACA,KACA,UACA,oBACA,UACA,aACA,AACA,wWCrRA,uCACA,iCACA,mBACA,mBACA,gCACA,QACA,SACA,mBACA,UACA,OACA,AACA,0EAEA,UACA,0BACA,AACA,iBACA,kBACA,mBACA,iBACA,oBACA,AACA,GACA;wBACA,CACA;2BACA,WACA,SACA,GACA,AACA,uFAgBA,oCACA,SACA,WACA,sBACA,WACA,MACA,OACA,6BACA,QACA,OACA,GACA,sBAzBA,AACA,2BACA,6BACA,mCACA,WACA;AACA;mFACA,8CACA,yCACA,IACA,AACA,CACA;qBACA,WAdA,CA2BA,AACA,iBACA,WACA,cACA,AACA,eACA,gCACA,8BACA,yDACA,yCACA,0BACA,+BACA,oBACA,oCACA,kCACA,mBACA,GACA,gCACA,2CACA,iCACA,QACA,2BACA,GACA,yCACA,IACA,CACA,AACA,iBACA,iDACA,8BACA,yBACA,iCACA,2CACA,+BACA,cACA,CACA,UACA,+BACA;AACA,CACA,CACA,CAvFA,CAwFA,gCACA,UACA,2CACA,qDAEA,UACA,AACA,kBACA,AACA,kBACA,iBACA,0BACA;4BACA,KACA,SACA,CACA;8CACA,oBACA,oBACA,sBACA,WACA,MACA,CACA;IACA,WACA;aACA,sBACA,YACA,eACA,MACA,8BACA,kCACA,0CACA,+BACA,qCACA,qCACA,AACA,gBACA,aACA,wBACA,UACA,oBACA,OACA,CACA,UACA,0CACA,KACA,mBACA,6CACA,YACA,oCACA;aACA,+CACA,SACA,0CACA,YACA,UACA,yBACA,qCACA,QACA,4BACA,6CACA,uCACA,8DACA,iCACA,WACA,CACA,0BACA,WACA,MACA,EACA;yBACA,UACA,AACA,AACA,OACA;iEACA,WACA,MACA,CACA,CA5EA,6RCxGA,eACA,OACA,iBACA,4BACA,mBACA,WACA,gBACA,iBACA,sCACA,mBACA,sBACA,wBACA,qBACA,yBACA,gBACA,yBACA,0BACA,cACA,kBACA,qBACA,kBACA,2BACA,2BACA,oBACA,qBACA,yBACA,kBACA,kBACA,2BACA,uBACA,sCACA,wBACA,iBACA,aACA,wBACA,4BACA,0BACA,qBACA,+BACA,8BACA,2BACA,qBACA,4BACA,6BACA,eACA,0BACA,6BACA,yBACA,8BACA,0BACA,wCACA,8BACA,wBACA,oBACA,4BACA,wBACA,mCACA,gCACA,6BACA,sBACA,iCACA,qBACA,AACA,8EC/DA,6BACA,mCAEA,CACA;6BACA,CACA;8DACA,YACA,qDACA,CACA;0DACA,YACA,CACA,AACA,yBACA,CACA;AACA;iCACA,oBACA,6BACA,kBACA,GACA,kBACA,YACA,iBACA,6BACA,CACA,CAzBA,uDCFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA,6BACA,OACA,4BACA,8BACA,2BACA,0JACA,oBACA,AACA,QACA,AACA,EACA,iCACA,0CACA,sCACA,UACA,CACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DACA,+DACA,mBACA,sBACA,cACA,OACA;mBACA,EACA,UACA,WACA,UACA;mBACA,4BACA,0BACA,UACA,SACA;mBACA,4BACA,2BACA,MACA,mBACA,iBACA,AACA,AACA,QACA;AACA;2BACA,GACA;kBACA,EACA;gBACA,EACA,AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CACA,aACA,GACA;sBACA,CACA;kDACA,kCACA,oBACA,AACA,OACA;gDACA,8BACA,AACA,+CACA,CACA;MACA,GACA,AACA,CACA;qCACA,AACA,QACA;+DACA,AACA,UACA;+CACA,yCACA,uBACA,sBACA,GACA,SACA,mCACA,AACA,EACA;qBACA,OACA,SACA,CACA,MACA,AACA,CACA;0BACA,AACA,uBACA,0BACA,CACA;8DACA,eACA,aACA,AACA,0CACA,AACA,4BACA,kCACA,KACA;sCACA,eACA,+BACA,wBACA,iDACA,sCACA,iCACA,KACA,AACA,CACA;MACA,SACA,EACA;AACA;AACA;AACA;AACA,6DACA,CACA;gCACA,AACA,OACA;AACA;aACA,4BACA,AACA,GACA,AACA;AACA;oBACA,iBACA,EACA,MACA,AACA,CACA;oBACA,iBACA,EACA,MACA,AACA,CACA;oBACA,iBACA,EACA,MACA,CACA,mBACA,EACA,EACA,4CACA,SACA,qBACA,sBACA,AACA,6BACA,aACA,0BACA,wBACA,uCACA,KACA,AACA,OACA,KACA,EACA,iCACA,6BACA,UACA,CACA,0CACA,iCACA,sCACA,EACA,CACA,2CACA,iCACA,sCACA,EACA,uDC7NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA,AACA,aACA,iCACA,iBACA,UACA,uBACA,2BACA,uCACA,eACA,UACA,YACA,IACA,cACA,eACA,kBACA,eACA,eACA,eACA,mBACA,eACA,iBACA,gBACA,mBACA,eACA,eACA,KACA,CACA,AACA;AACA;AACA;AACA,oBACA,gCACA,AACA,WACA;kBACA,AACA,qCACA;AACA;sCACA,AACA,MACA;yCACA,AACA,QACA;yBACA,QACA;AACA;AACA;AACA;0CACA,qCACA,oBACA,wBACA,2CACA,+BACA;eACA,cACA,mBACA,AACA,MACA;iBACA,cACA,mBACA,AACA,MACA;gBACA,QACA,aACA,WACA,cACA,YACA,aACA,cACA,YACA,eACA,aACA,AACA,0BACA,eACA,yDACA,sDACA,AACA,cACA,oCACA,yBACA,GACA,qEAEA,wBACA,qEACA,8CACA,AACA,CACA;AACA;AACA;2BACA,KACA,0DACA,qBACA,qBACA,6CACA,qBACA,AACA,mBACA,AACA,IACA;AACA;UACA,AACA,wDACA,CACA;sCACA,oBACA,WACA,eACA,8BACA,oBACA,wBACA,uBACA,iDACA,SACA,+BACA,GACA,2BACA,aACA,cACA,GACA,OACA,MACA,CACA,AACA,gCACA,eACA,aACA,wBACA,4BACA,kCACA,QACA,AACA,CACA;AACA;AACA;AACA;gEACA,gCACA,mDACA,kBACA,gBACA,KACA,CACA,AACA,sBACA,kDACA,AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA;AACA,AACA;AACA;aACA,2CACA,sCACA,oCACA,iBACA,IACA,AACA,CACA;AACA;SACA,uBACA,CACA;wBACA,UACA,CACA;AACA;4BACA,SACA,AACA,CACA;AACA;eACA,mBACA,+BACA,gCACA,MACA,AACA,CACA;SACA,wCACA,mCACA,oCACA,iBACA,IACA,CACA;cACA,eACA,AACA,8BACA,yBACA,AACA,SACA;KACA,AACA,YACA;AACA;6BACA,AACA,GACA;AACA;oCACA,6CACA,AACA,IACA;iBACA,mCACA,6CACA,oBACA,YACA,6CACA,aACA,qCACA,2BACA,CACA;AACA;AACA;SACA,SACA,eACA,GACA,CACA,CACA;uCACA,kCACA,iCACA,sBACA,0BACA,qBACA,wBACA,IACA,mBACA,4BACA,KACA,+BACA,KACA,MACA,CACA,CACA,CACA,AACA,wCACA,eACA,QACA,CACA;4BACA,cACA,AACA,kBACA,CACA;AACA;AACA;AACA;oCACA,UACA,AACA,+BACA,wBACA,eACA,kBACA,AACA,KACA;AACA;gBACA,2DACA,oBACA,UACA,KACA,CACA,CACA,AACA,CACA;AACA;+BACA,AACA,CACA;AACA;AACA;wCACA,mBACA,0BACA,EACA,oCACA,gBACA,YACA,IACA,0BACA,KACA,CACA,AACA,AACA,CACA;sBACA,kBACA,CACA;sBACA,wBACA,MACA,qBACA,gBACA,yBACA,8BACA,uBACA,mCACA,OACA,mBACA,8BACA,CACA;YACA,cACA,GACA,uBACA,wBACA,2CACA,eACA,IACA,AACA,CACA;8BACA,sBACA,sBACA,eACA,EACA,AACA,CACA;eACA,eACA,MACA,CApQA,CAqQA;AACA,uBACA,CACA;AACA;AACA;AACA;mCACA,+DACA,gBACA,SACA,CACA,+BACA,qBACA,WACA,yBACA,+BACA,WACA,IACA,AACA,6BACA,2BACA,mBACA,QACA,YACA,AACA,gBACA,gBACA,4BACA,0CACA,OACA,2BACA,kBACA,gBACA,KACA,CACA,AACA,SACA,0BACA,uCACA,kCACA,OACA,AACA,2CACA,AACA,oDACA,AACA,IACA;AACA;QACA,8DACA,kBACA,uDACA,wBACA,MACA,GACA,AACA,wCACA,kDACA,AACA,wDACA,2BACA,OACA,6BACA,AACA,4CACA,KACA,EACA,oCACA,4CACA,UACA,CACA,wCACA,0DACA,SACA,EACA,0CACA,kBACA,2DACA,UACA,+CAEA,4BACA,YACA,gCACA,eACA,IACA,AACA,eACA,6BACA,wCACA,gBACA,sBACA,MACA,AACA,CACA;AACA;qBACA,AACA,KACA;sBACA,oBACA,eACA,QACA,AACA,CACA;wCACA,CACA;sBACA,4CACA,gBACA,cACA,iCACA,MACA,AACA,CACA;0BACA,6CACA,6BACA,IACA,AACA,oBACA,eACA,QACA,AACA,2DACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;uCACA,sBACA,wCACA,YACA,sBACA,GACA,oBACA,eACA,QACA,AACA,0BACA,iEACA,2CACA,mDACA,2CACA,2CACA,sCACA,wCACA,iCACA,UACA,0BACA,SACA,wBACA,6BACA,iCACA,wBACA,iDACA,0BACA,KACA;kCACA,wBACA,wBACA,iBACA,EACA,yCACA,2BACA,eACA,QACA,AACA,8DACA,IACA,kBACA,uDACA,AACA,yBACA,mCACA,uBACA,gEACA,4DACA,sDACA,AACA,UACA;AACA;AACA;AACA;AACA;aACA,iBACA,eACA,oBACA,sCACA,iCACA,MACA,aACA,wBACA,mBACA,mBACA,sBACA,wCACA,mCACA,MACA,eACA,KACA,uDACA,IACA,AACA,aACA,CACA;2CACA,wBACA,4DACA,4BACA,gCACA,6BACA,cACA,QACA;wBACA,CACA;AACA;oBACA,WACA,6BACA,gCACA,6BACA,wDACA,CACA;AACA;AACA;aACA,qCACA,QACA;AACA;AACA;qDACA,yBACA,oBACA,wBACA,+CACA,QACA,CACA,wBACA,6BACA,MACA;8DACA,8CACA,iCACA,IACA,oBACA,eACA,QACA,AACA,oBACA,CACA;AACA;gBACA,KACA;iBACA,wBACA,YACA,aACA,KACA,oBACA,eACA,QACA,AACA,CACA;AACA;AACA;2BACA,MACA,8DACA,sCACA,AACA,GACA;AACA;OACA,oCACA,cACA,iBACA,kBACA,wBACA,kBACA,GACA,iBACA,kBACA,GACA,KACA,CACA,AACA,CACA;+BACA,cACA,iBACA,MACA,CACA,AACA,6BACA,8CACA,iBACA,IACA,AACA,yDACA,cACA,IACA,AACA,6BACA,uCACA,AACA,IACA;aACA,wCACA,kCACA,GACA;AACA;AACA;qDACA,yBACA,oBACA,wBACA,+CACA,QACA,CACA,AACA,6CACA,AACA,kCACA,iBACA,IACA,AACA,oBACA,iBACA,iBACA,UACA,8BACA,KACA,AACA,CACA;8DACA,8CACA,iCACA,IACA,mCACA,6CACA,2BACA,eACA,QACA,CA7QA,CA8QA,kCACA,eACA,+BACA,cACA,WACA,iBACA,uBACA,GACA,qCACA,QACA,uBACA,KACA,uFC5tBA,AACA,aACA,eACA,gCACA,qBACA,SACA,iCACA,6EACA,KACA,6BACA,cACA,KACA,mDACA,aACA,KACA,AACA,8CChBA,qCACA,mEACA,4BACA,8BACA,mCACA,kFCLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA;AACA,4BACA,0BACA,iBACA,aACA,sCACA,gCACA,KACA,qBACA,KACA,AACA,OACA,WACA,uBACA,yDACA,mBACA,oBACA,UACA,+BACA,kCACA,UACA,QACA,4BACA,eACA,OACA,aACA,CACA,cACA,AACA,IACA,uCACA,4BACA,UACA,OACA,kBACA,GACA,CACA,OACA,KACA,AACA,EACA;AACA;AACA;AACA,kCACA,CACA;+BACA,kBACA,6CACA,WACA,EACA,AACA,iCACA,OACA,IACA,AACA,YACA,2BACA,YACA,6BACA,iBACA,uCACA,eACA,UACA,eACA,KACA,QACA,KACA,sBACA,WACA,AACA,OACA,YACA,AACA,EACA,cACA,iBACA,8BACA,gBACA,mDACA,WACA,8BACA,uDACA,iBACA,0BACA,sCACA,6CACA,KACA,OACA,wBACA,EACA,CACA,eACA,KACA,AACA,EACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;GACA,2CACA,0BACA,CACA;QACA,MACA,WACA,AACA,gBACA;2CACA,+CACA,sBACA,CACA;eACA,mBACA,CACA;oBACA,MACA,CACA;8CACA,0CACA,wCACA,0DACA,+BACA,gDACA,QACA,gBACA,AACA,QACA;AACA,eACA,WACA,gBACA,mBACA,iBACA,gBACA,eACA,gBACA,eACA,eACA,gBACA,kBACA,cACA,iBACA,AACA,KACA;AACA,0BAEA,gBACA,mBACA,qBACA,cACA,gBACA,eACA,UACA;SACA,AACA,AACA,KAXA,EAYA,wCACA,0BACA,AACA,oBACA,8CACA,uCACA,SACA,OACA,KACA,CACA,AACA,CACA,sCACA,OACA,KACA,AACA,CACA,2BACA,UACA,AACA,kCACA,WACA,KACA,AACA,SACA,MACA,AACA,CACA,4CACA,CACA;AACA;OACA,eACA,wBACA,UACA;wBACA,SACA;0DACA,oCACA,uBACA,yBACA,cACA,OACA,KACA,AACA,CACA;kCACA,oBACA,OACA,WACA,AACA,CACA;qBACA,mCACA,AACA,wBACA,iCACA,OACA,AACA,CACA;AACA;WACA,qEACA,oBACA,OACA,AACA,CACA;mBACA,sBACA,qCACA,2CACA,WACA,oBACA,0DACA,UACA,kBACA,wDACA,QACA,mBACA,oBACA,OACA,CACA,AACA,qCACA,AACA,KACA;kBACA,OACA,iBACA,KACA,AACA,CACA;qBACA,kCACA,uBACA,IACA,AACA,CACA;mBACA,yCACA,OACA,AACA,CACA;iBACA,0CACA,OACA,AACA,CACA;kBACA,sBACA,OACA,AACA,+CACA,8BACA,GACA,AACA,mBACA,oBACA,0DACA,eACA,+BACA,WACA,CACA,AACA,eACA,AACA,UACA,iBACA,uDACA,WACA,8BACA,8DACA,OACA,GACA,AACA,UACA,AACA,8CACA,QACA,AACA,CACA,mCACA,gBACA,sCACA,gCACA,wDACA,iBACA,2BACA,+BACA,UACA,aACA,mCACA,uBACA,mCACA,WACA;UACA,iCACA,QACA,AACA,CACA,2BACA,gDACA,IACA,AACA,CACA,6DACA,YACA,sCACA,oCACA,mDACA,sBACA,YACA,aACA,IACA,CACA,2BACA,wBACA,mDACA,gBACA,OACA,CACA,SACA,QACA,AACA,CACA,qEACA,cACA,mEACA,kBACA,aACA,mCACA,gBACA,4BACA,WACA,MACA,aACA,4BACA,WACA,CACA,qCACA,cACA,IACA,SACA,mCACA,yBACA,gCACA,WACA,6CACA,GACA,yBACA,UACA,uCACA,YACA,0BACA,QACA,4CACA,aACA,aACA,MACA,CACA,MACA,8BACA,WACA,CACA,sBACA,8BACA,OACA,KACA,wBACA,mDACA,gCACA,yBACA,aACA,wBACA,sBACA,wBACA,2BACA,UACA,CACA,AACA,kBACA,IACA,AACA,CACA,iDACA,iBACA,6CACA,CACA,sCACA,mEACA,IACA,AACA,gBACA,eACA,sBACA,OACA,gBACA,SACA,WACA,GACA,AACA,wDACA,GACA,AACA,CACA;AACA;AACA,oBACA,sBACA,KACA,gBACA,QACA,uBACA,qBACA,WACA,kBACA,UACA,oBACA,cACA,MACA,eACA,OACA,+BACA,aACA,MACA,0BACA,kBACA,sBACA,qBACA,UACA,iBACA,SACA,sBACA,qBACA,UACA,iBACA,SACA,sBACA,6DACA,UACA,iBACA,SACA,yBACA,kBACA,IACA,oBACA,YACA,qBACA,2CACA,mBACA,iBACA,SACA,sBACA,6EACA,MACA,iBACA,SACA,kBACA,yCACA,iBACA,eACA,OACA,mBACA,iBACA,uDACA,SACA,gBACA,QACA,wBACA,qBACA,YACA,mBACA,WACA,yBACA,cACA,mBACA,wBACA,uBACA,0EACA;aACA,aACA,oBACA,YACA,yBACA,sBACA,0BACA,uCACA,GACA,AACA,CACA,eACA,2CACA,IACA,AACA,CACA,4DACA,kBACA,OACA;AACA,oBACA,UACA,wBACA,kBACA,wCACA,wDACA,KACA,AACA,CACA;AACA,sBACA,gEACA,YACA,AACA,EACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;GACA,yBACA,YACA,oCACA,CACA;8BACA,AACA,6BACA,gBACA,iBACA,0BACA,IACA,OACA,QACA,EACA,iCACA,iDACA,MACA,yOC1kBA,eACA,OACA,oCACA,eACA,iBACA,YACA,AACA,sCACA,sBACA,AACA,yBACA,oCACA,oBACA,KACA,CACA,CACA,AACA,OACA,QACA,+DCnBA,yBACA,iCACA,qBACA,YACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;EACA,qCACA,uCACA,6BACA,0BACA,WACA,KACA,GACA,gCACA,8BACA,UACA,uBACA,AACA,sBACA,aACA,kBACA,kBACA,qCACA,SACA,EACA,QACA,AACA,AACA,iEACA,uBACA,2CACA,AACA,IACA,AACA,aACA,SACA,UACA,SACA,WACA,AACA,AACA,gCACA,sDACA,cACA,MACA,AACA,+BACA,oDACA,gBACA,MACA,AACA,kCACA,mEACA,qCACA,oBACA,IACA,GACA,KACA,sBACA,MACA,OACA,MACA,AACA,0BACA,+DACA,qCACA,kBACA,MACA,GACA,KACA,gDACA,GACA,OACA,MACA,AACA,eACA,6BACA,0BACA,2BACA,cACA,KACA,6BACA,2BACA,aACA,KACA,GACA,KACA,gBACA,KACA,AACA,OACA,MACA,AACA,KACA,oCACA,0EACA,MACA,QACA,KACA,AACA,OACA,AACA,yBACA,AACA,YACA,MACA,AACA,oBACA,MACA,gCACA,kBACA,GACA,AACA,YACA,yBACA,aACA,SACA,MACA,AACA,mBACA,mCACA,mEACA,qCACA,qBACA,IACA,GACA,KACA,mBACA,KACA,OACA,MACA,AACA,2BACA,kBACA,MACA,AACA,4CACA,mEACA,qCACA,oBACA,IACA,GACA,KACA,iCACA,iCACA,yCACA,sBACA,SACA,AACA,sCACA,cACA,KACA,oCACA,aACA,KACA,AACA,6CACA,aACA,mBACA,MACA,CACA,AACA,OACA,MACA,AACA,WACA,6BACA,MACA,WACA,MACA,AACA,4BACA,mBACA,cACA,QACA,AACA,sBACA,iBACA,iBACA,iCACA,sCACA,kCACA,uBACA,WACA,OACA,AACA,AACA,uCACA,AACA,YACA,4CACA,IACA,AACA,2CACA,2CACA,oBACA,8BACA,GACA,QACA,AACA,YACA,OACA,AACA,+DACA,qBACA,GACA,AACA,iEACA,yBACA,GACA,AACA,8BACA,sBACA,iCACA,AACA,WACA,iCACA,sBACA,AACA,GACA,AACA,iBACA,2CACA,SACA,AACA,qBACA,sCACA,SACA,AACA,cACA,AACA,kCACA,wCACA,AACA,uCACA,OACA,SACA,AACA,0BACA,mBACA,CACA,cACA,KACA,aACA,AACA,4BACA,4DACA,IACA,AACA,2BACA,AACA,iDACA,AACA,cACA,uBACA,mCACA,yCACA,AACA,qCACA,EACA,yCACA,KACA,+CACA,KACA,AACA,OACA,AACA,mBACA,MACA,AACA,aACA,qBACA,MACA,AACA,oCACA,kDACA,aACA,AACA,AACA,+BACA,wBACA,sBACA,AACA,2CACA,MACA,kFACA,AACA,GACA,AACA,aACA,8CACA,4BACA,KACA,AACA,qBACA,kDACA,OACA,AACA,2BACA,IACA,oBACA,kCACA,YACA,CACA,WACA,MACA,KACA,CACA,AACA,SACA,MACA,AACA,qBACA,iBACA,MACA,wCACA,AACA,IACA,AACA,OACA,MACA,EACA;AACA;AACA,sBACA,yBACA,6CACA,gDACA,AACA,mCACA,iCACA,AACA,cACA,0DACA,qCACA,qCACA,EACA,kICvVA,kCACA,eACA,AACA,+BACA,AACA,oEACA,kBACA,KACA,AACA,eACA,oDACA,mCACA,sCACA,wDACA,YACA,EACA,IACA,GACA,AACA,+DACA,oBACA,qBACA,6BACA,KACA,CACA,AACA,iCACA,AACA,eACA,kDACA,qDACA,MACA,AACA,gBACA,AACA,8BACA,wCACA,kCACA,OACA,AACA,yBACA,yCACA,iBACA,AACA,+BACA,AACA,6CACA,0BACA,OACA,GACA,AACA,+BACA,cACA,AACA,yBACA,CACA;AACA;AACA;gBACA,uCACA,IACA,8BACA,iCACA,cACA,OACA,2BACA,8BACA,mBACA,mCACA,oBACA,qDACA,YACA,MACA,IACA,qCACA,mBACA,QACA,IACA,KACA,kCACA,MACA,CACA,6BACA,mCACA,AACA,eACA,uCACA,sBACA,AACA,iBACA,mBACA,MACA,SACA,AACA,4BACA,0CACA,mBACA,aACA,KACA,MACA,AACA,2CACA,+BACA,WACA,KACA,MACA,KACA,gDACA,MACA,CACA,AACA,uBACA,yBACA,0CACA,kBACA,qDACA,mBACA,IACA,IACA,iDACA,wBACA,QACA,IACA,KACA,kCACA,MACA,CACA,CACA,KACA,QACA,mDACA,AACA,MACA,CACA,AACA,4CACA,iCACA,qCACA,AACA,4CACA,mCACA,MACA,GACA,CACA,AACA,iCACA,aACA,KACA,AACA,SACA,MACA,EACA,yBACA,OACA,0CACA,WACA,GACA,AACA,4BACA,gBACA,GACA,CACA,+BACA,OACA,0CACA,8BACA,OACA,KACA,AACA,4BACA,oDACA,QACA,MACA,+BACA,aACA,OACA,KACA,gBACA,OACA,CACA,CACA,oBACA,8BACA,wCACA,+DACA,GACA,AACA,4CC3LA,uDACA,uEACA,QACA,mBACA,kBACA,KACA,AACA,qEACA,QACA,yBACA,WACA,UACA,AACA,UACA,MACA,YACA,EACA,AACA,mBACA,yBACA,iCACA,AACA,gCACA,iBACA,iBACA,0BACA,kBACA,sCACA,2BACA,QACA,CACA,eACA,SACA,OACA,AACA,AACA,iDACA,wBACA,AACA,wCACA,AACA,2BACA,uCACA,kCACA,AACA,yCACA,OACA,6BACA,sBACA,AACA,KACA,GACA,2BACA,oBACA,mBACA,8BACA,OACA,6BACA,sBACA,AACA,KACA,GACA,KACA,WACA,MACA,AACA,OACA,8CACA,MACA,EACA,EACA,cACA,SACA,kCACA,kCACA,SACA,+DC5EA,gBACA;iEACA,gBACA,wBACA,2BACA,AACA,aACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;yBACA,AACA,iBACA,2CACA,iDACA,mCACA,AACA,AACA,qBACA,CACA,OACA,wBACA,kBACA,UACA,UACA,eACA,YACA,UACA,WACA,YACA,QACA,aACA,QACA,MACA,QACA,SACA,gBACA,AACA,AACA,gDACA,iCACA,6BACA,KACA,AACA,YACA,kBACA,0BACA,kCACA,kCACA,yDACA,kEACA,0BACA,kDACA,8BACA,qBACA,6CACA,yBACA,uCACA,uGACA,4BACA,AACA,GACA;AACA;AACA;oBACA,yBACA,QACA,AACA,CACA;2CACA,8BACA,2CACA,EACA,aACA,WACA,AACA,mBACA,0BACA,cACA,aACA,cACA,WACA,MACA,EACA,AACA,iBACA,wBACA,OACA,iDACA,UACA,GACA,EACA,AACA,mCACA,+CACA,kBACA,uCACA,4BACA,yBACA,CACA;AACA;AACA;AACA;eACA,QACA,qBACA,QACA,AACA,UACA,yCACA,oBACA,GACA,AACA,UACA,2CACA,sBACA,GACA,AACA,MACA,4DACA,AACA,KACA,8BACA,KACA,CACA;4BACA,8CACA,SACA,AACA,8BACA,sCACA,oBACA,GACA,CACA,AACA,8BACA,WACA,6BACA,kCACA,oBACA,GACA,uBACA,mCACA,sBACA,GACA,CACA,AACA,qBACA,+BACA,QACA,2DACA,iDACA,4CACA,AACA,AACA,MACA,WACA,0BACA,iBACA,0BACA,EACA,AACA,+CACA,2BACA,MACA,AACA,oCACA,6BACA,KACA,AACA,+BACA,iCACA,6BACA,KACA,AACA,cACA,AACA,wCACA,mBACA,mBACA,AACA,YACA,AACA,kCACA,SACA,OACA,AACA,mCACA,iBACA,AACA,IACA;AACA;iBACA,KACA,AACA,gBACA,AACA,qCACA,kCACA,mBACA,wBACA,IACA,qBACA,OACA,uBACA,wBACA,QACA,GACA,UACA,GACA,aACA,kBACA,AACA,QACA,GACA,AACA,oDACA,aACA,OACA,AACA,AACA,AACA,qDACA,oBACA,qCACA,kCACA,mBACA,kCACA,mCACA,QACA,0BACA,MACA,AACA,yBACA,6BACA,YACA,MACA,AACA,yCACA,wBACA,YACA,OACA,cACA,YACA,MACA,AACA,6CACA,QACA,2DACA,+BACA,+DACA,2BACA,qBACA,MACA,EACA,AACA,uCACA,SACA,AACA,EACA;eACA,AACA,UACA;AACA;WACA,wBACA,AACA,uDACA;UACA,+BACA,cACA,sBACA,4BACA,2DACA,oEACA,AACA,iBACA;qBACA,6BACA,yBACA,AACA,QACA;AACA;AACA;AACA;AACA;AACA;cACA,AACA,yKACA,AACA,iNACA,4KACA,AACA,kNACA,2BACA,AACA,kCACA,0CACA,MACA,WACA,KACA,IACA,AACA,qBACA,4CACA,kBACA,AACA,yBACA,2DACA,GACA,AACA,0BACA,qBACA,GACA,AACA,OACA,uBAEA;qBACA;SACA;gBACA;cACA;cACA;qBACA;YACA;mBACA;gBACA;uBACA;qBACA;YACA;mBACA;kBACA;UACA;iBACA;mBACA;cACA;mBACA;qBACA;aACA;mBACA;WACA;gBACA;0BACA;iBACA;wBACA;wBACA;0BACA;0BACA;0BACA;cACA;wBACA;WACA;iBACA,AACA,AACA;AAtCA,mBAuCA,OACA,SACA,SACA,WACA,WACA,AACA,AACA,kBACA,OACA,SACA,SACA,WACA,WACA,YACA,aACA,YACA,aACA,YACA,aACA,WACA,aACA,UACA,aACA,YACA,aACA,WACA,aACA,YACA,aACA,WACA,aACA,aACA,YACA,aACA,aACA,aACA,WACA,YACA,aACA,YACA,aACA,WACA,aACA,aACA,YACA,YACA,aACA,YACA,aACA,WACA,aACA,aACA,YACA,aACA,UACA,WACA,aACA,YACA,aACA,WACA,aACA,aACA,YACA,aACA,aACA,aACA,WACA,YACA,YACA,aACA,YACA,aACA,WACA,aACA,WACA,WACA,UACA,WACA,YACA,WACA,YACA,aACA,UACA,aACA,WACA,UACA,WACA,YACA,UACA,UACA,WACA,UACA,aACA,WACA,WACA,WACA,YACA,YACA,WACA,aACA,YACA,WACA,YACA,aACA,aACA,aACA,aACA,YACA,aACA,YACA,YACA,aACA,aACA,WACA,WACA,WACA,YACA,YACA,WACA,YACA,YACA,cACA,WACA,UACA,YACA,WACA,YACA,aACA,SACA,SACA,SACA,cACA,SACA,UACA,YACA,UACA,cACA,UACA,UACA,UACA,YACA,YACA,WACA,YACA,YACA,cACA,WACA,UACA,YACA,WACA,YACA,aACA,SACA,SACA,SACA,cACA,SACA,UACA,aACA,YACA,UACA,cACA,UACA,UACA,UACA,YACA,eACA,YACA,UACA,WACA,YACA,cACA,YACA,WACA,WACA,WACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cACA,cACA,YACA,cACA,cACA,aACA,aACA,cACA,cACA,aACA,aACA,YACA,aACA,cACA,YACA,aACA,eACA,YACA,YACA,YACA,YACA,YACA,aACA,YACA,YACA,YACA,YACA,YACA,cACA,YACA,aACA,aACA,aACA,YACA,aACA,UACA,YACA,WACA,aACA,cACA,aACA,YACA,aACA,WACA,WACA,UACA,WACA,WACA,WACA,cACA,WACA,YACA,aACA,UACA,aACA,UACA,UACA,WACA,WACA,YACA,YACA,YACA,aACA,cACA,YACA,YACA,aACA,aACA,cACA,cACA,YACA,YACA,WACA,cACA,aACA,cACA,aACA,AACA,AACA,qDACA,oBACA,sDACA,oBACA,EACA,AACA,0BACA,yBACA,EACA,AACA,CACA;MACA,AACA,sCACA,8BACA,MACA,AACA,wCACA,8BACA,6BACA,MACA,AACA,2BACA,4CACA,yDACA,0BACA,GACA,AACA,4BACA,uBACA,iDACA,WACA,MACA,AACA,0BACA,WACA,gCACA,uBACA,yBACA,yBACA,EACA,cACA,iBACA,yBACA,UACA,QACA,AACA,sBACA,yDACA,yCACA,wBACA,wCACA,cACA,kBACA,WACA,iBACA,iBACA,iBACA,oDACA,WACA,QACA,AACA,oCACA,yGACA,iBACA,0BACA,kBACA,cACA,SACA,CACA,AACA,wBACA,wDACA,2DACA,0DACA,AACA,IACA;oBACA,eACA,GACA,0BACA,mCACA,KACA,AACA,+BACA,oBACA,2CACA,yBACA,sBACA,AACA,GACA;6BACA,QACA,cACA,GACA,AACA,4BACA,OACA,AACA,wBACA,mBACA,4CACA,aACA,AACA,oDACA,2DACA,sCACA,GACA,OACA,AACA,qBACA,gCACA,oBACA,oBACA,AACA,0BACA,CACA;qDACA,YACA,qDACA,uBACA,4EACA,YACA,yDACA,uBACA,kBACA,gBACA,kDACA,6BACA,6BACA,IACA,sBACA,YACA,CACA,AACA,CACA;AACA;AACA;iDACA,mBACA,CACA;gDACA,0CACA,aACA,wBACA,AACA,cACA,AACA,sCACA,GACA,AACA,qCACA,qBACA,CACA;eACA,AACA,IACA;oBACA,uBACA,oBACA,iCACA,AACA,2BACA,mBACA,mDACA,qBACA,OACA,AACA,+CACA,qCACA,wCACA,mCACA,QACA,aACA,AACA,KACA,GACA,AACA,CACA;AACA;AACA;+CACA,0BACA,eACA,gBACA,2BACA,0BACA,0BACA,6CACA,SACA,MACA,WACA,aACA,aACA,UACA,AACA,AACA,KACA;AACA;kCACA,mBACA,4CACA,eACA,OACA,6BACA,gCACA,GACA,0BACA,EACA,AACA,4BACA,AACA,YACA;eACA,6BACA,wCACA,qBACA,CACA;6DACA,gBACA,YACA,gBACA,KACA,YACA,oBACA,GACA,sCACA,4BACA,EACA,AACA,0BACA,oBACA,mBACA,2CACA,qBACA,KACA,OACA,AACA,kBACA,8BACA,oCACA,mBACA,kBACA,OACA,OACA,mCACA,sBACA,GACA,AACA,CACA;AACA;kBACA,0BACA,0BACA,wBACA,aACA,aACA,kBACA,uBACA,2BACA,CACA;kBACA,6BACA,CACA,MACA,CACA,AACA,CACA;OACA,oDACA,8CACA,mBACA,KACA,OACA,gBACA,0BACA,mBACA,gCACA,gCACA,yCACA,AACA,eACA,uBACA,aACA,GACA,AACA,+CACA,+CACA,CACA;uCACA,cACA,oDACA,IACA,GACA,CACA,4BACA,yDACA,4BACA,iBACA,KACA,AACA,6BACA,mBACA,2BACA,iBACA,gBACA,AACA,8BACA,wBACA,QACA,8BACA,wBACA,UACA,QACA,mCACA,2BACA,qBACA,uBACA,wBACA,SACA,qBACA,uBACA,wBACA,IACA,CACA,6BACA,qCACA,mBACA,oDACA,IACA,AACA,6BACA,KACA,AACA,mCACA,YACA,gBACA,yCACA,oCACA,CACA;AACA;kBACA,oDACA,iBACA,KACA,CACA,AACA,yBACA,YACA,qBACA,qBACA,GACA,OACA,QACA,AACA,sBACA,YACA,mBACA,YACA,MACA,kBACA,cACA,OACA,wDACA,iBACA,aACA,QACA,uEACA,aACA,WACA,OACA,QACA,cACA,gBACA,cACA,QACA,CACA,MACA,yBACA,QACA,uBACA,QACA,qBACA,OACA,QACA,SACA,CACA,eACA,cACA,qBACA,4BACA,CACA,SACA,wBACA,GACA,AACA,gBACA,wCACA,GACA,AACA,gBACA,2CACA,cACA,4BACA,gBACA,gCACA,QACA,uBACA,QACA,qBACA,OACA,QACA,SACA,CACA,CACA,2CACA,GACA,kEACA,gBACA,yCACA,cACA,4DACA,mBACA,mCACA,YACA,gBACA,iBACA,kBACA,EACA,CACA,CACA,AACA,gBACA,OACA;WACA,gBACA,mBACA,gBACA,EACA,CACA,AACA,gBACA,yBACA,gBACA,eACA,oBACA,iBACA,OACA,CACA,AACA,gBACA,UACA;WACA,gBACA,0BACA,6BACA,CACA;yBACA,gBACA,wBACA,mBACA,gBACA,yBACA,oBACA,gBACA,kDACA,QACA,mBACA,eACA;6CACA,gCACA,4CACA,EACA,sBACA,iBACA,KACA,CACA,AACA,gBACA,uDACA,iBACA,8BACA,sBACA,gBACA,qCACA,gBACA,uBACA,mBACA,wDACA,gBACA,0CACA,YACA,OACA,+CACA,gBACA,mBACA,oBACA,4CACA,0BACA,kBACA,0BACA,gBACA,kCACA,OACA,kBACA,EACA,CACA,AACA,gBACA,iCACA,gBACA,mBACA,GACA,kBACA,EACA,AACA,gBACA,mBACA,gBACA,wCACA,6BACA;KACA,iBACA,aACA,gBACA,iCACA,gBACA,wBACA,EACA,CACA,CACA,AACA,gBACA,+BACA,kBACA,UACA,kBACA,QACA,CACA,AACA,gBACA,4BACA,aACA,gBACA,6BACA,gBACA,4BACA,EACA,CACA,AACA,gBACA,mCACA,kBACA,gBACA,qBACA,GACA,CACA,AACA,gBACA,mBACA,gBACA,oBACA,iBACA,EACA,CACA,AACA,gBACA,0BACA,gBACA,wDACA,2BACA,oCACA,SACA,gBACA,QACA,qBACA,iBACA,QACA,CACA,AACA,gBACA,yBACA,mBACA,qBACA;AACA;qBACA,iBACA,aACA,gBACA,KACA,CACA,AACA,gBACA,iBACA,gBACA,kBACA,eACA,EACA,CACA,AACA,gBACA,wBACA,gBACA,oBACA,mBACA,iBACA,MACA,CACA,AACA,gBACA,0BACA,iBACA,kCACA,OACA,iBACA,6BACA,kBACA,sBACA,eACA,SACA,oBACA,iBACA,MACA,CACA,AACA,gBACA,qBACA,gBACA,2CACA,gBACA,oBACA,sBACA,EACA,CACA,AACA,gBACA,yDACA,CACA,0BACA,gBACA,sBACA,sBACA,EACA,CACA,AACA,gBACA,4BACA,2CACA,aACA,yBACA,AACA,uDACA,kBACA,UACA,0BACA,iBACA,eACA,CACA,AACA,gBACA,2BACA,iBACA,OACA,QACA,mBACA,SACA,yBACA,gBACA,oBACA,sBACA,mBACA,iCACA,gBACA,OACA,CACA,CACA,AACA,gBACA,0BACA,gBACA,eACA,aACA,mBACA,iEACA,OACA,CACA,AACA,gBACA,OACA;oBACA,CACA,0BACA,SACA,yBACA,gBACA,wCACA,mBACA,qBACA,kBACA,iBACA,mBACA,0BACA,CACA,AACA,gBACA,uBACA,gBACA,8BACA,mBACA,qDACA,kBACA,gBACA,kCACA,gBACA,8CACA,oBACA,OACA,mBACA,0BACA,CACA,AACA,gBACA,iCACA,gBACA,uCACA,CACA,cACA,mBACA,oEACA,sBACA,iCACA,aACA,iBACA,AACA,uBACA,cACA,SACA,iCACA,mBACA,iBACA,iBACA,mBACA,yCACA,OACA,CACA,CACA,AACA,gBACA,iCACA,CACA,8BACA,UACA,iBACA,yBACA,mBACA,2CACA,yCACA,EACA,CACA,AACA,gBACA,oCACA,YACA,gBACA,2BACA,qBACA,EACA,CACA,SACA,QACA,iBACA,kBACA,oBACA,AACA,gBACA,wCACA,gBACA,wBACA,SACA,yBACA,gBACA,wCACA,mBACA,sDACA,qBACA,kBACA,iBACA,mBACA,0BACA,CACA,AACA,gBACA,0CACA,YACA,gBACA,2BACA,qBACA,EACA,CACA,SACA,QACA,mBACA,SACA,aACA,gBACA,OACA,CACA,AACA,gBACA,6BACA,qBACA,CACA,mCACA,kBACA,qBACA,iBACA,YACA,mBACA,mCACA,MACA,gBACA,EACA,kBACA,UACA,gCACA,iBACA,yBACA,4BACA,uBACA,kBACA,YACA,sBACA,mBACA,kCACA,gBACA,oBACA,CACA,AACA,gBACA,wCACA,CACA,SACA,YACA,UACA,aACA,mBACA,qCACA,CACA,AACA,gBACA,mBACA,6BACA,yBACA,gBACA,sBACA,cACA,0BACA,YACA,WACA,AACA,aACA,oCACA,2BACA,cACA,AACA,aACA,oCACA,6BACA,cACA,AACA,AACA,kBACA,6BACA,sBACA,gBACA,uEACA,gBACA,OACA,mBACA,sEACA,gBACA,gBACA,YACA,AACA,CACA,AACA,SACA,wDACA,AACA,SACA,AACA;+CACA,mBACA,QACA,OACA,QACA,AACA,CACA,+EACA,YACA,+BACA,4BACA,gDACA,cACA,qBACA,MACA,kBACA,yBACA,uBACA,kBACA,OACA,GACA,YACA,wBACA,gCACA,iCAEA;aACA;oBACA;4BACA;AAJA,CAKA,yCACA,WACA,uBACA;eACA,iBACA;AACA;WACA,sCACA,oCACA,oCACA,cACA,gDACA,uCACA,4BACA,EACA,CACA,OACA,QACA,2BACA,8CACA,OACA,2BACA,cACA,AACA,YACA,sBACA,cACA,CACA,KACA,6CACA,sICxiDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AACA,AACA;AACA,kBACA,yBACA,sCACA,YACA,GACA,SACA,IACA,EACA,gBACA,OACA,YACA,WACA,UACA,UACA,QACA,AACA,GACA,qBACA,SACA,UACA,AACA,+DACA,UACA,AACA,6DACA,UACA,AACA,2DACA,UACA,AACA,AACA,6CACA,iCACA,UACA,QACA,CACA,mCACA,oBACA,MACA,CACA,oCACA,oBACA,MACA,CACA,oCACA,4BACA,cACA,CACA,mCACA,yDACA,AACA,AACA,EACA;AACA;YACA,AACA,4BACA,4CACA,AACA,oBACA,qCACA,MACA,AACA,oCACA,sEAEA,wEACA,6BACA;OACA,CACA,OACA,uBACA,QACA,AACA,AACA,SACA,AACA,AACA,MAbA,EAcA,AACA,iCACA,AACA,qCACA,AACA,CACA;8DACA,AACA,aACA;YACA,iFACA,AACA,8BACA,OACA,AACA,CACA;AACA;yBACA,AACA,QACA;gBACA,gCACA,8BACA,AACA,GACA;qCACA,sDACA,kCACA,4BACA,kCACA,MACA,AACA,EACA;gBACA,yBACA,yDACA,4BACA,IACA,CACA,AACA,CACA;aACA,WACA,sCACA,SACA,UACA,qCACA,QACA,UACA,qCACA,QACA,UACA,mCACA,MACA,UACA,YACA,6CACA,4BACA,eACA,4BACA,MACA,CACA,MACA,qDACA,AACA,AACA,QACA;gBACA,sIACA,UACA,mBACA,GACA,AACA,IACA,2DACA,CACA,AACA;mCACA,kCACA,YACA,CACA;mDACA,sBACA,UACA,AACA,2EACA,mBACA,OACA,AACA,CACA,AACA,CACA;gCACA,iDACA,AACA,oDACA,kBACA,UACA,AACA,oCACA,GACA,AACA,CACA;aACA,2BACA,iCACA,OACA,AACA,CACA;gDACA,sBACA,SACA,AACA,+CACA,qBACA,QACA,CACA,AACA,CACA,AACA;+BACA,mGACA,IACA,mCACA,8DACA,mCACA,mCACA,yBACA,GACA,CACA,AACA,mBACA,AACA,uCACA,CACA;6CACA,mBACA,qDACA,mBACA,cACA,AACA,CACA;6BACA,+BACA,eACA,UACA,AACA,kDACA,CACA;AACA,SACA,AACA,+BACA,+BACA,4EACA,iBACA,oBACA,yCACA,wCACA,6BACA,yBACA,4EACA,cACA,aACA,OACA,QACA,CACA,yCACA,cACA,aACA,0DACA,QACA,CACA,AACA,CACA;6CACA,mBACA,sDACA,AACA;iBACA,GACA;AACA,CACA,AACA,8BACA,CACA;AACA,AACA;GACA,8CACA,sCACA;oBACA;mBACA,+EACA,AACA,0BACA,mBACA,2CACA,mBACA,YACA,mBACA,KACA,CACA,AACA,wBACA,CACA;oBACA,iDACA,sBACA,GACA;8BACA,0CACA,sBACA,KACA,CACA,EACA;2CACA,yDACA,GACA,AACA,CACA;AACA;iDACA;YACA,eACA,yBACA,AACA,gCACA,eACA,CACA,kEACA,uBACA,iBACA,wBACA,GACA,CACA,qDACA,0CACA,uBACA,GACA,AACA,iDACA,4BACA,UACA,AACA,OACA,MACA,EACA,yDACA,UACA,AACA,sBACA,6CACA,mBACA,GACA,AACA,eACA,4BACA,MACA,AACA,iBACA,AACA,6BACA,QACA,EACA,uDACA,0CACA,OACA,MACA,AACA,kCACA,uBACA,SACA,MACA,AACA,yCACA,AACA,wBACA,iDACA,iDACA,OACA,EACA,MACA,CACA,CACA,AACA,oCACA,SACA,MACA,kDAEA,AACA,qCACA,uCACA,AACA,iCACA,YACA,gCACA,wCACA,yBACA,cACA,CACA,AACA,CACA;0BACA,4CACA,yBACA,MACA,AACA,OACA,MACA,CArBA,CAsBA,AACA,qBACA,AACA,oBACA,mBACA,oBACA,MACA,kBACA,GACA,CACA,mBACA,AACA,oBACA,YACA,GACA,AACA,2BACA,sBACA,GACA,AACA,yBACA,0OACA,8BACA,GACA,sMACA,MACA,AACA,mCACA,mPACA,kCACA,GACA,6MACA,MACA,AACA,+BACA,mBACA,GACA,AACA,sBACA,wBACA,GACA,AACA,4BACA,eACA,KACA,AACA,sBACA,eACA,KACA,AACA,4BACA,4BACA,OACA,OACA,AACA,sPACA,uCACA,OACA,OACA,CACA,AACA,6MACA,MACA,AACA,8BACA,4CACA,IACA,AACA,GACA,4CACA,AACA,sBACA,AACA,+BACA,iDACA,uBACA,AACA,+BACA,2FACA,MACA,AACA,4BACA,qBACA,8BACA,EACA,qCACA,2CACA,SACA,AACA,QACA,AACA,uCACA,4CACA,8DACA,OACA,GACA,EACA,IACA;AACA,UACA,2CACA,qBACA,gCACA,kBACA,4BACA,YACA,UACA,UACA,CACA,EACA,0EACA,sCACA,OACA,uDACA,oBACA,aACA,EACA,iEACA,CACA;AACA;qFACA,SACA,EACA,iFACA,CACA;4FACA,EACA,EACA,iDACA,6DACA,mCACA,IACA,6BACA,GACA,AACA,GACA;AACA,yDACA,wBACA,GACA;mCACA,OACA,6CACA,OACA,SACA,sCACA,OACA,SACA,OACA,IACA,CACA,CACA,CACA,6DACA,AACA,gBACA,AACA,uBACA,iBACA,OACA,eACA,mCACA,cACA,CACA,iFACA,gDACA,4BACA,wGACA,UACA,OACA,GACA,CACA,2DACA,OACA,uDACA,+CACA,4BACA,kGACA,UACA,OACA,GACA,SACA,GACA,CACA,aACA,eACA,MACA,mBACA,iDACA,AACA,mBACA,AACA,4IACA,AACA,OACA,iDACA,0DACA,oDACA,kBACA,yBACA,OACA,mBACA,AACA,6BACA,AACA,OACA,AACA;gBACA,AACA,iGACA;6BACA,wEACA,sGACA,AACA,mGACA,gCACA,+CACA,gBACA,CACA;kEACA,MACA,cACA,AACA;yBACA,AACA,GACA;iBACA,uGACA,mFACA,kDACA,uDACA;KACA,mCACA,yBACA,wBACA,MACA,AACA,CACA;QACA,4BACA,kCACA,sCACA,AACA,AACA,MACA,CACA,gEAGA,oCACA,CACA;oCACA,AACA,+BACA;AACA;AACA;oCACA,AACA,iBACA,8BACA,mBACA,AACA,EACA,AACA,AACA,AACA,AACA;;;;yCACA,2BACA,IACA,IACA,AACA,qCACA,AACA,mEACA,AACA,2CACA,IACA,AACA,EACA,0DACA,+DACA,GACA,AACA,EACA,kEACA,4BACA,iEACA,oDACA;4BACA,mEACA;AACA,AACA,AACA,CA/CA,AACA,CA+CA,2CACA,wDACA,EACA,AACA,EACA,iDACA,aACA,gBACA,AACA,EACA,0DACA,WACA,qDACA,iBACA,qBACA,oDACA,kCACA,6DACA,6CACA,UACA,yGACA,aACA,gBACA,AACA,8DACA,UACA,+BACA,OACA,AACA,UACA,oCACA,IACA,wBACA,WACA,gEACA,kCACA,yDACA,yCACA,yBACA,IACA,KACA,OACA,AACA,mCACA,CACA;AACA;AACA;UACA,2CACA,wBACA,MACA,4DACA,iCACA,MACA,aACA,kCACA,oBACA,CACA,AACA,WACA,kBACA,AACA,EACA,yEACA,AACA,iFACA,AACA,8DACA,AACA,2EACA,AACA,uDACA,AACA,4DACA,AACA,qBACA;AACA;uFACA,AACA,8DACA,8DACA,4BACA,AACA,2CACA,gEACA,8BACA,AACA,4DACA,6EACA,wEACA,mEACA,AACA,yDACA,AACA,MACA;oCACA,AACA,8EACA,8BACA,AACA,mGACA,AACA,IACA;+BACA,AACA,sCACA,+EACA,sDACA,UACA,CACA,AACA,IACA,6BACA,kCACA,iBACA,8EACA,EACA,OACA,iBACA,oBACA,YACA,EACA,CACA;kEACA,GACA,CACA,AACA,CACA;AACA;sDACA,AACA,0DACA,AACA,AACA,oGACA,kCACA,AACA,mGACA,AACA,iDACA,AACA,kDACA,0EACA,2DACA,QACA,CACA,CACA,AACA,qCACA,AACA,+GACA,gCACA,AACA,2GACA,AACA,qCACA,AACA,wCACA,sFACA,wDACA,WACA,CACA,CACA,AACA,qCACA,yFACA,AACA,gBACA;+BACA,6CACA,AACA,AACA,kFACA,AACA,gBACA;sCACA,+EACA,uDACA,yBACA,AACA,CACA,AACA,CACA;MACA,qBACA,AACA,EACA,+EACA,IACA,4DACA;SACA,SACA,mBACA,uBACA,sBACA,gBACA,AACA,sEACA,0BACA,KACA,CACA,AACA,EACA,sEACA,gCACA,0CACA,AACA,MACA;AACA;AACA;AACA;+BACA,uEACA,+BACA,4BACA,iBACA,AACA,YACA;AACA;AACA;mCACA,wEACA,sBACA,kCACA,uBACA,wBACA,8CACA,uEACA,4BACA,SACA,CACA,CACA,CACA,AACA,iDACA,8CACA,oBACA,AACA,EACA,wEACA,AACA,OACA,6BACA,uCACA,oCACA,sBACA,AACA,AACA,IACA;+BACA,uEACA,+BACA,+FACA,2EACA,GACA,CACA,AACA,CACA;GACA,GACA,8CACA,CACA,0CACA,GACA,AACA,CACA;oDACA,AACA,kDACA,qBACA,AACA,EACA,mFACA,AACA,CACA;oCACA,AACA,GACA;wCACA,uEACA,iBACA,8CACA,CACA;AACA;oBACA,AACA,yBACA,QACA,CACA;+BACA,GACA,CACA,CACA,AACA,EACA,4EACA,AACA,kCACA,AACA,2CACA,+BACA,4DACA,sDACA,KACA,WACA,qBACA,4BACA,GACA,MACA,qBACA,AACA,wCACA,gCACA,oFACA,gDACA,0BACA,sHACA,0BACA,GACA,CACA,AACA,uBACA,GACA,AACA,EACA,2EACA,wCACA,gCACA,YACA,oCACA,AACA,MACA;AACA;mCACA,yDACA,2BACA,0BACA,6CACA,4EACA,gCACA,SACA,CACA,AACA,yBACA,OACA,AACA,AACA,AACA,0FACA,AACA,+FACA,wDACA,AACA,2CACA,AACA,qFACA,kEACA,4DACA,oCACA,QACA,CACA,AACA,uEACA,AACA,qFACA,AACA,kCACA,4BACA,AACA,EACA,+GACA,8CACA,AACA,iDACA,gDACA,sCACA,AACA,oCACA,AACA,gFACA,gFACA,0FACA,+FACA,AACA,0EACA,kCACA,mGACA,AACA,8CACA,gDACA,sCACA,AACA,oCACA,AACA,gFACA,gFACA,0FACA,+FACA,AACA,4BACA,OACA,4BACA,AACA,EACA,4FACA,8CACA,qDACA,qCACA,AACA,yDACA,AACA,wDACA,2CACA,uBACA,yBACA,6BACA,gCACA,mCACA,yCACA,KACA,CACA,CACA,AACA,kDACA,yDACA,8BACA,AACA,EACA,oDACA,mCACA,IACA,AACA,EACA,oEACA,AACA,qEACA,AACA,yDACA,AACA,+EACA,AACA,oBACA,cACA,AACA,AACA,EACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;;;;;;;MACA,AACA;AACA,kEACA,gDACA,sDACA,iEACA,6DACA,sEACA,iFACA,iFACA,kFACA,+EACA,yEACA,cACA,AACA,EACA,sEACA,iDACA,uDACA,kEACA,8DACA,uEACA,kFACA,kFACA,mFACA,gFACA,0EACA,cACA,AACA,EACA,sEACA,YACA,4BACA,AACA,sBACA,oEACA,wCACA,KACA,CACA,AACA,iBACA,8EACA,wBACA,WACA,CACA,CACA,AACA,gBACA,AACA,2BACA,QACA,AACA,AACA,EACA,cACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;;;;;;;;wCACA,qCACA,AACA,AACA,gFACA,MACA,wBACA,yBACA,4BACA,AACA,uBACA,AACA,gDACA,OACA,wDACA,oEACA,KACA,YACA,GACA,AACA,IACA,AACA,AACA,AACA;;;GACA,+BACA,YACA,AACA,qBACA,AACA,GACA;AACA;0CACA,mDACA,eACA,AACA,oEACA,AACA,6CACA,AACA,4CACA;AACA,CACA,iBACA,cACA,aACA,YACA,KACA,CACA,AACA,AACA;;GACA,eACA,CACA;AACA;AACA,2CACA,WACA,cACA,4DACA,AACA,IACA,2BACA,mEACA,8CACA,cACA,UACA,gDACA,cACA,kBACA,iBACA,0DACA,CACA,MACA,wBACA,AACA,AACA,0FACA,AACA,qCACA;iBACA,AACA,0BACA,AACA,+BACA,kBACA,mBACA,EACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;;;;GACA,uDACA,yIACA,iBACA,qDACA,AACA,qBACA,iBACA,qCACA,AACA,2BACA,IACA,IACA,AACA,kBACA,AACA,cACA,gEACA,kBACA,aACA,QACA,GACA,EACA,iDACA,mBACA,6BACA,GACA,CACA;AACA;AACA;AACA,qBACA,8MACA;AACA,sCACA,4BACA,4CACA,OACA,mCACA,CACA;+CACA,iBACA,kDACA,6BACA,yFACA,SACA,CACA,AACA,2GACA,mDACA,kGACA,SACA,AACA,4BACA,SACA,AACA,0CACA,AACA,oDACA,AACA,wMACA,AACA,sDACA,UACA,AACA,mBACA,yCACA,MACA,AACA,+CACA,AACA,SACA;GACA,mEACA,QACA,mDACA,+BACA,gBACA,QACA,kBACA,AACA,kBACA,AACA,+HACA,AACA,4CACA,QACA,gCACA,wCACA,wDACA,SACA,AACA,sDACA,AACA,4IACA,4GACA,uCACA,SACA,CACA,AACA,GACA,eACA,CACA,8BACA,gBACA,yBACA,WACA,uBACA,SACA,0BACA,YACA,8BACA,gBACA,0CACA,4BACA,+BACA,AACA,6DCv6CA,WACA,uHACA,AACA,mZACA,AACA,qCACA,KACA,YACA,eACA,sBACA,SACA,YACA,cACA,YACA,iBACA,eACA,gBACA,iBACA,WACA,WACA,aACA,gBACA,iBACA,iBACA,kBACA,YACA,iBACA,kBACA,kBACA,YACA,gBACA,gBACA,iBACA,YACA,aACA,mBACA,mBACA,aACA,WACA,eACA,AACA,AACA,iCACA,AACA,oBACA,AACA,kBACA,AACA,2CACA,8BACA,eACA,AACA,0CACA,SACA,sFACA,kBACA,KACA,AACA,kDACA,gDACA,wCACA,kGACA,cACA,AACA,8EACA,gBACA,mEACA,aACA,kBACA,AACA,wBACA,uBACA,iBACA,AACA,SACA,iDC3EA,oBACA,WACA,yCACA,mCACA,SACA,SACA,gCACA,YACA,KACA,CACA,EACA,mCACA,iCACA,qCACA,YACA,IACA,CACA,EACA,yBACA,IACA,8BACA,mCACA,gCACA,UACA,gBACA,mBACA,WACA,AACA,QACA,WACA,gCACA,WACA,MACA,EACA,CACA,IACA,qEACA,mDACA,wEACA,2EACA,8DACA,YACA,kBACA,AACA,mCACA,wCACA,wBACA,AACA,iCACA,AACA,6CACA,YACA,eACA,AACA,AACA,oBACA,QACA,kBACA,GACA,mDACA,gDACA,gBACA,KACA,iDAEA,kCACA,qBACA,+BACA,AACA,yBACA,iDACA,AACA,kCACA,CACA;qBACA,kBACA,KACA,AACA,2CACA,kBACA,KACA,gCACA,iBACA,kBACA,KACA,CACA,AACA,2BACA,AACA,iCACA,AACA,4CACA,CACA;AACA;AACA;6CACA,kBACA,KACA,CACA,AACA,gCACA,sBACA,4BACA,MACA,CACA,SACA,KACA,CA3CA,6CA6CA,wBACA;AACA,CAHA,CAIA,kDACA,8BACA,mCACA,AACA,2CACA,kBACA,KACA,AACA,SACA,KACA,EACA,oDACA,0CACA,cACA,qDACA,IACA,EACA,GACA,mCACA,uBACA,MACA,EACA,4DACA,aACA,qFACA,2CACA,mBACA,6CACA,KACA,GACA,OACA,MACA,EACA,mCACA,0BACA,SACA,wDCpJA,CACA,eACA,QACA,gCACA,+BACA,kCACA,uBACA,GACA,QACA","file":"generated.js","sourceRoot":"","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","/**\n * Accept a scjson document as input, either from a file or via stdin.\n * Generate a JavaScript module as output.\n * This module should be customizable:\n * plain object literal if appropriate\n * simple self-invoking function (for use in scion-scxml)\n * UMD in probably all other cases. although we could make it CommonJS/AMD/etc.\n */\n\nvar to_js_identifier = require(\"text-to-js-identifier\");\n\n//TODO: optimization: if the scjson does not contain a datamodel or any actions, then just dump out the object literal as the module\n//TODO: we should also encode the document name. accept as command-line argument, or embed it in the scjson itself, maybe?\nvar printTrace = false;\n\nfunction generateFnName(actionType,action){\n return '$' + actionType + '_l' + action.$line + '_c' + action.$column;\n}\n\nvar FN_ARGS = '(_event)';\nvar SCRIPT_SRC_FN_PREFIX = 'script_src'\n\nvar stripNsPrefixRe = /^(?:{(?:[^}]*)})?(.*)$/;\nfunction stripAttrNsPrefix(attrName){\n var m = attrName.match(stripNsPrefixRe);\n return m[1];\n}\n\nfunction generateFnDeclaration(fnName,fnBody,action){\n if(printTrace) console.log('generateFnDeclaration',fnName,fnBody);\n\n return 'function ' + fnName + FN_ARGS + '{\\n' +\n fnBody + '\\n' +\n '};\\n' +\n fnName + '.tagname=\\'' + action.$type + '\\';\\n' +\n fnName + '.line=' + action.$line + ';\\n' +\n fnName + '.column=' + action.$column + ';\\n';\n}\n\nfunction generateFnCall(fnName){\n if(printTrace) console.log('generateFnCall',fnName);\n\n return fnName + '.apply(this, arguments)';\n}\n\nModuleBuilder.prototype.generateActionFunction = function(action) {\n if(printTrace) console.log('generateActionFunction',action);\n\n var fnName = generateFnName(action.$type,action);\n var fnBody = actionTags[action.$type] ? actionTags[action.$type](action, this) : actionTags['custom'](action, this);\n var fnDec = generateFnDeclaration(fnName,fnBody,action);\n\n this.fnDecAccumulator.push(fnDec);\n\n return fnName;\n}\n\nModuleBuilder.prototype.generateExpressionFunction = function(expressionType,exprObj){\n if(printTrace) console.log('generateExpressionFunction',expressionType,exprObj);\n\n var fnName = generateFnName(expressionType,exprObj);\n var fnBody = 'return ' + exprObj.expr + ';';\n var fnDec = generateFnDeclaration(fnName,fnBody,exprObj);\n\n this.fnDecAccumulator.push(fnDec);\n\n return fnName;\n}\n\nModuleBuilder.prototype.generateAttributeExpression = function(attrContainer,attrName){\n if(printTrace) console.log('generateAttributeExpression',attrContainer,attrName);\n\n return this.generateExpressionFunction(stripAttrNsPrefix(attrName), attrContainer[attrName]);\n}\n\nvar REFERENCE_MARKER = '__UNQUOTE__',\n REFERENCE_MARKER_RE = new RegExp('\"' + REFERENCE_MARKER + '(.*)' + REFERENCE_MARKER + '\"','g') ;\n\n//TODO: need to split this into two parts: one that declares the variables in the datamodel at the top of the module scope,\n//and another single function that inits the model needs to contain a reference to this init function,\n//and the interpreter must know about it. should be optional.\n//call it $scion_init_datamodel.\nfunction generateDatamodelDeclaration(datamodelAccumulator){\n if (!datamodelAccumulator.length) {\n return undefined;\n }\n\n return ('var ' + datamodelAccumulator.map(function(data){return data.id;}).join(\", \") + \";\");\n}\n\nvar SERIALIZE_DATAMODEL_FN_NAME = '$serializeDatamodel';\n\nfunction generateDatamodelSerializerFn(datamodelAccumulator){\n return 'function ' + SERIALIZE_DATAMODEL_FN_NAME + '(){\\n' +\n ' return {\\n' +\n datamodelAccumulator.map(function(data){return ' \"' + data.id + '\" : ' + data.id;}).join(',\\n') + '\\n' +\n ' };\\n' +\n '}';\n}\n\nvar DESERIALIZE_DATAMODEL_FN_NAME = '$deserializeDatamodel',\n DESERIALIZE_DATAMODEL_FN_ARG = '$serializedDatamodel';\n\nfunction generateDatamodelDeserializerFn(datamodelAccumulator){\n return 'function ' + DESERIALIZE_DATAMODEL_FN_NAME + '(' + DESERIALIZE_DATAMODEL_FN_ARG + '){\\n' +\n datamodelAccumulator.map(function(data){return ' ' + data.id + ' = ' + DESERIALIZE_DATAMODEL_FN_ARG + '[\"' + data.id + '\"];';}).join('\\n') + '\\n' +\n ' ' + EARLY_BINDING_DATAMODEL_GUARD + ' = true;\\n' + //set the guard condition to true\n '}';\n}\n\n\nvar EARLY_BINDING_DATAMODEL_FN_NAME = '$initEarlyBindingDatamodel';\nvar EARLY_BINDING_DATAMODEL_GUARD = '$scion_early_binding_datamodel_has_fired';\n\n//TODO: make this function more clever and accept the datamodel as an action\nfunction generateEarlyBindingDatamodelInitFn(builder){\n //this guard guarantees it will only fire once\n return 'var ' + EARLY_BINDING_DATAMODEL_GUARD + ' = false;\\n' +\n (builder.datamodelAccumulator.length ?\n 'function ' + EARLY_BINDING_DATAMODEL_FN_NAME + FN_ARGS + '{\\n' +\n ' if(!' + EARLY_BINDING_DATAMODEL_GUARD + '){\\n' +\n //invoke all datamodel expresions\n builder.datamodelAccumulator.\n filter(function(data){return data.expr;}).\n map(function(data){return ' ' + data.id + ' = ' + generateFnCall(builder.generateExpressionFunction('data',data.expr)) + ';\\n';}, builder).join('') +\n ' ' + EARLY_BINDING_DATAMODEL_GUARD + ' = true; ' + '\\n' +\n ' }\\n' +\n '}' : '');\n}\n\nfunction generateSmObjectLiteral(rootState){\n //pretty simple\n return JSON.stringify(rootState, undefined, 1).replace(REFERENCE_MARKER_RE,'$1');\n}\n\nfunction dumpFunctionDeclarations(fnDecAccumulator){\n //simple\n return fnDecAccumulator.join('\\n');\n}\n\nfunction dumpHeader(strict){\n var d = new Date();\n var strictStr = (strict ? \"'use strict';\\n\" : \"\");\n return strictStr + '//Generated on ' + d.toLocaleDateString() + ' ' + d.toLocaleTimeString() + ' by the SCION SCXML compiler';\n}\n\nfunction generateFactoryFunctionWrapper(o, name, options){\n var parts = [\n o.sendString,\n o.sendIdLocationString,\n o.earlyBindingFnDeclaration,\n o.datamodelDeserializerFnDeclaration,\n o.datamodelSerializerFnDeclaration,\n o.actionFunctionDeclarations,\n 'return ' + o.objectLiteralString + ';'\n ];\n\n var program;\n if (options.debug) {\n program = parts.join('\\n\\n').\n split('\\n').map(function(line){return ' ' + line;}).join('\\n')\n } else {\n program = parts.join('\\n');\n }\n\n return '(function (_x,_sessionid,_ioprocessors,In){\\n' +\n ' var _name = \\'' + name + '\\';' +\n //'console.log(_x,_sessionid,_name,_ioprocessors,In);\\n' +\n program +\n '})';\n}\n\nModuleBuilder.prototype.generateModule = function(){\n var rootState = this.rootState;\n var options = this.options;\n\n //TODO: enumerate these module types\n\n if(this.datamodelAccumulator.length){\n //generalize him as an entry action on the root state\n rootState.onEntry = rootState.onEntry || [];\n //make sure that datamodel initialization fn comes before all other entry actions\n rootState.onEntry = [markAsReference(EARLY_BINDING_DATAMODEL_FN_NAME)].concat(rootState.onEntry);\n }\n\n //attach datamodel serialization functions\n rootState[DESERIALIZE_DATAMODEL_FN_NAME] = markAsReference(DESERIALIZE_DATAMODEL_FN_NAME);\n rootState[SERIALIZE_DATAMODEL_FN_NAME] = markAsReference(SERIALIZE_DATAMODEL_FN_NAME);\n\n //console.log('rootState.rootScripts',rootState.rootScripts);\n\n //TODO: support other module formats (AMD, UMD, module pattern)\n var o = {\n headerString : dumpHeader(options.strict),\n sendString : (this.documentHasSendAction ? getDelayInMs.toString() : ''),\n sendIdLocationString : (this.documentHasSendActionWithIdlocationAttribute ? generateIdlocationGenerator(this.sendIdAccumulator) : ''),\n earlyBindingFnDeclaration : generateEarlyBindingDatamodelInitFn(this),\n datamodelDeserializerFnDeclaration : generateDatamodelDeserializerFn(this.datamodelAccumulator),\n datamodelSerializerFnDeclaration : generateDatamodelSerializerFn(this.datamodelAccumulator),\n actionFunctionDeclarations : dumpFunctionDeclarations(this.fnDecAccumulator)\n };\n\n delete rootState.rootScripts; //this doesn't need to be in there\n\n o.objectLiteralString = generateSmObjectLiteral(rootState);\n\n var s =\n o.headerString + '\\n' +\n generateFactoryFunctionWrapper(o, rootState.name, options);\n\n return s;\n}\n\nfunction markAsReference(fnName){\n return REFERENCE_MARKER + fnName + REFERENCE_MARKER;\n}\n\nModuleBuilder.prototype.replaceActions = function(actionContainer,actionPropertyName){\n if(actionContainer[actionPropertyName]){\n var actions = Array.isArray(actionContainer[actionPropertyName]) ? actionContainer[actionPropertyName] : [actionContainer[actionPropertyName]] ;\n\n actionContainer[actionPropertyName] = actions.map(this.generateActionFunction, this).map(markAsReference);\n\n if(actionContainer[actionPropertyName].length === 1){\n actionContainer[actionPropertyName] = actionContainer[actionPropertyName][0];\n }\n }\n}\n\nModuleBuilder.prototype.visitState = function(){\n var genValue = this.stateGen.next();\n if (genValue.done) {\n this._finish();\n return;\n }\n\n var state = genValue.value;\n //accumulate datamodels\n if (state.datamodel) {\n this.datamodelAccumulator.push.apply(this.datamodelAccumulator,state.datamodel);\n }\n\n if(state.onExit) this.replaceActions(state,'onExit');\n if(state.onEntry) this.replaceActions(state,'onEntry');\n\n if(state.transitions) {\n for (var i = 0, len = state.transitions.length; i < len; i++) {\n var transition = state.transitions[i];\n this.replaceActions(transition,'onTransition');\n if(transition.cond){\n transition.cond = markAsReference(this.generateAttributeExpression(transition,'cond'));\n }\n }\n }\n\n //clean up as we go\n delete state.datamodel;\n\n setImmediate(function(self) {\n self.visitState();\n }, this);\n}\n\n/**\n * The uncooked SCION module\n * @param {string} [name] The name of the module derived from the scxml root element's name attribute\n * @param {string} datamodel The raw datamodel declarations\n * @param {Array<ScriptNode>} rootScripts A collection of 0 or more script nodes\n * Each node contains a src property which references an external js resource\n * or a content property which references a string containing the uncooked js\n * @param {string} scxmlModule A massive string containing the generated scxml program\n * less the parts enumerated above\n */\nfunction SCJsonRawModule(name, datamodel, rootScripts, scxmlModule) {\n this.name = name;\n this.datamodel = datamodel;\n this.rootScripts = rootScripts;\n this.module = scxmlModule;\n}\n\nfunction* genStates(state) {\n yield (state);\n\n if (state.states) {\n for (var j = 0, len = state.states.length; j < len; j++) {\n yield* genStates(state.states[j]);\n }\n }\n}\n\nfunction ModuleBuilder(docUrl, rootState, options) {\n this.docUrl = docUrl;\n this.rootState = rootState;\n if (!rootState.rootScripts) {\n rootState.rootScripts = [];\n }\n\n this.externalActionScripts = new Set();\n this.options = options;\n this.datamodelAccumulator = [];\n this.fnDecAccumulator = [];\n this.sendIdAccumulator = [];\n this.documentHasSendAction = false;\n this.documentHasSendActionWithIdlocationAttribute = false;\n this.resolve = undefined;\n this.reject = undefined;\n this.stateGen = genStates(this.rootState);\n}\n\nModuleBuilder.prototype.build = function() {\n var self = this;\n return new Promise(function(resolve, reject) {\n self.resolve = resolve;\n self.reject = reject;\n self.visitState();\n });\n}\n\nModuleBuilder.prototype._finish = function() {\n // grab the root scripts before generateDatamodelDeclaration hackily deletes them\n var rootScripts = this.rootState.rootScripts;\n var dataModel = generateDatamodelDeclaration(this.datamodelAccumulator);\n var scxmlModule = this.generateModule();\n\n var jsModule = new SCJsonRawModule(\n this.rootState.name,\n dataModel,\n rootScripts,\n scxmlModule\n );\n\n this.resolve(jsModule);\n}\n\n\nfunction startTraversal(docUrl, rootState, options){\n if (!options) {\n options = {};\n }\n\n var moduleBuilder = new ModuleBuilder(docUrl, rootState, options);\n return moduleBuilder.build();\n}\n\nModuleBuilder.prototype.safelyAddVariableToDatamodelAccumulator = function(variableName,lineNum,colNum){\n if(!this.datamodelAccumulator.some(function(data){ return data.id === variableName;})){\n // add datamodel declaration to the accumulator\n this.datamodelAccumulator.push({\n $line : lineNum,\n $col : colNum,\n id : variableName\n });\n }\n}\n\n/**\n * Handles an externally referenced script within an executable content block\n * @param {object} action The script action\n * @return {string} A call to the named function that will be injected at model preparation time\n * @see document-string-to-model#prepare\n */\nModuleBuilder.prototype.handleExternalActionScript = function(action) {\n // base the generated function name on the fully-qualified url, NOT on its position in the file\n var fnName = to_js_identifier(action.src);\n // Only load the script once. It will be evaluated as many times as it is referenced.\n if (!this.externalActionScripts.has(action.src)) {\n this.externalActionScripts.add(action.src);\n action.$wrap = function(body) {\n return generateFnDeclaration(fnName, body, action);\n }\n\n this.rootState.rootScripts.push(action);\n }\n\n return generateFnCall(fnName);\n}\n\nfunction getVariableNameForShallowCopy (builder) {\n //Assign a number higher than current total number of variables in accumulator\n return '$scionArray_' + builder.datamodelAccumulator.length + 1;\n}\n\nvar actionTags = {\n \"script\" : function(action, builder){\n if (action.src) {\n return builder.handleExternalActionScript(action);\n } else {\n return action.content;\n }\n },\n\n \"assign\" : function(action, builder){\n return action.location.expr + \" = \" + generateFnCall(builder.generateAttributeExpression(action,'expr')) + \";\";\n },\n\n \"log\" : function(action, builder){\n var params = [];\n\n if(action.label) {\n params.push(JSON.stringify(action.label));\n } else if (action.labelexpr) {\n // extends SCXML 1.0\n params.push(generateFnCall(builder.generateAttributeExpression(action,'labelexpr')));\n } else {\n // always push *something* so the interpreter context\n // can differentiate between label and message\n params.push('null');\n }\n\n if(action.expr){\n params.push(generateFnCall(builder.generateAttributeExpression(action,'expr')));\n }\n\n return \"this.log(\" + params.join(\",\") + \");\";\n },\n\n \"if\" : function(action, builder){\n var s = \"\";\n var ifCondExprName = builder.generateAttributeExpression(action,'cond');\n\n s += \"if(\" + generateFnCall(ifCondExprName) + \"){\\n\";\n\n var childNodes = action.actions;\n\n for(var i = 0; i < childNodes.length; i++){\n var child = childNodes[i];\n\n if(child.$type === \"elseif\" || child.$type === \"else\"){\n break;\n }else{\n s += ' ' + generateFnCall(builder.generateActionFunction(child)) + ';\\n';\n }\n }\n\n //process if/else-if, and recurse\n for(; i < childNodes.length; i++){\n child = childNodes[i];\n\n if(child.$type === \"elseif\"){\n\n s+= \"}else if(\" + generateFnCall(builder.generateAttributeExpression(child,'cond')) + \"){\\n\";\n }else if(child.$type === \"else\"){\n s += \"}\";\n break;\n }else{\n s += ' ' + generateFnCall(builder.generateActionFunction(child)) + ';\\n';\n }\n }\n\n for(; i < childNodes.length; i++){\n child = childNodes[i];\n\n //this should get encountered first\n if(child.$type === \"else\"){\n s+= \"else{\\n\";\n }else{\n s += ' ' + generateFnCall(builder.generateActionFunction(child)) + ';\\n';\n }\n }\n s+= \"}\";\n\n return s;\n },\n\n \"elseif\" : function(){\n throw new Error(\"Encountered unexpected elseif tag.\");\n },\n\n \"else\" : function(){\n throw new Error(\"Encountered unexpected else tag.\");\n },\n\n \"raise\" : function(action){\n return \"this.raise({ name:\" + JSON.stringify(action.event) + \", data : {}});\";\n },\n\n \"cancel\" : function(action){\n return \"this.cancel(\" + JSON.stringify(action.sendid) + \");\";\n },\n\n \"send\" : function(action, builder){\n\n builder.documentHasSendAction = true; //set the global flag\n\n function processAttr(container,attr){\n\n\n if(attr === 'id'){\n builder.sendIdAccumulator.push(container[attr]);\n }\n\n var exprName = attr + 'expr';\n\n if(attr === 'idlocation'){\n builder.documentHasSendActionWithIdlocationAttribute = true;\n var fakeExpr = JSON.parse(JSON.stringify(container));\n //FIXME: overwriting this variable is a bit ugly.\n //if we're going to generate this expr on the fly, it would be better to clone the container.\n container[attr].expr = container[attr].expr + '=' + generateFnCall(GENERATE_SENDID_FN_NAME);\n var fnName = builder.generateAttributeExpression(container, attr);\n return generateFnCall(fnName);\n }else if(container[exprName]){\n var fnName = builder.generateAttributeExpression(container, exprName);\n return generateFnCall(fnName);\n }else if(container[attr]){\n return JSON.stringify(container[attr]);\n }else{\n return null;\n }\n }\n\n function constructSendEventData(action){\n\n //content and @contentexpr has priority over namelist and params\n if(action.content){\n return ' ' + JSON.stringify(action.content); //TODO: inline it if content is pure JSON. call custom attribute 'contentType'?\n }else if(action.contentexpr){\n return generateFnCall(builder.generateAttributeExpression(action,'contentexpr'));\n }else{\n var props = [];\n //namelist\n if(action.namelist){\n action.namelist.expr.trim().split(/ +/).forEach(function(name){\n props.push('\"' + name + '\"' + \":\" + name); //FIXME: should add some kind of stack trace here. this is hard, though, because it aggregates multiple expressions to a single line/column\n });\n }\n\n //params\n if(action.params && action.params.length){\n action.params.forEach(function(param){\n if(param.expr){\n props.push('\"' + param.name + '\"' + \":\" + generateFnCall(builder.generateAttributeExpression(param, 'expr')));\n }else if(param.location){\n props.push('\"' + param.name + '\"' + \":\" + generateFnCall(builder.generateAttributeExpression(param, 'location')));\n }\n });\n }\n\n return \"{\\n\" + props.join(',\\n') + \"}\\n\";\n }\n }\n\n\n\n var target = processAttr(action, 'target'),\n targetVariableName = '_scionTargetRef',\n targetDeclaration = 'var ' + targetVariableName + ' = ' + target + ';\\n';\n\n var event =\n \"{\\n\" +\n \" target: \" + targetVariableName + \",\\n\" +\n \" name: \" + processAttr(action, 'event') + \",\\n\" +\n \" type: \" + processAttr(action, 'type') + \",\\n\" +\n \" data: \\n\" + constructSendEventData(action) + \",\\n\" +\n \" origin: _sessionid\\n\" +\n \"}\"\n\n var sendId;\n if(action.id){\n sendId = processAttr(action,'id');\n } else if(action.idlocation){\n sendId = processAttr(action,'idlocation');\n } else{\n sendId = 'null';\n }\n var send =\n targetDeclaration +\n \"if(\" + targetVariableName + \" === '#_internal'){\\n\" +\n \" this.raise(\\n\" +\n event + \");\\n\" +\n \"}else{\\n\" +\n \" this.send(\\n\" +\n event + \", \\n\" +\n \" {\\n\" +\n \" delay: getDelayInMs(\" + processAttr(action, 'delay') + \"),\\n\" + //TODO: delay needs to be parsed at runtime\n \" sendid: \" + sendId + \"\\n\" +\n \" });\\n\" +\n \"}\";\n\n\n return send;\n },\n\n \"foreach\" : function(action, builder){\n //FIXME: the index variable could shadow the datamodel. We should pick a unique temperorary variable name\n var index = action.index || \"$i\",\n item = action.item,\n arr = action.array.expr,\n foreachFnNames = action.actions ? action.actions.map(builder.generateActionFunction, builder) : [];\n\n [action.item, action.index, action.array.expr].forEach(function(variableNameToDeclare){\n if(variableNameToDeclare){\n builder.safelyAddVariableToDatamodelAccumulator(variableNameToDeclare, action.$line, action.$column);\n }\n });\n\n var shallowArrayName = getVariableNameForShallowCopy(builder);\n\n var forEachContents =\n 'var ' + shallowArrayName + ' = ' + arr + ';\\n'+\n 'if(Array.isArray(' + shallowArrayName + ')){\\n' +\n ' for(' + index + ' = 0; ' + index + ' < ' + shallowArrayName + '.length;' + index + '++){\\n' +\n ' ' + item + ' = ' + shallowArrayName + '[' + index + '];\\n' +\n foreachFnNames.map(function(fnName){return ' ' + generateFnCall(fnName) + ';';}).join('\\n') + '\\n' +\n ' }\\n' +\n '} else{\\n' +\n ' for(' + index + ' in ' + shallowArrayName + '){\\n' +\n ' if(' + shallowArrayName + '.hasOwnProperty(' + index + ')){\\n' +\n ' ' + item + ' = ' + shallowArrayName + '[' + index + '];\\n' +\n foreachFnNames.map(function(fnName){return ' ' + generateFnCall(fnName) + ';';}).join('\\n') + '\\n' +\n ' }\\n' +\n ' }\\n' +\n '}';\n\n return forEachContents;\n },\n \"custom\": function (action) {\n var customTagConfig = {\n name : 'Sandbox.action',\n data : action\n };\n\n return \"postMessage(\" + JSON.stringify(customTagConfig, null, 4) + \");\"\n }\n};\n\nfunction getDelayInMs(delayString){\n if(typeof delayString === 'string') {\n if (delayString.slice(-2) === \"ms\") {\n return parseFloat(delayString.slice(0, -2));\n } else if (delayString.slice(-1) === \"s\") {\n return parseFloat(delayString.slice(0, -1)) * 1000;\n } else if (delayString.slice(-1) === \"m\") {\n return parseFloat(delayString.slice(0, -1)) * 1000 * 60;\n } else {\n return parseFloat(delayString);\n }\n }else if (typeof delayString === 'number'){\n return delayString;\n }else{\n return 0;\n }\n}\n\n//flow through the code and\n//generate idlocationGenerator if we find\nvar GENERATE_SENDID_FN_NAME = '$generateSendId';\nfunction generateIdlocationGenerator(sendIdAccumulator){\n return 'var $sendIdCounter = 0;\\n' +\n 'var $sendIdAccumulator = ' + JSON.stringify(sendIdAccumulator) + ';\\n' +\n 'function ' + GENERATE_SENDID_FN_NAME + '(){\\n' +\n ' var sendid;\\n' +\n ' do{\\n' +\n ' sendid = \"$scion.sendid\" + $sendIdCounter++;\\n' + //make sure we don't clobber an existing sendid\n ' } while($sendIdAccumulator.indexOf(sendid) > -1)\\n' +\n ' return sendid;\\n' +\n '}';\n}\n\n\nmodule.exports = startTraversal;\n\n//for executing directly under node.js\nif(require.main === module){\n //TODO: clean up command-line interface so that we do not expose unnecessary cruft\n var usage = 'Usage: $0 [ FILE | - ]';\n var argv = require('optimist').\n usage(usage).\n argv;\n var input = argv._[0];\n\n if(!input){\n console.error(usage);\n process.exit(1);\n } else if(input === '-'){\n\n //read from stdin or file\n process.stdin.setEncoding('utf8');\n process.stdin.resume();\n\n var jsonString = '';\n process.stdin.on('data',function(s){\n jsonString += s;\n });\n\n process.stdin.on('end',go);\n } else{\n var fs = require('fs');\n jsonString = fs.readFileSync(input,'utf8');\n go(input);\n }\n}\n\nfunction go(docUrl){\n if (!docUrl) {\n docUrl = '';\n }\n\n startTraversal(docUrl, JSON.parse(jsonString), {debug: true}).then(\n function resolved(jsModule) {\n console.log(jsModule.module);\n },\n function rejected(err) {\n console.error(err);\n }\n );\n}\n","//TODO: resolve data/@src and script/@src. either here, or in a separate module.\n//TODO: remove nodejs dependencies\n//TODO: decide on a friendly, portable interface to this module. streaming is possible, but maybe not very portable.\n\nvar sax = require(\"sax\"),\n strict = true, // set to false for html-mode\n parser;\n\nfunction merge(o1,o2){\n Object.keys(o2).forEach(function(k){\n o1[k] = o2[k];\n });\n return o1;\n}\n\nfunction getNormalizedAttributeName(attr){\n return attr.uri ? '{' + attr.uri + '}' + attr.local : attr.local;\n}\n\nfunction copyNsAttrObj(o){\n var r = {};\n Object.keys(o).forEach(function(k){\n var attr = o[k];\n r[getNormalizedAttributeName(attr)] = attr.value;\n });\n return r;\n}\n\nfunction transform(xmlString){\n parser = sax.parser(strict,{trim : true, xmlns : true});\n\n var rootJson,\n currentJson,\n expressionAttributeCache, //we cache them because in sax-js attributes get processed before the nodes they're attached to,\n //and this is the only way we can capture their row/col numbers.\n //so when we finally find one, it gets popped off the stack.\n jsonStack = [],\n allTransitions = []; //we keep a reference to these so we can clean up the onTransition property later\n\n\n function createActionJson(node){\n var action = merge(\n {\n $line : parser.line,\n $column : parser.column,\n $type: node.local\n },\n copyNsAttrObj(node.attributes));\n\n //console.log('action node',node);\n\n var actionContainer;\n if(Array.isArray(currentJson)){\n //this will be onExit and onEntry\n currentJson.push(action);\n }else if(currentJson.$type === 'scxml' && action.$type === 'script'){\n //top-level script\n currentJson.rootScripts = currentJson.rootScripts || [];\n currentJson.rootScripts.push(action);\n }else{\n //if it's any other action\n currentJson.actions = currentJson.actions || [];\n currentJson.actions.push(action);\n }\n\n\n return currentJson = action;\n }\n\n function createDataJson(node){\n currentJson =\n merge({\n $line : parser.line,\n $column : parser.column,\n $type : 'data'\n },\n copyNsAttrObj(node.attributes));\n return currentJson;\n }\n\n function createStateJson(node){\n var state = copyNsAttrObj(node.attributes);\n\n if(state.type){\n state.isDeep = state.type === 'deep' ? true : false;\n }\n\n //\"state\" is the default, so you don't need to explicitly write it\n if(node.local !== 'state' && node.local !== 'schema') state.$type = node.local;\n\n if(currentJson){\n if(!currentJson.states){\n currentJson.states = [];\n }\n\n currentJson.states.push(state);\n }\n\n return currentJson = state;\n }\n\n function createTransitionJson(node){\n\n var transition = copyNsAttrObj(node.attributes);\n\n //target can either be a string, an array (for multiple targets, e.g. targeting, or undefined\n if(transition.target){\n //console.log('transition',transition);\n transition.target = transition.target.trim().split(/\\s+/);\n if(transition.target.length === 1){\n transition.target = transition.target[0];\n }\n }\n\n if(currentJson){\n if(!currentJson.transitions){\n currentJson.transitions = [];\n }\n\n currentJson.transitions.push(transition);\n }\n\n allTransitions.push(transition);\n\n return currentJson = transition;\n }\n\n function createExpression(value){\n return {\n $line : parser.line,\n $column : parser.column,\n expr : value\n };\n }\n\n var tagActions = {\n \"scxml\": function(node){\n return rootJson = createStateJson(node);\n },\n \"initial\": createStateJson,\n \"history\":createStateJson,\n \"state\":createStateJson,\n \"parallel\":createStateJson,\n \"final\":createStateJson,\n\n //transitions/action containers\n \"transition\" : createTransitionJson,\n\n \"onentry\":function(node){\n currentJson = currentJson.onEntry = currentJson.onEntry || [];\n },\n \"onexit\":function(node){\n currentJson = currentJson.onExit = currentJson.onExit || [];\n },\n\n //actions\n \"foreach\" : createActionJson,\n \"raise\" : createActionJson,\n \"log\": createActionJson,\n \"assign\": createActionJson,\n \"validate\":createActionJson,\n \"script\":createActionJson,\n \"cancel\":createActionJson,\n //TODO: deal with namelist\n //TODO: decide how to deal with location expressions, as opposed to regular expressions\n \"send\":createActionJson,\n\n //children of send\n \"param\": function(node){\n //TODO: figure out how to deal with param and param/@expr and param/@location\n currentJson.params = currentJson.params || [];\n var attr = copyNsAttrObj(node.attributes);\n currentJson.params.push(attr);\n currentJson = attr;\n },\n \"content\":function(){\n if (expressionAttributeCache.expr) {\n currentJson.contentexpr = merge({}, expressionAttributeCache.expr);\n }\n },\n\n //these are treated a bit special - TODO: normalize/decide on a representation\n \"if\" : createActionJson,\n \"elseif\" : createActionJson,\n \"else\" : createActionJson,\n\n //data\n \"datamodel\":function(node){\n //console.log('datamodel currentJson',currentJson);\n currentJson = currentJson.datamodel = [];\n },\n \"data\":function(node){\n //console.log('data currentJson',currentJson);\n currentJson.push(createDataJson(node));\n }\n\n //TODO: these\n //\"invoke\":,\n //\"finalize\":,\n //\"donedata\":\n };\n\n expressionAttributeCache = {}; //TODO: put in onstart or something like that\n\n parser.onopentag = function (node) {\n //console.log(\"open tag\",node.local);\n\n if(tagActions[node.local]){\n tagActions[node.local](node);\n\n jsonStack.push(currentJson);\n //console.log('current json now',currentJson,jsonStack.length);\n\n //merge in the current expression attribute cache\n merge(currentJson,expressionAttributeCache);\n\n expressionAttributeCache = {}; //clear the expression attribute cache\n } else {\n createActionJson(node);\n jsonStack.push(currentJson);\n merge(currentJson,expressionAttributeCache);\n expressionAttributeCache = {};\n }\n\n };\n\n var EXPRESSION_ATTRS = [ 'cond',\n 'array',\n 'location',\n 'namelist',\n 'idlocation'];\n\n parser.onclosetag = function(tag){\n //console.log(\"close tag\",tag);\n var localName = tag.split(':').pop();\n // if(tagActions[localName]){\n jsonStack.pop();\n currentJson = jsonStack[jsonStack.length - 1];\n //console.log('current json now',currentJson,jsonStack.length);\n // }\n };\n\n parser.onattribute = function (attr) {\n //if attribute name ends with 'expr' or is one of the other ones enumerated above\n //then cache him and his position\n if( attr.name.match(/^.*expr$/) ||\n EXPRESSION_ATTRS.indexOf(attr.name) > -1){\n expressionAttributeCache[getNormalizedAttributeName(attr)] = createExpression(attr.value);\n }\n };\n\n parser.onerror = function (e) {\n // an error happened.\n throw e;\n };\n\n parser.ontext = function (t) {\n //the only text we care about is that inside of <script> and <content>\n if(currentJson && currentJson.$type){\n if(currentJson.$type === 'script'){\n currentJson.content = t; //I don't think we need a separate expression for this w/ line/col mapping\n }else if(currentJson.$type === 'send'){\n currentJson.content = t;\n }else if(currentJson.$type === 'data'){\n currentJson.content = {\n $line : currentJson.$line,\n $column : currentJson.$column,\n expr : t\n };\n } else {\n currentJson.content = t;\n }\n }\n };\n\n parser.oncdata = function (t) {\n currentJson.content = t;\n }\n\n parser.onend = function () {\n //do some scrubbing of root attributes\n delete rootJson.xmlns;\n //delete rootJson.type; //it can be useful to leave in 'type' === 'scxml'\n delete rootJson.version;\n\n if(typeof rootJson.datamodel === 'string') delete rootJson.datamodel; //this would happen if we have, e.g. state.datamodel === 'ecmascript'\n\n //change the property name of transition event to something nicer\n allTransitions.forEach(function(transition){\n transition.onTransition = transition.actions;\n delete transition.actions;\n });\n };\n\n\n parser.write(xmlString).close();\n\n return rootJson;\n\n}\n\nmodule.exports = transform;\n\n//for executing diretly under node.js\nif(require.main === module){\n //TODO: allow reading from stdin directly\n //TODO: use saxjs's support for streaming API.\n console.log(JSON.stringify(transform(require('fs').readFileSync(process.argv[2],'utf8')),4,4));\n}\n","var platform = require('../../runtime/platform-bootstrap/node/platform');\n\nvar fileUtils = {\n read: function (filePath, docUrl, context, cb) {\n var result = {\n error: null,\n content: ''\n };\n\n if(docUrl) {\n filePath = platform.url.resolve(docUrl, filePath);\n }\n\n platform.getResourceFromUrl(filePath,function(err,text,mimeType){\n if(err){\n result.error = \"Error downloading document \\\"\" + filePath + \"\\\", \" + (err.message || err);\n //TODO kill the process if file is not present\n }else{\n result.content = text;\n }\n \n cb(result);\n\n }, context);\n }\n};\n\nmodule.exports = fileUtils;\n","'use strict';\n\nvar esprima = require('esprima');\nvar fileUtils = require('./file-utils');\n\nvar systemVariables = [\"_event\", \"_sessionid\", \"_name\", \"_ioprocessors\", \"_x\"];\n\nvar scJsonAnalyzer = {\n\tanalyze: function(scJson, docUrl, context, done) {\n\t\tvar changes = [],\n\t\t\tsyntaxErrors = [],\n\t\t\tasyncCount = 0,\n\t\t\twaitingForAsync = false,\n\t\t\treportCompileErrors = (context.reportAllErrors === true);\n\n\t\tfunction processState(state) {\n\t\t\tif(state.datamodel) processActions(state, 'datamodel');\n\t\t\tif(state.onExit) processActions(state, 'onExit');\n\t\t\tif(state.onEntry) processActions(state, 'onEntry');\n\t\t\tif(state.transitions) {\n\t\t\t\tprocessActions(state, 'transitions', state);\n\n\t\t\t\tstate.transitions.forEach(function(transition, i){\n\t\t\t\t\tif(transition.onTransition) {\n\t\t\t\t\t\tprocessActions(transition, 'onTransition'); \t\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif(state.rootScripts) {\n\t\t\t\tprocessActions(state, 'rootScripts');\n\t\t\t}\n\n\t\t\tif(state.states) state.states.forEach(function(substate, i){ processState(substate); });\n\t\t}\n\n\t\tfunction processActions(actionContainer, name, state){\n\t\t\tif(Array.isArray(actionContainer[name])) {\n\n\t\t\t\tObject.keys(actionContainer[name]).forEach(function(i) {\n\t\t\t\t\tcheckAction(actionContainer[name], i, actionContainer[name][i].$type || name, state);\n\n\t\t\t\t\tif(actionContainer[name][i].actions) processActions(actionContainer[name][i], 'actions');\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcheckAction(actionContainer, name, name, state);\n\t\t\t}\n\t\t}\n\n\t\tfunction checkAction(action, propertyName, $type, state) {\n\t\t if(actionTags[$type]) {\n\n\t\t \tvar errors = actionTags[$type](action[propertyName], function (errors, override) {\n\t\t \t\tif(override) {\n\t\t \t\t\thandleError(action, propertyName, errors, $type, state, override);\n\t\t\t \t} else if(errors.length > 0) {\n\t\t\t\t\t\thandleError(action, propertyName, errors, $type, state);\n\t\t\t \t}\n\n\t\t \t\tasyncDone();\n\t\t \t});\n\n\t\t \tif(errors) {\n\t\t \t\tif(errors.override) {\n\t\t\t \t\thandleError(action, propertyName, errors.errors, $type, state, errors.override);\n\t\t\t \t} else if(errors.length > 0) {\n\t\t\t\t\t\thandleError(action, propertyName, errors, $type, state);\n\t\t\t \t}\n\t\t \t}\n\t\t\t}\n\t\t}\n\n\t\tvar actionTags = {\n\t\t\t'data': function (node, done) {\n\t\t\t\t//If there is an external file and\n\t\t\t\t//src attribute starting exactly with \"file:\"\n\t\t\t\tif(node.src && node.src.indexOf('file:') === 0) {\n\t\t\t\t\tasyncStarted();\n\n\t\t\t\t\tgetFileContents(node.src.substring(5), function (error, content) {\n\t\t\t\t\t\tif(error) {\n\t\t\t\t\t\t\tdone([error]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdelete node.src;\n\t\t\t\t\t\t\tnode.expr = { \t$column: node.$column,\n\t\t\t\t\t\t\t\t\t\t\t$line: node.$line,\n\t\t\t\t\t\t\t\t\t\t\texpr: normalizeWhitespace(content)\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tdone(null, node);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else if(node.content) {\n\t\t\t\t\tvar errors = validateJavascriptAssignment(node.id, node.content);\n\n\t\t\t\t\tif(errors.length > 0) {\n\t\t\t\t\t\tnode.content.expr = normalizeWhitespace(node.content.expr);\n\t\t\t\t\t}\n\n\t\t\t\t\tnode.expr = node.content;\n\t\t\t\t\tdelete node.content;\n\n\t\t\t\t\treturn { override: node, errors: errors };\n\t\t\t\t} else {\n\t\t\t\t\treturn validateJavascriptAssignment(node.id, node.expr);\n\t\t\t\t}\n\t\t\t},\n\t\t\t'assign': function (node) {\n\t\t\t\tif(node.location && node.expr) {\n\t\t\t\t\treturn validateJavascriptAssignment(node.location, node.expr);\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\t'transitions': function (node) {\n\t\t\t\tif(node.cond) {\n\t\t\t\t\t// return validateJavascriptCondition(node.cond);\n\t\t\t\t\tvar errors = validateJavascriptCondition(node.cond);\n\n\t\t\t\t\tif(errors.length) {\n\t\t\t\t\t\t//Assume illegal booleans as false, send override\n\t\t\t\t\t\t//https://github.com/jbeard4/scxml-test-framework/blob/2.0.0/test/w3c-ecma/test309.txml.scxml\n\t\t\t\t\t\tnode.cond.expr = 'false';\n\n\t\t\t\t\t\treturn { override: node, errors: errors };\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\t'if': function (node) {\n\t\t\t\treturn validateJavascriptCondition(node.cond);\n\t\t\t},\n\t\t\t'ifelse': function (node) {\n\t\t\t\treturn validateJavascriptCondition(node.cond);\n\t\t\t},\n\t\t\t'script': function (node, done) {\n\t\t\t\tif(node.src) {\n\t\t\t\t\t// DO NOT inline the external script here. that MUST be done\n\t\t\t\t\t// each time the parent document is requested\n\t\t\t\t} else if(node.content) {\n\t\t\t\t\treturn validateArbitraryJavascript(node.content);\n\t\t\t\t}\n\t\t\t},\n\t\t\t'log': function (node) {\n\t\t\t\tif(node.expr) {\n\t\t\t\t\treturn validateJavascriptExpression(node.expr, true);\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\t'send': function (node) {\n\t\t\t\tif(node.$type) {\n\t\t\t\t\treturn validateJavascriptExpression(node.expr);\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\t'foreach': function (node) {\n\t\t\t\tvar errors = [];\n\n\t\t\t\tif(node.item) {\n\t\t\t\t\tvar results = validateJavascriptIdentifier(node.item);\n\n\t\t\t\t\tif(results && results.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\terrors = errors.concat(results);\t\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(node.index) {\n\t\t\t\t\tvar results = validateJavascriptIdentifier(node.index);\n\n\t\t\t\t\tif(results && results.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\terrors = errors.concat(results);\t\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(node.array) {\n\t\t\t\t\tvar results = validateJavascriptExpression(node.array);\n\n\t\t\t\t\tif(results && results.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\terrors = errors.concat(results);\t\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn errors;\n\t\t\t}\n\t\t};\n\n\t\tfunction validateJavascriptAssignment(leftHand, rightHand) {\n\t\t\tvar errors = [];\n\n\t\t\tvar leftHandCheck = validateArbitraryJavascript(leftHand);\n\t\t\tvar rightHandCheck = validateArbitraryJavascript(extractJavascript(leftHand) + ' = ' + extractJavascript(rightHand));\n\n\t\t\tif(leftHandCheck.length) {\n\t\t\t\terrors.push(leftHandCheck);\n\t\t\t} else if(rightHandCheck.length) {\n\t\t\t\terrors.push(rightHandCheck);\n\t\t\t} else if(systemVariables.indexOf(extractJavascript(leftHand)) !== -1) {\n\t\t\t\terrors.push('You can\\'t change system variables: ' + leftHand);\n\t\t\t}\n\n\t\t\treturn errors;\n\t\t}\n\n\t\tfunction validateJavascriptCondition(condition) {\n\t\t\treturn validateArbitraryJavascript(condition);\n\t\t}\n\n\t\tfunction validateJavascriptExpression (js, allowLiteral) {\n\t\t\treturn validateArbitraryJavascript(js, allowLiteral);\n\t\t}\n\n\t\tfunction validateJavascriptIdentifier (js) {\n\t\t\tjs = extractJavascript(js);\n\n\t\t\tvar errors = validateArbitraryJavascript(js);\n\n\t\t\tif(errors.length) return errors;\n\n\t\t\tvar syntaxTree = esprima.parse(js, {});\n\n\t\t\tif(syntaxTree.body[0].expression.type !== 'Identifier') {\n\t\t\t\treturn ['Illegal identifier: ' + js];\n\t\t\t}\n\t\t}\n\n\t\tfunction validateArbitraryJavascript (js, allowLiteral) {\n\t\t\tjs = extractJavascript(js);\n\n\t\t\tif (allowLiteral) {\n\t\t\t\tjs = '_lhs = ' + js;\n\t\t\t}\n\n\t\t\tvar errors = [];\n\n\t\t\ttry {\n\t\t\t\tvar syntaxTree = esprima.parse(js, {});\n\n\t\t\t\ttraverseSyntaxTree(syntaxTree, errors);\n\t\t\t} catch (e) {\n\t\t\t\terrors.push(e.message);\n\t\t }\n\n\t\t\treturn errors;\n\t\t}\n\n\t\tvar treeTypes = {\n\t\t\t\"AssignmentExpression\": function(tree, errors) {\n //Check if assignee is a system variable in for statement\n if(tree.init && tree.init.left && systemVariables.indexOf(tree.init.left.name) !== -1) {\n \terrors.push('You can\\'t change system variables: ' + tree.init.left.name);\n }\n\n //Check if assignee is a system variable in expressions\n if(tree.expression && tree.expression.left && systemVariables.indexOf(tree.expression.left.name) !== -1) {\n \terrors.push('You can\\'t change system variables: ' + tree.expression.left.name);\n }\n }\n\t\t};\n\n\t\tfunction traverseSyntaxTree(tree, errors) {\n\t\t\tObject.keys(tree).forEach(function(i){\n\t\t if (tree[i] && typeof(tree[i]) === 'object') {\n\t\t \tif (tree[i].type && treeTypes[tree[i].type]) {\n\t\t \t\t treeTypes[tree[i].type](tree, errors);\n\t\t \t}\n\n\t\t \t//Go deeper into the child nodes\n\t\t traverseSyntaxTree(tree[i], errors);\n\t\t }\n\t\t });\n\t\t}\n\n\t\tfunction getFileContents(filePath, done) {\n\t\t\t//docUrl and context are coming from top function.\n fileUtils.read(filePath, docUrl, context, function (fileContent) {\n \tdone(fileContent.error, fileContent.content);\n });\n }\n\n\t\tfunction handleError (node, property, errors, $type, state, override) {\n\t\t\tif (reportCompileErrors && errors && errors.length) {\n\t\t\t\tvar n = node[property];\n\t\t\t\tsyntaxErrors.push({\n\t\t\t\t\ttagname: n.$type,\n\t\t\t\t\tline: n.$line,\n\t\t\t\t\tcolumn: n.$column,\n\t\t\t\t\treason: errors.join('; ')\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar errorNode = {\n\t\t\t\t$line : node[property].$line,\n\t\t\t\t$column : node[property].$column,\n\t\t\t\t$type: 'raise',\n\t\t\t\tevent: 'error.execution',\n\t\t\t\tdata: {\n\t\t\t\t\tmessage: errors ? errors.join(', ') : ''\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tchanges.push({\n\t\t\t\told: node,\n\t\t\t\tprop: property,\n\t\t\t\t$type: $type,\n\t\t\t\tnew: override,\n\t\t\t\tstate: state,\n\t\t\t\terror: errorNode\n\t\t\t});\n\t\t}\n\n\t\tfunction extractJavascript (attribute) {\n\t\t\t//Just a workaround for esprima parsing.\n\t\t\tif (typeof(attribute) === 'object') {\n\t\t\t\tattribute = attribute.expr;\n\t\t\t}\n\n\t\t\treturn attribute;\n\t\t}\n\n\t\tfunction normalizeWhitespace (str) {\n\t\t\treturn JSON.stringify(str.replace(/^\\s+|\\s+$|\\s+(?=\\s)/g, '').replace(/\\s/g, \" \"));\n\t\t}\n\n\t\tfunction commitChanges (scJson, errors) {\n\t\t\tchanges.forEach(function (change) {\n\t\t\t\tif(change.$type === 'data' && !change.new) {\n\t\t\t\t\tdelete scJson.datamodel;\n\t\t\t\t\tscJson.onEntry = [ change.new || change.error ];\n\t\t\t\t} else if(change.$type === 'script' && !change.new && scJson.rootScripts) {\n\t\t\t\t\tdelete scJson.rootScripts;\n\t\t\t\t\tscJson.onEntry = [ change.error ];\n\t\t\t\t} else if(change.$type === 'transitions') {\n\t\t\t\t\tif(!change.state.onEntry) change.state.onEntry = [];\n\n\t\t\t\t\tchange.state.onEntry.push(change.error);\n\n\t\t\t\t\tchange.old[change.prop] = change.new;\n\t\t\t\t} else {\n\t\t\t\t\tchange.old[change.prop] = change.new || change.error;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction asyncStarted () {\n\t\t\tasyncCount++;\n\t\t}\n\n\t\tfunction asyncDone () {\n\t\t\tasyncCount--;\n\n\t\t\t//If we are only waiting for async processes\n\t\t\tif(waitingForAsync && asyncCount === 0) {\n\t\t\t\tcompleteAnalysis();\n\t\t\t}\n\t\t}\n\n\t\tfunction completeAnalysis () {\n\t\t\tif (syntaxErrors.length) {\n\t\t\t\tscJson = undefined;\n\t\t\t} else {\n\t\t\t\tcommitChanges(scJson);\n\t\t\t}\n\n\t\t\tdone({ scJson: scJson, errors: syntaxErrors });\n\t\t}\n\n\t\tprocessState(scJson, 'scJson');\n\t\t\n\t\tif(asyncCount === 0) {\n\t\t\tcompleteAnalysis();\n\t\t} else {\n\t\t\t//Wait for async processes to end\n\t\t\twaitingForAsync = true;\n\t\t}\n\t}\n};\n\nmodule.exports = scJsonAnalyzer;\n","module.exports = {\n scxmlToScjson : require('../compiler/scxml-to-scjson'),\n scjsonToModule : require('../compiler/scjson-to-module'),\n scJsonAnalyzer : require('../compiler/static-analysis/scjson-analyzer')\n};\n","/*\n Copyright 2011-2012 Jacob Beard, INFICON, and other SCION contributors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n\n\"use strict\";\n\n\nvar compilerInternals = require('./compiler-internals'),\n platform = require('./platform-bootstrap/node/platform'),\n fs = require('fs'),\n vm = require('vm'),\n assert = require('assert');\n\nvar scxmlToScjson = compilerInternals.scxmlToScjson, \n scjsonToModule = compilerInternals.scjsonToModule, \n scJsonAnalyzer = compilerInternals.scJsonAnalyzer;\n\n/**\n * Compile the raw scxml document into a compiled JS module\n * Top-level scripts are extracted so that they can be compiled and executed independently\n * @param {string} url The url of the scxml document\n * @param {string} docString The raw scxml document to be parsed\n * @param {Function} cb The callback to invoke once the document has been parsed\n * @param {object} [hostContext] Context provided by the interpreter host\n */\nfunction documentStringToModel(url,docString,cb,hostContext){\n if (typeof hostContext !== 'object' || hostContext === null) {\n hostContext = {};\n }\n\n var scJson = scxmlToScjson(docString);\n\n scJsonAnalyzer.analyze(scJson, url, hostContext, function (result) {\n if (result.errors.length) {\n cb(result.errors);\n return;\n };\n\n createModule(url, result.scJson, hostContext, cb);\n });\n}\n\nfunction fetchScript(scriptInfo, hostContext) {\n return new Promise(function(resolve, reject) {\n\n platform.getScriptFromUrl(scriptInfo.src,\n function(err, compiledScript, mimeType) {\n if (err) {\n reject(err);\n } else {\n scriptInfo.compiled = compiledScript;\n resolve(scriptInfo);\n }\n },\n hostContext,\n {\n lineOffset: scriptInfo.$line,\n columnOffset: scriptInfo.$column,\n $wrap: scriptInfo.$wrap\n });\n });\n}\n\n/**\n * Compile the generated scxml module and any embedded or external scripts\n * @param {string} docUrl The scxml document url\n * @param {SCJsonRawModule} rawModule The raw SCION module created by scjson-to-module\n * @param {object} [hostContext] Context provided by the interpreter host\n * @param {Function} cb Callback to invoke with the compiled module or an error\n */\nfunction compileModule(docUrl, rawModule, hostContext, cb) {\n var promiseOffset = 2;\n var rootScripts = rawModule.rootScripts;\n var scriptCount = rootScripts.length;\n var promises = new Array(scriptCount + promiseOffset);\n\n for (var i = 0; i < scriptCount; i++) {\n var curScript = rootScripts[i];\n if (curScript.src) {\n curScript.src = platform.url.resolve(docUrl, curScript.src);\n // defer the fetch until SCModel.prepare\n promises[i+promiseOffset] = Promise.resolve(curScript);\n } else {\n promises[i+promiseOffset] = new Promise(function(resolve, reject) {\n try {\n var content = curScript.content;\n delete curScript.content;\n var compiledScript = platform.module.compileScript(content, {\n filename: docUrl,\n lineOffset: curScript.$line,\n columnOffset: curScript.$column\n });\n curScript.compiled = compiledScript;\n resolve(curScript);\n } catch(e) {\n reject(e);\n }\n });\n }\n }\n\n promises[0] = new Promise(function(resolve, reject) {\n try {\n var compiledModule = platform.module.compileScript(rawModule.module, {\n filename: docUrl\n });\n\n resolve(compiledModule);\n } catch(e) {\n reject(e);\n }\n });\n\n promises[1] = new Promise(function(resolve, reject) {\n if (!rawModule.datamodel) {\n resolve(undefined);\n } else {\n try {\n var compiledDatamodel = platform.module.compileScript(rawModule.datamodel, {\n filename: docUrl\n });\n\n resolve(compiledDatamodel);\n } catch(e) {\n reject(e);\n }\n }\n })\n\n Promise.all(promises).then(function compileSuccess(scripts) {\n var compiledModule = scripts.shift();\n var datamodelDecl = scripts.shift();\n var model = new SCModel(\n rawModule.name,\n datamodelDecl,\n rootScripts,\n compiledModule\n );\n\n cb(null, model);\n }, function compileError(err) {\n cb(err);\n });\n}\n\nfunction SCModel(name, datamodel, rootScripts, scxmlModule) {\n this.name = name;\n this.datamodel = datamodel;\n this.rootScripts = rootScripts;\n this.module = scxmlModule;\n}\n\n/**\n * Prepares an scxml model for execution by binding it to an execution context\n * @param {object} [executionContext] The execution context (e.g. v8 VM sandbox).\n * If not provided, a bare bones context is constructed\n * @param {Function} cb Callback to execute with the prepared model or an error\n * The prepared model is a function to be passed into a SCION StateChart object\n * @param {object} [hostContext] Context provided by the interpreter host\n */\nSCModel.prototype.prepare = function(cb, executionContext, hostContext) {\n if (!executionContext) {\n executionContext = platform.module.createExecutionContext();\n }\n\n if (!vm.isContext(executionContext)){\n executionContext = vm.createContext(executionContext); \n } \n\n if (typeof hostContext !== 'object' || hostContext === null) {\n hostContext = {};\n }\n\n var scriptCount = this.rootScripts.length;\n var scriptPromises = new Array(scriptCount);\n for (let i = 0; i < scriptCount; i++) {\n let curScript = this.rootScripts[i];\n if (curScript.src) {\n // script url already resolved in compileModule\n scriptPromises[i] = fetchScript(curScript, hostContext);\n } else {\n assert(curScript.compiled);\n scriptPromises[i] = Promise.resolve(curScript);\n }\n }\n\n const self = this;\n Promise.all(scriptPromises).then(function resolved(scripts) {\n try {\n if (self.datamodel) {\n self.datamodel.runInContext(executionContext);\n }\n\n for (let i = 0; i < scriptCount; i++) {\n self.rootScripts[i].compiled.runInContext(executionContext);\n }\n\n let modelFn = self.module.runInContext(executionContext);\n cb(undefined, modelFn);\n } catch (e) {\n cb(e);\n }\n }, function rejected(err) {\n cb(err);\n });\n}\n\nfunction createModule(url,scJson,hostContext,cb){\n if (platform.debug) {\n console.log('scjson',JSON.stringify(scJson, undefined, 2));\n if (!hostContext.hasOwnProperty('debug')) {\n hostContext.debug = true;\n }\n }\n\n scjsonToModule(url, scJson, hostContext).then(function resolved(rawModule) {\n if (platform.debug && rawModule.name) {\n fs.writeFileSync('/var/tmp/' + rawModule.name + '.scion', rawModule.module);\n }\n\n compileModule(url, rawModule, hostContext, cb);\n }, function rejected(err) {\n cb(err);\n });\n}\n\nmodule.exports = documentStringToModel;\n","/*\n Copyright 2011-2012 Jacob Beard, INFICON, and other SCION contributors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n\n\"use strict\";\n\nvar platform = require('./platform-bootstrap/node/platform'),\n documentStringToModel = require('./document-string-to-model');\n\n/**\n * Includes options passed to the model compiler as well as \n * data passed along to the platform-specific resource-fetching API. \n * @typedef {object} ModelContext\n * @property {boolean} [reportAllErrors=false] Indicates whether or not data model (aka JavaScript) \n * compilation errors cause the callback to be invoked with errors. By default these errors\n * are raised to the offending document as error.execution events.\n */\n\n/**\n * @param {string} url URL of the SCXML document to retrieve and convert to a model\n * @param {function} cb callback to invoke with an error or the model\n * @param {ModelContext} [context] The model compiler context\n */\nfunction urlToModel(url,cb,context){\n platform.http.get(url,function(err,doc){\n if(err){\n cb(err,null);\n }else{\n documentStringToModel(url,doc,cb,context);\n }\n },context);\n}\n\n/**\n * @param {string} url file system path of the SCXML document to retrieve and convert to a model\n * @param {function} cb callback to invoke with an error or the model\n * @param {ModelContext} [context] The model compiler context\n */\nfunction pathToModel(url,cb,context){\n context = context || {};\n context.isLoadedFromFile = true; //this is useful later on for setting up require() when eval'ing the generated code \n\n platform.fs.get(url,function(err,doc){\n if(err){\n cb(err,null);\n }else{\n documentStringToModel(url,doc,cb,context);\n }\n },context);\n}\n\n/**\n * @param document SCXML document to convert to a model\n * @param {function} cb callback to invoke with an error or the model\n * @param {ModelContext} [context] The model compiler context\n */\nfunction documentToModel(doc,cb,context){\n var s = platform.dom.serializeToString(doc);\n documentStringToModel(null,s,cb,context);\n}\n\n\n//export standard interface\nmodule.exports = {\n pathToModel : pathToModel,\n urlToModel : urlToModel,\n documentStringToModel : documentStringToModel,\n documentToModel : documentToModel,\n ext : {\n platform : platform,\n compilerInternals : require('./compiler-internals') //expose\n },\n scion : require('scion-core')\n};\n","/*\n Copyright 2011-2012 Jacob Beard, INFICON, and other SCION contributors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n\n\"use strict\";\n\n/**\n * This module contains some utility functions for getting stuff in node.js.\n */\n\nvar http = require('http'),\n urlM = require('url'),\n fs = require('fs');\n\nfunction httpGet(url,cb){\n var options = urlM.parse(url);\n http.get(options, function(res) {\n var s = \"\";\n res.on('data',function(d){\n s += d;\n });\n res.on('end',function(){\n if(res.statusCode === 200){\n cb(null,s);\n }else{\n cb(new Error('HTTP code ' + res.statusCode + ' : ' + s));\n }\n });\n }).on('error', function(e) {\n cb(e);\n });\n}\n\nfunction getResource(url,cb,context){\n var urlObj = urlM.parse(url);\n if(urlObj.protocol === 'http:' || url.protocol === 'https:' \n || typeof window !== 'undefined' //are we actually in the browser?\n ){\n httpGet(url,cb);\n }else if(!urlObj.protocol){\n //assume filesystem\n fs.readFile(url,'utf8',cb);\n }else{\n //pass in error for unrecognized protocol\n cb(new Error(\"Unrecognized protocol\"));\n }\n}\n\nmodule.exports = {\n getResource : getResource,\n httpGet : httpGet\n};\n","/*\n Copyright 2011-2012 Jacob Beard, INFICON, and other SCION contributors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n\n\"use strict\";\n\nvar fs = require('fs'),\n get = require('./get'),\n pathModule = require('path'),\n vm = require('vm'),\n url = require('./url'),\n Module = require('module');\n\nmodule.exports = {\n\n //used in parsing\n http : {\n get : function(url,cb){\n get.httpGet(url,cb);\n }\n },\n\n fs : {\n get : function(path,cb,context){\n fs.readFile(path,'utf8',cb);\n }\n },\n\n getResourceFromUrl : get.getResource,\n\n getScriptFromUrl: function(url, cb, context, scriptInfo) {\n get.getResource(url, function(err, content) {\n if (err) {\n cb(err);\n return;\n }\n\n if (typeof scriptInfo.$wrap === 'function') {\n content = scriptInfo.$wrap(content);\n }\n\n var options = Object.assign({filename: url}, scriptInfo);\n try {\n var script = new vm.Script(content, options);\n cb(undefined, script);\n } catch (e) {\n cb(e);\n }\n }, context);\n },\n\n path : require('path'), //same API\n\n url : {\n resolve : url.resolve\n },\n\n module : {\n createLocalExecutionContext(docPath, sandbox) {\n if (!sandbox) {\n sandbox = {console: console};\n sandbox.global = sandbox;\n }\n\n var ctx = vm.createContext(sandbox);\n\n ctx.__filename = docPath;\n ctx.__dirname = pathModule.dirname(ctx.__filename);\n\n //set it up so that require is relative to file\n var _module = ctx.module = new Module(docPath);\n var _require = ctx.require = function(path) {\n return Module._load(path, _module, true);\n };\n _module.filename = ctx.__filename;\n _require.paths = _module.paths = Module._nodeModulePaths(process.cwd());\n _require.resolve = function(request) {\n return Module._resolveFilename(request, _module);\n };\n\n return ctx;\n },\n\n /**\n * create a context in which to execute javascript\n * @param {object} [sandbox] An object to contextify\n * @return {object} An execution context\n * @see {@link https://nodejs.org/dist/latest-v4.x/docs/api/vm.html#vm_vm_createcontext_sandbox}\n */\n createExecutionContext: function(sandbox, hostContext) {\n return vm.createContext(sandbox);\n },\n\n /**\n * Create a compiled script object\n * @param {string} src The js source to compile\n * @param {object} options compilation options\n * @param {string} options.filename The path to the file associated with the source\n * @param {number} options.lineOffset The offset to the line number in the scxml document\n * @param {number} options.columnOffset The offset to the column number in the scxml document\n * @return {Script} A Script object which implements a runInContext method\n * @see {@link https://nodejs.org/dist/latest-v4.x/docs/api/vm.html#vm_class_script}\n */\n compileScript: function(src, options) {\n return new vm.Script(src, options);\n },\n\n eval : function(s,fileName,context){\n\n context = context || {};\n fileName = fileName || '';\n\n //TODO: if filename starts with 'http', substitute a default require\n\n // https://247inc.atlassian.net/browse/OMNI-3\n // create an isolated sandbox per session\n var sandbox = {};\n sandbox.global = sandbox;\n var ctx = vm.createContext(sandbox);\n\n if(context.isLoadedFromFile){\n ctx.__filename = fileName;\n ctx.__dirname = pathModule.dirname(ctx.__filename);\n\n //set it up so that require is relative to file\n var _module = ctx.module = new Module(fileName);\n var _require = ctx.require = function(path) {\n return Module._load(path, _module, true);\n };\n _module.filename = ctx.__filename;\n _require.paths = _module.paths = Module._nodeModulePaths(process.cwd());\n _require.resolve = function(request) {\n return Module._resolveFilename(request, _module);\n };\n\n }else{\n //otherwise (e.g., loaded via http, or from document string), choose a sensible default\n ctx.require =\n context.require || //user-specified require\n (require.main && //main module's require\n require.main.require &&\n require.main.require.bind(require.main)) ||\n require; //this module's require\n }\n\n //set up default require and module.exports\n return vm.runInContext(s,ctx,fileName);\n }\n },\n\n dom : {\n serializeToString : function(node){\n throw new Error('Platform method dom.serializeToString is not supported.');\n //return (new xmldom.XMLSerializer()).serializeToString(node);\n }\n },\n\n log : console.log\n\n};\n","/*\n Copyright 2011-2012 Jacob Beard, INFICON, and other SCION contributors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n\n\"use strict\";\n\nvar urlModule = require('url');\n\nmodule.exports = {\n getPathFromUrl : function(url){\n var oUrl = urlModule.parse(url);\n return oUrl.pathname;\n },\n\n changeUrlPath : function(url,newPath){\n var oUrl = urlModule.parse(url);\n\n oUrl.path = oUrl.pathname = newPath;\n\n return urlModule.format(oUrl);\n },\n\n resolve: function(base, target) {\n return urlModule.resolve(base, target);\n }\n};\n\n","/*\n Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,\n // Rhino, and plain browser loading.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define(['exports'], factory);\n } else if (typeof exports !== 'undefined') {\n factory(exports);\n } else {\n factory((root.esprima = {}));\n }\n}(this, function (exports) {\n 'use strict';\n\n var Token,\n TokenName,\n FnExprTokens,\n Syntax,\n PlaceHolders,\n Messages,\n Regex,\n source,\n strict,\n index,\n lineNumber,\n lineStart,\n hasLineTerminator,\n lastIndex,\n lastLineNumber,\n lastLineStart,\n startIndex,\n startLineNumber,\n startLineStart,\n scanning,\n length,\n lookahead,\n state,\n extra,\n isBindingElement,\n isAssignmentTarget,\n firstCoverInitializedNameError;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8,\n RegularExpression: 9,\n Template: 10\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '<end>';\n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n TokenName[Token.RegularExpression] = 'RegularExpression';\n TokenName[Token.Template] = 'Template';\n\n // A function following one of those tokens is an expression.\n FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n 'return', 'case', 'delete', 'throw', 'void',\n // assignment operators\n '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',\n '&=', '|=', '^=', ',',\n // binary/unary operators\n '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n '<=', '<', '>', '!=', '!=='];\n\n Syntax = {\n AssignmentExpression: 'AssignmentExpression',\n AssignmentPattern: 'AssignmentPattern',\n ArrayExpression: 'ArrayExpression',\n ArrayPattern: 'ArrayPattern',\n ArrowFunctionExpression: 'ArrowFunctionExpression',\n BlockStatement: 'BlockStatement',\n BinaryExpression: 'BinaryExpression',\n BreakStatement: 'BreakStatement',\n CallExpression: 'CallExpression',\n CatchClause: 'CatchClause',\n ClassBody: 'ClassBody',\n ClassDeclaration: 'ClassDeclaration',\n ClassExpression: 'ClassExpression',\n ConditionalExpression: 'ConditionalExpression',\n ContinueStatement: 'ContinueStatement',\n DoWhileStatement: 'DoWhileStatement',\n DebuggerStatement: 'DebuggerStatement',\n EmptyStatement: 'EmptyStatement',\n ExportAllDeclaration: 'ExportAllDeclaration',\n ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n ExportNamedDeclaration: 'ExportNamedDeclaration',\n ExportSpecifier: 'ExportSpecifier',\n ExpressionStatement: 'ExpressionStatement',\n ForStatement: 'ForStatement',\n ForOfStatement: 'ForOfStatement',\n ForInStatement: 'ForInStatement',\n FunctionDeclaration: 'FunctionDeclaration',\n FunctionExpression: 'FunctionExpression',\n Identifier: 'Identifier',\n IfStatement: 'IfStatement',\n ImportDeclaration: 'ImportDeclaration',\n ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n ImportSpecifier: 'ImportSpecifier',\n Literal: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n MetaProperty: 'MetaProperty',\n MethodDefinition: 'MethodDefinition',\n NewExpression: 'NewExpression',\n ObjectExpression: 'ObjectExpression',\n ObjectPattern: 'ObjectPattern',\n Program: 'Program',\n Property: 'Property',\n RestElement: 'RestElement',\n ReturnStatement: 'ReturnStatement',\n SequenceExpression: 'SequenceExpression',\n SpreadElement: 'SpreadElement',\n Super: 'Super',\n SwitchCase: 'SwitchCase',\n SwitchStatement: 'SwitchStatement',\n TaggedTemplateExpression: 'TaggedTemplateExpression',\n TemplateElement: 'TemplateElement',\n TemplateLiteral: 'TemplateLiteral',\n ThisExpression: 'ThisExpression',\n ThrowStatement: 'ThrowStatement',\n TryStatement: 'TryStatement',\n UnaryExpression: 'UnaryExpression',\n UpdateExpression: 'UpdateExpression',\n VariableDeclaration: 'VariableDeclaration',\n VariableDeclarator: 'VariableDeclarator',\n WhileStatement: 'WhileStatement',\n WithStatement: 'WithStatement',\n YieldExpression: 'YieldExpression'\n };\n\n PlaceHolders = {\n ArrowParameterPlaceHolder: 'ArrowParameterPlaceHolder'\n };\n\n // Error messages should be identical to V8.\n Messages = {\n UnexpectedToken: 'Unexpected token %0',\n UnexpectedNumber: 'Unexpected number',\n UnexpectedString: 'Unexpected string',\n UnexpectedIdentifier: 'Unexpected identifier',\n UnexpectedReserved: 'Unexpected reserved word',\n UnexpectedTemplate: 'Unexpected quasi %0',\n UnexpectedEOS: 'Unexpected end of input',\n NewlineAfterThrow: 'Illegal newline after throw',\n InvalidRegExp: 'Invalid regular expression',\n UnterminatedRegExp: 'Invalid regular expression: missing /',\n InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n NoCatchOrFinally: 'Missing catch or finally after try',\n UnknownLabel: 'Undefined label \\'%0\\'',\n Redeclaration: '%0 \\'%1\\' has already been declared',\n IllegalContinue: 'Illegal continue statement',\n IllegalBreak: 'Illegal break statement',\n IllegalReturn: 'Illegal return statement',\n StrictModeWith: 'Strict mode code may not include a with statement',\n StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n StrictReservedWord: 'Use of future reserved word in strict mode',\n TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n DefaultRestParameter: 'Unexpected token =',\n ObjectPatternAsRestParameter: 'Unexpected token {',\n DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n DuplicateConstructor: 'A class may only have one constructor',\n StaticPrototype: 'Classes may not have static property named prototype',\n MissingFromClause: 'Unexpected token',\n NoAsAfterImportNamespace: 'Unexpected token',\n InvalidModuleSpecifier: 'Unexpected token',\n IllegalImportDeclaration: 'Unexpected token',\n IllegalExportDeclaration: 'Unexpected token',\n DuplicateBinding: 'Duplicate binding %0'\n };\n\n // See also tools/generate-unicode-regex.js.\n Regex = {\n // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierStart:\n NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]/,\n\n // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierPart:\n NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDD0-\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF01-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n };\n\n // Ensure the condition is true, otherwise throw an error.\n // This is only to have a better contract semantic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT use this to enforce a certain condition on any user input.\n\n function assert(condition, message) {\n /* istanbul ignore if */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n }\n\n function isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n }\n\n function isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n }\n\n function octalToDecimal(ch) {\n // \\0 is not octal escape sequence\n var octal = (ch !== '0'), code = '01234567'.indexOf(ch);\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index < length &&\n isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n return {\n code: code,\n octal: octal\n };\n }\n\n // ECMA-262 11.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n }\n\n // ECMA-262 11.3 Line Terminators\n\n function isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // ECMA-262 11.6 Identifier Names and Identifiers\n\n function fromCodePoint(cp) {\n return (cp < 0x10000) ? String.fromCharCode(cp) :\n String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n }\n\n function isIdentifierStart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)));\n }\n\n function isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)));\n }\n\n // ECMA-262 11.6.2.2 Future Reserved Words\n\n function isFutureReservedWord(id) {\n switch (id) {\n case 'enum':\n case 'export':\n case 'import':\n case 'super':\n return true;\n default:\n return false;\n }\n }\n\n function isStrictModeReservedWord(id) {\n switch (id) {\n case 'implements':\n case 'interface':\n case 'package':\n case 'private':\n case 'protected':\n case 'public':\n case 'static':\n case 'yield':\n case 'let':\n return true;\n default:\n return false;\n }\n }\n\n function isRestrictedWord(id) {\n return id === 'eval' || id === 'arguments';\n }\n\n // ECMA-262 11.6.2.1 Keywords\n\n function isKeyword(id) {\n switch (id.length) {\n case 2:\n return (id === 'if') || (id === 'in') || (id === 'do');\n case 3:\n return (id === 'var') || (id === 'for') || (id === 'new') ||\n (id === 'try') || (id === 'let');\n case 4:\n return (id === 'this') || (id === 'else') || (id === 'case') ||\n (id === 'void') || (id === 'with') || (id === 'enum');\n case 5:\n return (id === 'while') || (id === 'break') || (id === 'catch') ||\n (id === 'throw') || (id === 'const') || (id === 'yield') ||\n (id === 'class') || (id === 'super');\n case 6:\n return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n (id === 'switch') || (id === 'export') || (id === 'import');\n case 7:\n return (id === 'default') || (id === 'finally') || (id === 'extends');\n case 8:\n return (id === 'function') || (id === 'continue') || (id === 'debugger');\n case 10:\n return (id === 'instanceof');\n default:\n return false;\n }\n }\n\n // ECMA-262 11.4 Comments\n\n function addComment(type, value, start, end, loc) {\n var comment;\n\n assert(typeof start === 'number', 'Comment must have valid position');\n\n state.lastCommentStart = start;\n\n comment = {\n type: type,\n value: value\n };\n if (extra.range) {\n comment.range = [start, end];\n }\n if (extra.loc) {\n comment.loc = loc;\n }\n extra.comments.push(comment);\n if (extra.attachComment) {\n extra.leadingComments.push(comment);\n extra.trailingComments.push(comment);\n }\n if (extra.tokenize) {\n comment.type = comment.type + 'Comment';\n if (extra.delegate) {\n comment = extra.delegate(comment);\n }\n extra.tokens.push(comment);\n }\n }\n\n function skipSingleLineComment(offset) {\n var start, loc, ch, comment;\n\n start = index - offset;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - offset\n }\n };\n\n while (index < length) {\n ch = source.charCodeAt(index);\n ++index;\n if (isLineTerminator(ch)) {\n hasLineTerminator = true;\n if (extra.comments) {\n comment = source.slice(start + offset, index - 1);\n loc.end = {\n line: lineNumber,\n column: index - lineStart - 1\n };\n addComment('Line', comment, start, index - 1, loc);\n }\n if (ch === 13 && source.charCodeAt(index) === 10) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n return;\n }\n }\n\n if (extra.comments) {\n comment = source.slice(start + offset, index);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Line', comment, start, index, loc);\n }\n }\n\n function skipMultiLineComment() {\n var start, loc, ch, comment;\n\n if (extra.comments) {\n start = index - 2;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - 2\n }\n };\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (isLineTerminator(ch)) {\n if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) {\n ++index;\n }\n hasLineTerminator = true;\n ++lineNumber;\n ++index;\n lineStart = index;\n } else if (ch === 0x2A) {\n // Block comment ends with '*/'.\n if (source.charCodeAt(index + 1) === 0x2F) {\n ++index;\n ++index;\n if (extra.comments) {\n comment = source.slice(start + 2, index - 2);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Block', comment, start, index, loc);\n }\n return;\n }\n ++index;\n } else {\n ++index;\n }\n }\n\n // Ran off the end of the file - the whole thing is a comment\n if (extra.comments) {\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n comment = source.slice(start + 2, index);\n addComment('Block', comment, start, index, loc);\n }\n tolerateUnexpectedToken();\n }\n\n function skipComment() {\n var ch, start;\n hasLineTerminator = false;\n\n start = (index === 0);\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch)) {\n ++index;\n } else if (isLineTerminator(ch)) {\n hasLineTerminator = true;\n ++index;\n if (ch === 0x0D && source.charCodeAt(index) === 0x0A) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n start = true;\n } else if (ch === 0x2F) { // U+002F is '/'\n ch = source.charCodeAt(index + 1);\n if (ch === 0x2F) {\n ++index;\n ++index;\n skipSingleLineComment(2);\n start = true;\n } else if (ch === 0x2A) { // U+002A is '*'\n ++index;\n ++index;\n skipMultiLineComment();\n } else {\n break;\n }\n } else if (start && ch === 0x2D) { // U+002D is '-'\n // U+003E is '>'\n if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) {\n // '-->' is a single-line comment\n index += 3;\n skipSingleLineComment(3);\n } else {\n break;\n }\n } else if (ch === 0x3C) { // U+003C is '<'\n if (source.slice(index + 1, index + 4) === '!--') {\n ++index; // `<`\n ++index; // `!`\n ++index; // `-`\n ++index; // `-`\n skipSingleLineComment(4);\n } else {\n break;\n }\n } else {\n break;\n }\n }\n }\n\n function scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n return '';\n }\n }\n return String.fromCharCode(code);\n }\n\n function scanUnicodeCodePointEscape() {\n var ch, code;\n\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwUnexpectedToken();\n }\n\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwUnexpectedToken();\n }\n\n return fromCodePoint(code);\n }\n\n function codePointAt(i) {\n var cp, first, second;\n\n cp = source.charCodeAt(i);\n if (cp >= 0xD800 && cp <= 0xDBFF) {\n second = source.charCodeAt(i + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n first = cp;\n cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return cp;\n }\n\n function getComplexIdentifier() {\n var cp, ch, id;\n\n cp = codePointAt(index);\n id = fromCodePoint(cp);\n index += id.length;\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (cp === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwUnexpectedToken();\n }\n ++index;\n if (source[index] === '{') {\n ++index;\n ch = scanUnicodeCodePointEscape();\n } else {\n ch = scanHexEscape('u');\n cp = ch.charCodeAt(0);\n if (!ch || ch === '\\\\' || !isIdentifierStart(cp)) {\n throwUnexpectedToken();\n }\n }\n id = ch;\n }\n\n while (index < length) {\n cp = codePointAt(index);\n if (!isIdentifierPart(cp)) {\n break;\n }\n ch = fromCodePoint(cp);\n id += ch;\n index += ch.length;\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (cp === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwUnexpectedToken();\n }\n ++index;\n if (source[index] === '{') {\n ++index;\n ch = scanUnicodeCodePointEscape();\n } else {\n ch = scanHexEscape('u');\n cp = ch.charCodeAt(0);\n if (!ch || ch === '\\\\' || !isIdentifierPart(cp)) {\n throwUnexpectedToken();\n }\n }\n id += ch;\n }\n }\n\n return id;\n }\n\n function getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getComplexIdentifier();\n } else if (ch >= 0xD800 && ch < 0xDFFF) {\n // Need to handle surrogate pairs.\n index = start;\n return getComplexIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source.charCodeAt(index) === 0x5C) ? getComplexIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else if (id === 'null') {\n type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n\n // ECMA-262 11.7 Punctuators\n\n function scanPunctuator() {\n var token, str;\n\n token = {\n type: Token.Punctuator,\n value: '',\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n\n // Check for most common single-character punctuators.\n str = source[index];\n switch (str) {\n\n case '(':\n if (extra.tokenize) {\n extra.openParenToken = extra.tokenValues.length;\n }\n ++index;\n break;\n\n case '{':\n if (extra.tokenize) {\n extra.openCurlyToken = extra.tokenValues.length;\n }\n state.curlyStack.push('{');\n ++index;\n break;\n\n case '.':\n ++index;\n if (source[index] === '.' && source[index + 1] === '.') {\n // Spread operator: ...\n index += 2;\n str = '...';\n }\n break;\n\n case '}':\n ++index;\n state.curlyStack.pop();\n break;\n case ')':\n case ';':\n case ',':\n case '[':\n case ']':\n case ':':\n case '?':\n case '~':\n ++index;\n break;\n\n default:\n // 4-character punctuator.\n str = source.substr(index, 4);\n if (str === '>>>=') {\n index += 4;\n } else {\n\n // 3-character punctuators.\n str = str.substr(0, 3);\n if (str === '===' || str === '!==' || str === '>>>' ||\n str === '<<=' || str === '>>=') {\n index += 3;\n } else {\n\n // 2-character punctuators.\n str = str.substr(0, 2);\n if (str === '&&' || str === '||' || str === '==' || str === '!=' ||\n str === '+=' || str === '-=' || str === '*=' || str === '/=' ||\n str === '++' || str === '--' || str === '<<' || str === '>>' ||\n str === '&=' || str === '|=' || str === '^=' || str === '%=' ||\n str === '<=' || str === '>=' || str === '=>') {\n index += 2;\n } else {\n\n // 1-character punctuators.\n str = source[index];\n if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {\n ++index;\n }\n }\n }\n }\n }\n\n if (index === token.start) {\n throwUnexpectedToken();\n }\n\n token.end = index;\n token.value = str;\n return token;\n }\n\n // ECMA-262 11.8.3 Numeric Literals\n\n function scanHexLiteral(start) {\n var number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwUnexpectedToken();\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt('0x' + number, 16),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanBinaryLiteral(start) {\n var ch, number;\n\n number = '';\n\n while (index < length) {\n ch = source[index];\n if (ch !== '0' && ch !== '1') {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n // only 0b or 0B\n throwUnexpectedToken();\n }\n\n if (index < length) {\n ch = source.charCodeAt(index);\n /* istanbul ignore else */\n if (isIdentifierStart(ch) || isDecimalDigit(ch)) {\n throwUnexpectedToken();\n }\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 2),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanOctalLiteral(prefix, start) {\n var number, octal;\n\n if (isOctalDigit(prefix)) {\n octal = true;\n number = '0' + source[index++];\n } else {\n octal = false;\n ++index;\n number = '';\n }\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (!octal && number.length === 0) {\n // only 0o or 0O\n throwUnexpectedToken();\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 8),\n octal: octal,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function isImplicitOctalLiteral() {\n var i, ch;\n\n // Implicit octal, unless there is a non-octal digit.\n // (Annex B.1.1 on Numeric Literals)\n for (i = index + 1; i < length; ++i) {\n ch = source[i];\n if (ch === '8' || ch === '9') {\n return false;\n }\n if (!isOctalDigit(ch)) {\n return true;\n }\n }\n\n return true;\n }\n\n function scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n // Octal number in ES6 starts with '0o'.\n // Binary number in ES6 starts with '0b'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (ch === 'b' || ch === 'B') {\n ++index;\n return scanBinaryLiteral(start);\n }\n if (ch === 'o' || ch === 'O') {\n return scanOctalLiteral(ch, start);\n }\n\n if (isOctalDigit(ch)) {\n if (isImplicitOctalLiteral()) {\n return scanOctalLiteral(ch, start);\n }\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwUnexpectedToken();\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseFloat(number),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.4 String Literals\n\n function scanStringLiteral() {\n var str = '', quote, start, ch, unescaped, octToDec, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n unescaped = scanHexEscape(ch);\n if (!unescaped) {\n throw throwUnexpectedToken();\n }\n str += unescaped;\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n case '8':\n case '9':\n str += ch;\n tolerateUnexpectedToken();\n break;\n\n default:\n if (isOctalDigit(ch)) {\n octToDec = octalToDecimal(ch);\n\n octal = octToDec.octal || octal;\n str += String.fromCharCode(octToDec.code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n index = start;\n throwUnexpectedToken();\n }\n\n return {\n type: Token.StringLiteral,\n value: str,\n octal: octal,\n lineNumber: startLineNumber,\n lineStart: startLineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.6 Template Literal Lexical Components\n\n function scanTemplate() {\n var cooked = '', ch, start, rawOffset, terminated, head, tail, restore, unescaped;\n\n terminated = false;\n tail = false;\n start = index;\n head = (source[index] === '`');\n rawOffset = 2;\n\n ++index;\n\n while (index < length) {\n ch = source[index++];\n if (ch === '`') {\n rawOffset = 1;\n tail = true;\n terminated = true;\n break;\n } else if (ch === '$') {\n if (source[index] === '{') {\n state.curlyStack.push('${');\n ++index;\n terminated = true;\n break;\n }\n cooked += ch;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'n':\n cooked += '\\n';\n break;\n case 'r':\n cooked += '\\r';\n break;\n case 't':\n cooked += '\\t';\n break;\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n cooked += scanUnicodeCodePointEscape();\n } else {\n restore = index;\n unescaped = scanHexEscape(ch);\n if (unescaped) {\n cooked += unescaped;\n } else {\n index = restore;\n cooked += ch;\n }\n }\n break;\n case 'b':\n cooked += '\\b';\n break;\n case 'f':\n cooked += '\\f';\n break;\n case 'v':\n cooked += '\\v';\n break;\n\n default:\n if (ch === '0') {\n if (isDecimalDigit(source.charCodeAt(index))) {\n // Illegal: \\01 \\02 and so on\n throwError(Messages.TemplateOctalLiteral);\n }\n cooked += '\\0';\n } else if (isOctalDigit(ch)) {\n // Illegal: \\1 \\2\n throwError(Messages.TemplateOctalLiteral);\n } else {\n cooked += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n cooked += '\\n';\n } else {\n cooked += ch;\n }\n }\n\n if (!terminated) {\n throwUnexpectedToken();\n }\n\n if (!head) {\n state.curlyStack.pop();\n }\n\n return {\n type: Token.Template,\n value: {\n cooked: cooked,\n raw: source.slice(start + 1, index - rawOffset)\n },\n head: head,\n tail: tail,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.5 Regular Expression Literals\n\n function testRegExp(pattern, flags) {\n // The BMP character to use as a replacement for astral symbols when\n // translating an ES6 \"u\"-flagged pattern to an ES5-compatible\n // approximation.\n // Note: replacing with '\\uFFFF' enables false positives in unlikely\n // scenarios. For example, `[\\u{1044f}-\\u{10440}]` is an invalid\n // pattern that would not be detected by this substitution.\n var astralSubstitute = '\\uFFFF',\n tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n tmp = tmp\n // Replace every Unicode escape sequence with the equivalent\n // BMP character or a constant ASCII code point in the case of\n // astral symbols. (See the above note on `astralSubstitute`\n // for more information.)\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {\n var codePoint = parseInt($1 || $2, 16);\n if (codePoint > 0x10FFFF) {\n throwUnexpectedToken(null, Messages.InvalidRegExp);\n }\n if (codePoint <= 0xFFFF) {\n return String.fromCharCode(codePoint);\n }\n return astralSubstitute;\n })\n // Replace each paired surrogate with a single ASCII symbol to\n // avoid throwing on regular expressions that are only valid in\n // combination with the \"u\" flag.\n .replace(\n /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n astralSubstitute\n );\n }\n\n // First, detect invalid regular expressions.\n try {\n RegExp(tmp);\n } catch (e) {\n throwUnexpectedToken(null, Messages.InvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n }\n\n function scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n }\n\n function scanRegExpFlags() {\n var ch, str, flags, restore;\n\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n if (ch === '\\\\' && index < length) {\n ch = source[index];\n if (ch === 'u') {\n ++index;\n restore = index;\n ch = scanHexEscape('u');\n if (ch) {\n flags += ch;\n for (str += '\\\\u'; restore < index; ++restore) {\n str += source[restore];\n }\n } else {\n index = restore;\n flags += 'u';\n str += '\\\\u';\n }\n tolerateUnexpectedToken();\n } else {\n str += '\\\\';\n tolerateUnexpectedToken();\n }\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n return {\n value: flags,\n literal: str\n };\n }\n\n function scanRegExp() {\n var start, body, flags, value;\n scanning = true;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n scanning = false;\n if (extra.tokenize) {\n return {\n type: Token.RegularExpression,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n }\n\n function collectRegex() {\n var pos, loc, regex, token;\n\n skipComment();\n\n pos = index;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n regex = scanRegExp();\n\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n /* istanbul ignore next */\n if (!extra.tokenize) {\n // Pop the previous token, which is likely '/' or '/='\n if (extra.tokens.length > 0) {\n token = extra.tokens[extra.tokens.length - 1];\n if (token.range[0] === pos && token.type === 'Punctuator') {\n if (token.value === '/' || token.value === '/=') {\n extra.tokens.pop();\n }\n }\n }\n\n extra.tokens.push({\n type: 'RegularExpression',\n value: regex.literal,\n regex: regex.regex,\n range: [pos, index],\n loc: loc\n });\n }\n\n return regex;\n }\n\n function isIdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyword ||\n token.type === Token.BooleanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n // Using the following algorithm:\n // https://github.com/mozilla/sweet.js/wiki/design\n\n function advanceSlash() {\n var regex, previous, check;\n\n function testKeyword(value) {\n return value && (value.length > 1) && (value[0] >= 'a') && (value[0] <= 'z');\n }\n\n previous = extra.tokenValues[extra.tokens.length - 1];\n regex = (previous !== null);\n\n switch (previous) {\n case 'this':\n case ']':\n regex = false;\n break;\n\n case ')':\n check = extra.tokenValues[extra.openParenToken - 1];\n regex = (check === 'if' || check === 'while' || check === 'for' || check === 'with');\n break;\n\n case '}':\n // Dividing a function by anything makes little sense,\n // but we have to check for that.\n regex = false;\n if (testKeyword(extra.tokenValues[extra.openCurlyToken - 3])) {\n // Anonymous function, e.g. function(){} /42\n check = extra.tokenValues[extra.openCurlyToken - 4];\n regex = check ? (FnExprTokens.indexOf(check) < 0) : false;\n } else if (testKeyword(extra.tokenValues[extra.openCurlyToken - 4])) {\n // Named function, e.g. function f(){} /42/\n check = extra.tokenValues[extra.openCurlyToken - 5];\n regex = check ? (FnExprTokens.indexOf(check) < 0) : true;\n }\n }\n\n return regex ? collectRegex() : scanPunctuator();\n }\n\n function advance() {\n var cp, token;\n\n if (index >= length) {\n return {\n type: Token.EOF,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n }\n\n cp = source.charCodeAt(index);\n\n if (isIdentifierStart(cp)) {\n token = scanIdentifier();\n if (strict && isStrictModeReservedWord(token.value)) {\n token.type = Token.Keyword;\n }\n return token;\n }\n\n // Very common: ( and ) and ;\n if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (cp === 0x27 || cp === 0x22) {\n return scanStringLiteral();\n }\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (cp === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(cp)) {\n return scanNumericLiteral();\n }\n\n // Slash (/) U+002F can also start a regex.\n if (extra.tokenize && cp === 0x2F) {\n return advanceSlash();\n }\n\n // Template literals start with ` (U+0060) for template head\n // or } (U+007D) for template middle or template tail.\n if (cp === 0x60 || (cp === 0x7D && state.curlyStack[state.curlyStack.length - 1] === '${')) {\n return scanTemplate();\n }\n\n // Possible identifier start in a surrogate pair.\n if (cp >= 0xD800 && cp < 0xDFFF) {\n cp = codePointAt(index);\n if (isIdentifierStart(cp)) {\n return scanIdentifier();\n }\n }\n\n return scanPunctuator();\n }\n\n function collectToken() {\n var loc, token, value, entry;\n\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n token = advance();\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n if (token.type !== Token.EOF) {\n value = source.slice(token.start, token.end);\n entry = {\n type: TokenName[token.type],\n value: value,\n range: [token.start, token.end],\n loc: loc\n };\n if (token.regex) {\n entry.regex = {\n pattern: token.regex.pattern,\n flags: token.regex.flags\n };\n }\n if (extra.tokenValues) {\n extra.tokenValues.push((entry.type === 'Punctuator' || entry.type === 'Keyword') ? entry.value : null);\n }\n if (extra.tokenize) {\n if (!extra.range) {\n delete entry.range;\n }\n if (!extra.loc) {\n delete entry.loc;\n }\n if (extra.delegate) {\n entry = extra.delegate(entry);\n }\n }\n extra.tokens.push(entry);\n }\n\n return token;\n }\n\n function lex() {\n var token;\n scanning = true;\n\n lastIndex = index;\n lastLineNumber = lineNumber;\n lastLineStart = lineStart;\n\n skipComment();\n\n token = lookahead;\n\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n scanning = false;\n return token;\n }\n\n function peek() {\n scanning = true;\n\n skipComment();\n\n lastIndex = index;\n lastLineNumber = lineNumber;\n lastLineStart = lineStart;\n\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n scanning = false;\n }\n\n function Position() {\n this.line = startLineNumber;\n this.column = startIndex - startLineStart;\n }\n\n function SourceLocation() {\n this.start = new Position();\n this.end = null;\n }\n\n function WrappingSourceLocation(startToken) {\n this.start = {\n line: startToken.lineNumber,\n column: startToken.start - startToken.lineStart\n };\n this.end = null;\n }\n\n function Node() {\n if (extra.range) {\n this.range = [startIndex, 0];\n }\n if (extra.loc) {\n this.loc = new SourceLocation();\n }\n }\n\n function WrappingNode(startToken) {\n if (extra.range) {\n this.range = [startToken.start, 0];\n }\n if (extra.loc) {\n this.loc = new WrappingSourceLocation(startToken);\n }\n }\n\n WrappingNode.prototype = Node.prototype = {\n\n processComment: function () {\n var lastChild,\n innerComments,\n leadingComments,\n trailingComments,\n bottomRight = extra.bottomRightStack,\n i,\n comment,\n last = bottomRight[bottomRight.length - 1];\n\n if (this.type === Syntax.Program) {\n if (this.body.length > 0) {\n return;\n }\n }\n /**\n * patch innnerComments for properties empty block\n * `function a() {/** comments **\\/}`\n */\n\n if (this.type === Syntax.BlockStatement && this.body.length === 0) {\n innerComments = [];\n for (i = extra.leadingComments.length - 1; i >= 0; --i) {\n comment = extra.leadingComments[i];\n if (this.range[1] >= comment.range[1]) {\n innerComments.unshift(comment);\n extra.leadingComments.splice(i, 1);\n extra.trailingComments.splice(i, 1);\n }\n }\n if (innerComments.length) {\n this.innerComments = innerComments;\n //bottomRight.push(this);\n return;\n }\n }\n\n if (extra.trailingComments.length > 0) {\n trailingComments = [];\n for (i = extra.trailingComments.length - 1; i >= 0; --i) {\n comment = extra.trailingComments[i];\n if (comment.range[0] >= this.range[1]) {\n trailingComments.unshift(comment);\n extra.trailingComments.splice(i, 1);\n }\n }\n extra.trailingComments = [];\n } else {\n if (last && last.trailingComments && last.trailingComments[0].range[0] >= this.range[1]) {\n trailingComments = last.trailingComments;\n delete last.trailingComments;\n }\n }\n\n // Eating the stack.\n while (last && last.range[0] >= this.range[0]) {\n lastChild = bottomRight.pop();\n last = bottomRight[bottomRight.length - 1];\n }\n\n if (lastChild) {\n if (lastChild.leadingComments) {\n leadingComments = [];\n for (i = lastChild.leadingComments.length - 1; i >= 0; --i) {\n comment = lastChild.leadingComments[i];\n if (comment.range[1] <= this.range[0]) {\n leadingComments.unshift(comment);\n lastChild.leadingComments.splice(i, 1);\n }\n }\n\n if (!lastChild.leadingComments.length) {\n lastChild.leadingComments = undefined;\n }\n }\n } else if (extra.leadingComments.length > 0) {\n leadingComments = [];\n for (i = extra.leadingComments.length - 1; i >= 0; --i) {\n comment = extra.leadingComments[i];\n if (comment.range[1] <= this.range[0]) {\n leadingComments.unshift(comment);\n extra.leadingComments.splice(i, 1);\n }\n }\n }\n\n\n if (leadingComments && leadingComments.length > 0) {\n this.leadingComments = leadingComments;\n }\n if (trailingComments && trailingComments.length > 0) {\n this.trailingComments = trailingComments;\n }\n\n bottomRight.push(this);\n },\n\n finish: function () {\n if (extra.range) {\n this.range[1] = lastIndex;\n }\n if (extra.loc) {\n this.loc.end = {\n line: lastLineNumber,\n column: lastIndex - lastLineStart\n };\n if (extra.source) {\n this.loc.source = extra.source;\n }\n }\n\n if (extra.attachComment) {\n this.processComment();\n }\n },\n\n finishArrayExpression: function (elements) {\n this.type = Syntax.ArrayExpression;\n this.elements = elements;\n this.finish();\n return this;\n },\n\n finishArrayPattern: function (elements) {\n this.type = Syntax.ArrayPattern;\n this.elements = elements;\n this.finish();\n return this;\n },\n\n finishArrowFunctionExpression: function (params, defaults, body, expression) {\n this.type = Syntax.ArrowFunctionExpression;\n this.id = null;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = false;\n this.expression = expression;\n this.finish();\n return this;\n },\n\n finishAssignmentExpression: function (operator, left, right) {\n this.type = Syntax.AssignmentExpression;\n this.operator = operator;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishAssignmentPattern: function (left, right) {\n this.type = Syntax.AssignmentPattern;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishBinaryExpression: function (operator, left, right) {\n this.type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : Syntax.BinaryExpression;\n this.operator = operator;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishBlockStatement: function (body) {\n this.type = Syntax.BlockStatement;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishBreakStatement: function (label) {\n this.type = Syntax.BreakStatement;\n this.label = label;\n this.finish();\n return this;\n },\n\n finishCallExpression: function (callee, args) {\n this.type = Syntax.CallExpression;\n this.callee = callee;\n this.arguments = args;\n this.finish();\n return this;\n },\n\n finishCatchClause: function (param, body) {\n this.type = Syntax.CatchClause;\n this.param = param;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassBody: function (body) {\n this.type = Syntax.ClassBody;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassDeclaration: function (id, superClass, body) {\n this.type = Syntax.ClassDeclaration;\n this.id = id;\n this.superClass = superClass;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassExpression: function (id, superClass, body) {\n this.type = Syntax.ClassExpression;\n this.id = id;\n this.superClass = superClass;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishConditionalExpression: function (test, consequent, alternate) {\n this.type = Syntax.ConditionalExpression;\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n this.finish();\n return this;\n },\n\n finishContinueStatement: function (label) {\n this.type = Syntax.ContinueStatement;\n this.label = label;\n this.finish();\n return this;\n },\n\n finishDebuggerStatement: function () {\n this.type = Syntax.DebuggerStatement;\n this.finish();\n return this;\n },\n\n finishDoWhileStatement: function (body, test) {\n this.type = Syntax.DoWhileStatement;\n this.body = body;\n this.test = test;\n this.finish();\n return this;\n },\n\n finishEmptyStatement: function () {\n this.type = Syntax.EmptyStatement;\n this.finish();\n return this;\n },\n\n finishExpressionStatement: function (expression) {\n this.type = Syntax.ExpressionStatement;\n this.expression = expression;\n this.finish();\n return this;\n },\n\n finishForStatement: function (init, test, update, body) {\n this.type = Syntax.ForStatement;\n this.init = init;\n this.test = test;\n this.update = update;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishForOfStatement: function (left, right, body) {\n this.type = Syntax.ForOfStatement;\n this.left = left;\n this.right = right;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishForInStatement: function (left, right, body) {\n this.type = Syntax.ForInStatement;\n this.left = left;\n this.right = right;\n this.body = body;\n this.each = false;\n this.finish();\n return this;\n },\n\n finishFunctionDeclaration: function (id, params, defaults, body, generator) {\n this.type = Syntax.FunctionDeclaration;\n this.id = id;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = generator;\n this.expression = false;\n this.finish();\n return this;\n },\n\n finishFunctionExpression: function (id, params, defaults, body, generator) {\n this.type = Syntax.FunctionExpression;\n this.id = id;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = generator;\n this.expression = false;\n this.finish();\n return this;\n },\n\n finishIdentifier: function (name) {\n this.type = Syntax.Identifier;\n this.name = name;\n this.finish();\n return this;\n },\n\n finishIfStatement: function (test, consequent, alternate) {\n this.type = Syntax.IfStatement;\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n this.finish();\n return this;\n },\n\n finishLabeledStatement: function (label, body) {\n this.type = Syntax.LabeledStatement;\n this.label = label;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishLiteral: function (token) {\n this.type = Syntax.Literal;\n this.value = token.value;\n this.raw = source.slice(token.start, token.end);\n if (token.regex) {\n this.regex = token.regex;\n }\n this.finish();\n return this;\n },\n\n finishMemberExpression: function (accessor, object, property) {\n this.type = Syntax.MemberExpression;\n this.computed = accessor === '[';\n this.object = object;\n this.property = property;\n this.finish();\n return this;\n },\n\n finishMetaProperty: function (meta, property) {\n this.type = Syntax.MetaProperty;\n this.meta = meta;\n this.property = property;\n this.finish();\n return this;\n },\n\n finishNewExpression: function (callee, args) {\n this.type = Syntax.NewExpression;\n this.callee = callee;\n this.arguments = args;\n this.finish();\n return this;\n },\n\n finishObjectExpression: function (properties) {\n this.type = Syntax.ObjectExpression;\n this.properties = properties;\n this.finish();\n return this;\n },\n\n finishObjectPattern: function (properties) {\n this.type = Syntax.ObjectPattern;\n this.properties = properties;\n this.finish();\n return this;\n },\n\n finishPostfixExpression: function (operator, argument) {\n this.type = Syntax.UpdateExpression;\n this.operator = operator;\n this.argument = argument;\n this.prefix = false;\n this.finish();\n return this;\n },\n\n finishProgram: function (body, sourceType) {\n this.type = Syntax.Program;\n this.body = body;\n this.sourceType = sourceType;\n this.finish();\n return this;\n },\n\n finishProperty: function (kind, key, computed, value, method, shorthand) {\n this.type = Syntax.Property;\n this.key = key;\n this.computed = computed;\n this.value = value;\n this.kind = kind;\n this.method = method;\n this.shorthand = shorthand;\n this.finish();\n return this;\n },\n\n finishRestElement: function (argument) {\n this.type = Syntax.RestElement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishReturnStatement: function (argument) {\n this.type = Syntax.ReturnStatement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishSequenceExpression: function (expressions) {\n this.type = Syntax.SequenceExpression;\n this.expressions = expressions;\n this.finish();\n return this;\n },\n\n finishSpreadElement: function (argument) {\n this.type = Syntax.SpreadElement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishSwitchCase: function (test, consequent) {\n this.type = Syntax.SwitchCase;\n this.test = test;\n this.consequent = consequent;\n this.finish();\n return this;\n },\n\n finishSuper: function () {\n this.type = Syntax.Super;\n this.finish();\n return this;\n },\n\n finishSwitchStatement: function (discriminant, cases) {\n this.type = Syntax.SwitchStatement;\n this.discriminant = discriminant;\n this.cases = cases;\n this.finish();\n return this;\n },\n\n finishTaggedTemplateExpression: function (tag, quasi) {\n this.type = Syntax.TaggedTemplateExpression;\n this.tag = tag;\n this.quasi = quasi;\n this.finish();\n return this;\n },\n\n finishTemplateElement: function (value, tail) {\n this.type = Syntax.TemplateElement;\n this.value = value;\n this.tail = tail;\n this.finish();\n return this;\n },\n\n finishTemplateLiteral: function (quasis, expressions) {\n this.type = Syntax.TemplateLiteral;\n this.quasis = quasis;\n this.expressions = expressions;\n this.finish();\n return this;\n },\n\n finishThisExpression: function () {\n this.type = Syntax.ThisExpression;\n this.finish();\n return this;\n },\n\n finishThrowStatement: function (argument) {\n this.type = Syntax.ThrowStatement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishTryStatement: function (block, handler, finalizer) {\n this.type = Syntax.TryStatement;\n this.block = block;\n this.guardedHandlers = [];\n this.handlers = handler ? [handler] : [];\n this.handler = handler;\n this.finalizer = finalizer;\n this.finish();\n return this;\n },\n\n finishUnaryExpression: function (operator, argument) {\n this.type = (operator === '++' || operator === '--') ? Syntax.UpdateExpression : Syntax.UnaryExpression;\n this.operator = operator;\n this.argument = argument;\n this.prefix = true;\n this.finish();\n return this;\n },\n\n finishVariableDeclaration: function (declarations) {\n this.type = Syntax.VariableDeclaration;\n this.declarations = declarations;\n this.kind = 'var';\n this.finish();\n return this;\n },\n\n finishLexicalDeclaration: function (declarations, kind) {\n this.type = Syntax.VariableDeclaration;\n this.declarations = declarations;\n this.kind = kind;\n this.finish();\n return this;\n },\n\n finishVariableDeclarator: function (id, init) {\n this.type = Syntax.VariableDeclarator;\n this.id = id;\n this.init = init;\n this.finish();\n return this;\n },\n\n finishWhileStatement: function (test, body) {\n this.type = Syntax.WhileStatement;\n this.test = test;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishWithStatement: function (object, body) {\n this.type = Syntax.WithStatement;\n this.object = object;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishExportSpecifier: function (local, exported) {\n this.type = Syntax.ExportSpecifier;\n this.exported = exported || local;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishImportDefaultSpecifier: function (local) {\n this.type = Syntax.ImportDefaultSpecifier;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishImportNamespaceSpecifier: function (local) {\n this.type = Syntax.ImportNamespaceSpecifier;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishExportNamedDeclaration: function (declaration, specifiers, src) {\n this.type = Syntax.ExportNamedDeclaration;\n this.declaration = declaration;\n this.specifiers = specifiers;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishExportDefaultDeclaration: function (declaration) {\n this.type = Syntax.ExportDefaultDeclaration;\n this.declaration = declaration;\n this.finish();\n return this;\n },\n\n finishExportAllDeclaration: function (src) {\n this.type = Syntax.ExportAllDeclaration;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishImportSpecifier: function (local, imported) {\n this.type = Syntax.ImportSpecifier;\n this.local = local || imported;\n this.imported = imported;\n this.finish();\n return this;\n },\n\n finishImportDeclaration: function (specifiers, src) {\n this.type = Syntax.ImportDeclaration;\n this.specifiers = specifiers;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishYieldExpression: function (argument, delegate) {\n this.type = Syntax.YieldExpression;\n this.argument = argument;\n this.delegate = delegate;\n this.finish();\n return this;\n }\n };\n\n\n function recordError(error) {\n var e, existing;\n\n for (e = 0; e < extra.errors.length; e++) {\n existing = extra.errors[e];\n // Prevent duplicated error.\n /* istanbul ignore next */\n if (existing.index === error.index && existing.message === error.message) {\n return;\n }\n }\n\n extra.errors.push(error);\n }\n\n function constructError(msg, column) {\n var error = new Error(msg);\n try {\n throw error;\n } catch (base) {\n /* istanbul ignore else */\n if (Object.create && Object.defineProperty) {\n error = Object.create(base);\n Object.defineProperty(error, 'column', { value: column });\n }\n } finally {\n return error;\n }\n }\n\n function createError(line, pos, description) {\n var msg, column, error;\n\n msg = 'Line ' + line + ': ' + description;\n column = pos - (scanning ? lineStart : lastLineStart) + 1;\n error = constructError(msg, column);\n error.lineNumber = line;\n error.description = description;\n error.index = pos;\n return error;\n }\n\n // Throw an exception\n\n function throwError(messageFormat) {\n var args, msg;\n\n args = Array.prototype.slice.call(arguments, 1);\n msg = messageFormat.replace(/%(\\d)/g,\n function (whole, idx) {\n assert(idx < args.length, 'Message reference must be in range');\n return args[idx];\n }\n );\n\n throw createError(lastLineNumber, lastIndex, msg);\n }\n\n function tolerateError(messageFormat) {\n var args, msg, error;\n\n args = Array.prototype.slice.call(arguments, 1);\n /* istanbul ignore next */\n msg = messageFormat.replace(/%(\\d)/g,\n function (whole, idx) {\n assert(idx < args.length, 'Message reference must be in range');\n return args[idx];\n }\n );\n\n error = createError(lineNumber, lastIndex, msg);\n if (extra.errors) {\n recordError(error);\n } else {\n throw error;\n }\n }\n\n // Throw an exception because of the token.\n\n function unexpectedTokenError(token, message) {\n var value, msg = message || Messages.UnexpectedToken;\n\n if (token) {\n if (!message) {\n msg = (token.type === Token.EOF) ? Messages.UnexpectedEOS :\n (token.type === Token.Identifier) ? Messages.UnexpectedIdentifier :\n (token.type === Token.NumericLiteral) ? Messages.UnexpectedNumber :\n (token.type === Token.StringLiteral) ? Messages.UnexpectedString :\n (token.type === Token.Template) ? Messages.UnexpectedTemplate :\n Messages.UnexpectedToken;\n\n if (token.type === Token.Keyword) {\n if (isFutureReservedWord(token.value)) {\n msg = Messages.UnexpectedReserved;\n } else if (strict && isStrictModeReservedWord(token.value)) {\n msg = Messages.StrictReservedWord;\n }\n }\n }\n\n value = (token.type === Token.Template) ? token.value.raw : token.value;\n } else {\n value = 'ILLEGAL';\n }\n\n msg = msg.replace('%0', value);\n\n return (token && typeof token.lineNumber === 'number') ?\n createError(token.lineNumber, token.start, msg) :\n createError(scanning ? lineNumber : lastLineNumber, scanning ? index : lastIndex, msg);\n }\n\n function throwUnexpectedToken(token, message) {\n throw unexpectedTokenError(token, message);\n }\n\n function tolerateUnexpectedToken(token, message) {\n var error = unexpectedTokenError(token, message);\n if (extra.errors) {\n recordError(error);\n } else {\n throw error;\n }\n }\n\n // Expect the next token to match the specified punctuator.\n // If not, an exception will be thrown.\n\n function expect(value) {\n var token = lex();\n if (token.type !== Token.Punctuator || token.value !== value) {\n throwUnexpectedToken(token);\n }\n }\n\n /**\n * @name expectCommaSeparator\n * @description Quietly expect a comma when in tolerant mode, otherwise delegates\n * to <code>expect(value)</code>\n * @since 2.0\n */\n function expectCommaSeparator() {\n var token;\n\n if (extra.errors) {\n token = lookahead;\n if (token.type === Token.Punctuator && token.value === ',') {\n lex();\n } else if (token.type === Token.Punctuator && token.value === ';') {\n lex();\n tolerateUnexpectedToken(token);\n } else {\n tolerateUnexpectedToken(token, Messages.UnexpectedToken);\n }\n } else {\n expect(',');\n }\n }\n\n // Expect the next token to match the specified keyword.\n // If not, an exception will be thrown.\n\n function expectKeyword(keyword) {\n var token = lex();\n if (token.type !== Token.Keyword || token.value !== keyword) {\n throwUnexpectedToken(token);\n }\n }\n\n // Return true if the next token matches the specified punctuator.\n\n function match(value) {\n return lookahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyword\n\n function matchKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead.value === keyword;\n }\n\n // Return true if the next token matches the specified contextual keyword\n // (where an identifier is sometimes a keyword depending on the context)\n\n function matchContextualKeyword(keyword) {\n return lookahead.type === Token.Identifier && lookahead.value === keyword;\n }\n\n // Return true if the next token is an assignment operator\n\n function matchAssign() {\n var op;\n\n if (lookahead.type !== Token.Punctuator) {\n return false;\n }\n op = lookahead.value;\n return op === '=' ||\n op === '*=' ||\n op === '/=' ||\n op === '%=' ||\n op === '+=' ||\n op === '-=' ||\n op === '<<=' ||\n op === '>>=' ||\n op === '>>>=' ||\n op === '&=' ||\n op === '^=' ||\n op === '|=';\n }\n\n function consumeSemicolon() {\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(startIndex) === 0x3B || match(';')) {\n lex();\n return;\n }\n\n if (hasLineTerminator) {\n return;\n }\n\n // FIXME(ikarienator): this is seemingly an issue in the previous location info convention.\n lastIndex = startIndex;\n lastLineNumber = startLineNumber;\n lastLineStart = startLineStart;\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpectedToken(lookahead);\n }\n }\n\n // Cover grammar support.\n //\n // When an assignment expression position starts with an left parenthesis, the determination of the type\n // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n //\n // There are three productions that can be parsed in a parentheses pair that needs to be determined\n // after the outermost pair is closed. They are:\n //\n // 1. AssignmentExpression\n // 2. BindingElements\n // 3. AssignmentTargets\n //\n // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n // binding element or assignment target.\n //\n // The three productions have the relationship:\n //\n // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression\n //\n // with a single exception that CoverInitializedName when used directly in an Expression, generates\n // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n //\n // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n // the CoverInitializedName check is conducted.\n //\n // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n // pattern. The CoverInitializedName check is deferred.\n function isolateCoverGrammar(parser) {\n var oldIsBindingElement = isBindingElement,\n oldIsAssignmentTarget = isAssignmentTarget,\n oldFirstCoverInitializedNameError = firstCoverInitializedNameError,\n result;\n isBindingElement = true;\n isAssignmentTarget = true;\n firstCoverInitializedNameError = null;\n result = parser();\n if (firstCoverInitializedNameError !== null) {\n throwUnexpectedToken(firstCoverInitializedNameError);\n }\n isBindingElement = oldIsBindingElement;\n isAssignmentTarget = oldIsAssignmentTarget;\n firstCoverInitializedNameError = oldFirstCoverInitializedNameError;\n return result;\n }\n\n function inheritCoverGrammar(parser) {\n var oldIsBindingElement = isBindingElement,\n oldIsAssignmentTarget = isAssignmentTarget,\n oldFirstCoverInitializedNameError = firstCoverInitializedNameError,\n result;\n isBindingElement = true;\n isAssignmentTarget = true;\n firstCoverInitializedNameError = null;\n result = parser();\n isBindingElement = isBindingElement && oldIsBindingElement;\n isAssignmentTarget = isAssignmentTarget && oldIsAssignmentTarget;\n firstCoverInitializedNameError = oldFirstCoverInitializedNameError || firstCoverInitializedNameError;\n return result;\n }\n\n // ECMA-262 13.3.3 Destructuring Binding Patterns\n\n function parseArrayPattern(params, kind) {\n var node = new Node(), elements = [], rest, restNode;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n if (match('...')) {\n restNode = new Node();\n lex();\n params.push(lookahead);\n rest = parseVariableIdentifier(kind);\n elements.push(restNode.finishRestElement(rest));\n break;\n } else {\n elements.push(parsePatternWithDefault(params, kind));\n }\n if (!match(']')) {\n expect(',');\n }\n }\n\n }\n\n expect(']');\n\n return node.finishArrayPattern(elements);\n }\n\n function parsePropertyPattern(params, kind) {\n var node = new Node(), key, keyToken, computed = match('['), init;\n if (lookahead.type === Token.Identifier) {\n keyToken = lookahead;\n key = parseVariableIdentifier();\n if (match('=')) {\n params.push(keyToken);\n lex();\n init = parseAssignmentExpression();\n\n return node.finishProperty(\n 'init', key, false,\n new WrappingNode(keyToken).finishAssignmentPattern(key, init), false, true);\n } else if (!match(':')) {\n params.push(keyToken);\n return node.finishProperty('init', key, false, key, false, true);\n }\n } else {\n key = parseObjectPropertyKey();\n }\n expect(':');\n init = parsePatternWithDefault(params, kind);\n return node.finishProperty('init', key, computed, init, false, false);\n }\n\n function parseObjectPattern(params, kind) {\n var node = new Node(), properties = [];\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parsePropertyPattern(params, kind));\n if (!match('}')) {\n expect(',');\n }\n }\n\n lex();\n\n return node.finishObjectPattern(properties);\n }\n\n function parsePattern(params, kind) {\n if (match('[')) {\n return parseArrayPattern(params, kind);\n } else if (match('{')) {\n return parseObjectPattern(params, kind);\n } else if (matchKeyword('let')) {\n if (kind === 'const' || kind === 'let') {\n tolerateUnexpectedToken(lookahead, Messages.UnexpectedToken);\n }\n }\n\n params.push(lookahead);\n return parseVariableIdentifier(kind);\n }\n\n function parsePatternWithDefault(params, kind) {\n var startToken = lookahead, pattern, previousAllowYield, right;\n pattern = parsePattern(params, kind);\n if (match('=')) {\n lex();\n previousAllowYield = state.allowYield;\n state.allowYield = true;\n right = isolateCoverGrammar(parseAssignmentExpression);\n state.allowYield = previousAllowYield;\n pattern = new WrappingNode(startToken).finishAssignmentPattern(pattern, right);\n }\n return pattern;\n }\n\n // ECMA-262 12.2.5 Array Initializer\n\n function parseArrayInitializer() {\n var elements = [], node = new Node(), restSpread;\n\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else if (match('...')) {\n restSpread = new Node();\n lex();\n restSpread.finishSpreadElement(inheritCoverGrammar(parseAssignmentExpression));\n\n if (!match(']')) {\n isAssignmentTarget = isBindingElement = false;\n expect(',');\n }\n elements.push(restSpread);\n } else {\n elements.push(inheritCoverGrammar(parseAssignmentExpression));\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return node.finishArrayExpression(elements);\n }\n\n // ECMA-262 12.2.6 Object Initializer\n\n function parsePropertyFunction(node, paramInfo, isGenerator) {\n var previousStrict, body;\n\n isAssignmentTarget = isBindingElement = false;\n\n previousStrict = strict;\n body = isolateCoverGrammar(parseFunctionSourceElements);\n\n if (strict && paramInfo.firstRestricted) {\n tolerateUnexpectedToken(paramInfo.firstRestricted, paramInfo.message);\n }\n if (strict && paramInfo.stricted) {\n tolerateUnexpectedToken(paramInfo.stricted, paramInfo.message);\n }\n\n strict = previousStrict;\n return node.finishFunctionExpression(null, paramInfo.params, paramInfo.defaults, body, isGenerator);\n }\n\n function parsePropertyMethodFunction() {\n var params, method, node = new Node(),\n previousAllowYield = state.allowYield;\n\n state.allowYield = false;\n params = parseParams();\n state.allowYield = previousAllowYield;\n\n state.allowYield = false;\n method = parsePropertyFunction(node, params, false);\n state.allowYield = previousAllowYield;\n\n return method;\n }\n\n function parseObjectPropertyKey() {\n var token, node = new Node(), expr;\n\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n switch (token.type) {\n case Token.StringLiteral:\n case Token.NumericLiteral:\n if (strict && token.octal) {\n tolerateUnexpectedToken(token, Messages.StrictOctalLiteral);\n }\n return node.finishLiteral(token);\n case Token.Identifier:\n case Token.BooleanLiteral:\n case Token.NullLiteral:\n case Token.Keyword:\n return node.finishIdentifier(token.value);\n case Token.Punctuator:\n if (token.value === '[') {\n expr = isolateCoverGrammar(parseAssignmentExpression);\n expect(']');\n return expr;\n }\n break;\n }\n throwUnexpectedToken(token);\n }\n\n function lookaheadPropertyName() {\n switch (lookahead.type) {\n case Token.Identifier:\n case Token.StringLiteral:\n case Token.BooleanLiteral:\n case Token.NullLiteral:\n case Token.NumericLiteral:\n case Token.Keyword:\n return true;\n case Token.Punctuator:\n return lookahead.value === '[';\n }\n return false;\n }\n\n // This function is to try to parse a MethodDefinition as defined in 14.3. But in the case of object literals,\n // it might be called at a position where there is in fact a short hand identifier pattern or a data property.\n // This can only be determined after we consumed up to the left parentheses.\n //\n // In order to avoid back tracking, it returns `null` if the position is not a MethodDefinition and the caller\n // is responsible to visit other options.\n function tryParseMethodDefinition(token, key, computed, node) {\n var value, options, methodNode, params,\n previousAllowYield = state.allowYield;\n\n if (token.type === Token.Identifier) {\n // check for `get` and `set`;\n\n if (token.value === 'get' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n expect('(');\n expect(')');\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, {\n params: [],\n defaults: [],\n stricted: null,\n firstRestricted: null,\n message: null\n }, false);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('get', key, computed, value, false, false);\n } else if (token.value === 'set' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n expect('(');\n\n options = {\n params: [],\n defaultCount: 0,\n defaults: [],\n firstRestricted: null,\n paramSet: {}\n };\n if (match(')')) {\n tolerateUnexpectedToken(lookahead);\n } else {\n state.allowYield = false;\n parseParam(options);\n state.allowYield = previousAllowYield;\n if (options.defaultCount === 0) {\n options.defaults = [];\n }\n }\n expect(')');\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, options, false);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('set', key, computed, value, false, false);\n }\n } else if (token.type === Token.Punctuator && token.value === '*' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n\n state.allowYield = true;\n params = parseParams();\n state.allowYield = previousAllowYield;\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, params, true);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('init', key, computed, value, true, false);\n }\n\n if (key && match('(')) {\n value = parsePropertyMethodFunction();\n return node.finishProperty('init', key, computed, value, true, false);\n }\n\n // Not a MethodDefinition.\n return null;\n }\n\n function parseObjectProperty(hasProto) {\n var token = lookahead, node = new Node(), computed, key, maybeMethod, proto, value;\n\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n }\n maybeMethod = tryParseMethodDefinition(token, key, computed, node);\n if (maybeMethod) {\n return maybeMethod;\n }\n\n if (!key) {\n throwUnexpectedToken(lookahead);\n }\n\n // Check for duplicated __proto__\n if (!computed) {\n proto = (key.type === Syntax.Identifier && key.name === '__proto__') ||\n (key.type === Syntax.Literal && key.value === '__proto__');\n if (hasProto.value && proto) {\n tolerateError(Messages.DuplicateProtoProperty);\n }\n hasProto.value |= proto;\n }\n\n if (match(':')) {\n lex();\n value = inheritCoverGrammar(parseAssignmentExpression);\n return node.finishProperty('init', key, computed, value, false, false);\n }\n\n if (token.type === Token.Identifier) {\n if (match('=')) {\n firstCoverInitializedNameError = lookahead;\n lex();\n value = isolateCoverGrammar(parseAssignmentExpression);\n return node.finishProperty('init', key, computed,\n new WrappingNode(token).finishAssignmentPattern(key, value), false, true);\n }\n return node.finishProperty('init', key, computed, key, false, true);\n }\n\n throwUnexpectedToken(lookahead);\n }\n\n function parseObjectInitializer() {\n var properties = [], hasProto = {value: false}, node = new Node();\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parseObjectProperty(hasProto));\n\n if (!match('}')) {\n expectCommaSeparator();\n }\n }\n\n expect('}');\n\n return node.finishObjectExpression(properties);\n }\n\n function reinterpretExpressionAsPattern(expr) {\n var i;\n switch (expr.type) {\n case Syntax.Identifier:\n case Syntax.MemberExpression:\n case Syntax.RestElement:\n case Syntax.AssignmentPattern:\n break;\n case Syntax.SpreadElement:\n expr.type = Syntax.RestElement;\n reinterpretExpressionAsPattern(expr.argument);\n break;\n case Syntax.ArrayExpression:\n expr.type = Syntax.ArrayPattern;\n for (i = 0; i < expr.elements.length; i++) {\n if (expr.elements[i] !== null) {\n reinterpretExpressionAsPattern(expr.elements[i]);\n }\n }\n break;\n case Syntax.ObjectExpression:\n expr.type = Syntax.ObjectPattern;\n for (i = 0; i < expr.properties.length; i++) {\n reinterpretExpressionAsPattern(expr.properties[i].value);\n }\n break;\n case Syntax.AssignmentExpression:\n expr.type = Syntax.AssignmentPattern;\n reinterpretExpressionAsPattern(expr.left);\n break;\n default:\n // Allow other node type for tolerant parsing.\n break;\n }\n }\n\n // ECMA-262 12.2.9 Template Literals\n\n function parseTemplateElement(option) {\n var node, token;\n\n if (lookahead.type !== Token.Template || (option.head && !lookahead.head)) {\n throwUnexpectedToken();\n }\n\n node = new Node();\n token = lex();\n\n return node.finishTemplateElement({ raw: token.value.raw, cooked: token.value.cooked }, token.tail);\n }\n\n function parseTemplateLiteral() {\n var quasi, quasis, expressions, node = new Node();\n\n quasi = parseTemplateElement({ head: true });\n quasis = [quasi];\n expressions = [];\n\n while (!quasi.tail) {\n expressions.push(parseExpression());\n quasi = parseTemplateElement({ head: false });\n quasis.push(quasi);\n }\n\n return node.finishTemplateLiteral(quasis, expressions);\n }\n\n // ECMA-262 12.2.10 The Grouping Operator\n\n function parseGroupExpression() {\n var expr, expressions, startToken, i, params = [];\n\n expect('(');\n\n if (match(')')) {\n lex();\n if (!match('=>')) {\n expect('=>');\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [],\n rawParams: []\n };\n }\n\n startToken = lookahead;\n if (match('...')) {\n expr = parseRestElement(params);\n expect(')');\n if (!match('=>')) {\n expect('=>');\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [expr]\n };\n }\n\n isBindingElement = true;\n expr = inheritCoverGrammar(parseAssignmentExpression);\n\n if (match(',')) {\n isAssignmentTarget = false;\n expressions = [expr];\n\n while (startIndex < length) {\n if (!match(',')) {\n break;\n }\n lex();\n\n if (match('...')) {\n if (!isBindingElement) {\n throwUnexpectedToken(lookahead);\n }\n expressions.push(parseRestElement(params));\n expect(')');\n if (!match('=>')) {\n expect('=>');\n }\n isBindingElement = false;\n for (i = 0; i < expressions.length; i++) {\n reinterpretExpressionAsPattern(expressions[i]);\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: expressions\n };\n }\n\n expressions.push(inheritCoverGrammar(parseAssignmentExpression));\n }\n\n expr = new WrappingNode(startToken).finishSequenceExpression(expressions);\n }\n\n\n expect(')');\n\n if (match('=>')) {\n if (expr.type === Syntax.Identifier && expr.name === 'yield') {\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [expr]\n };\n }\n\n if (!isBindingElement) {\n throwUnexpectedToken(lookahead);\n }\n\n if (expr.type === Syntax.SequenceExpression) {\n for (i = 0; i < expr.expressions.length; i++) {\n reinterpretExpressionAsPattern(expr.expressions[i]);\n }\n } else {\n reinterpretExpressionAsPattern(expr);\n }\n\n expr = {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: expr.type === Syntax.SequenceExpression ? expr.expressions : [expr]\n };\n }\n isBindingElement = false;\n return expr;\n }\n\n\n // ECMA-262 12.2 Primary Expressions\n\n function parsePrimaryExpression() {\n var type, token, expr, node;\n\n if (match('(')) {\n isBindingElement = false;\n return inheritCoverGrammar(parseGroupExpression);\n }\n\n if (match('[')) {\n return inheritCoverGrammar(parseArrayInitializer);\n }\n\n if (match('{')) {\n return inheritCoverGrammar(parseObjectInitializer);\n }\n\n type = lookahead.type;\n node = new Node();\n\n if (type === Token.Identifier) {\n if (state.sourceType === 'module' && lookahead.value === 'await') {\n tolerateUnexpectedToken(lookahead);\n }\n expr = node.finishIdentifier(lex().value);\n } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {\n isAssignmentTarget = isBindingElement = false;\n if (strict && lookahead.octal) {\n tolerateUnexpectedToken(lookahead, Messages.StrictOctalLiteral);\n }\n expr = node.finishLiteral(lex());\n } else if (type === Token.Keyword) {\n if (!strict && state.allowYield && matchKeyword('yield')) {\n return parseNonComputedProperty();\n }\n if (!strict && matchKeyword('let')) {\n return node.finishIdentifier(lex().value);\n }\n isAssignmentTarget = isBindingElement = false;\n if (matchKeyword('function')) {\n return parseFunctionExpression();\n }\n if (matchKeyword('this')) {\n lex();\n return node.finishThisExpression();\n }\n if (matchKeyword('class')) {\n return parseClassExpression();\n }\n throwUnexpectedToken(lex());\n } else if (type === Token.BooleanLiteral) {\n isAssignmentTarget = isBindingElement = false;\n token = lex();\n token.value = (token.value === 'true');\n expr = node.finishLiteral(token);\n } else if (type === Token.NullLiteral) {\n isAssignmentTarget = isBindingElement = false;\n token = lex();\n token.value = null;\n expr = node.finishLiteral(token);\n } else if (match('/') || match('/=')) {\n isAssignmentTarget = isBindingElement = false;\n index = startIndex;\n\n if (typeof extra.tokens !== 'undefined') {\n token = collectRegex();\n } else {\n token = scanRegExp();\n }\n lex();\n expr = node.finishLiteral(token);\n } else if (type === Token.Template) {\n expr = parseTemplateLiteral();\n } else {\n throwUnexpectedToken(lex());\n }\n\n return expr;\n }\n\n // ECMA-262 12.3 Left-Hand-Side Expressions\n\n function parseArguments() {\n var args = [], expr;\n\n expect('(');\n\n if (!match(')')) {\n while (startIndex < length) {\n if (match('...')) {\n expr = new Node();\n lex();\n expr.finishSpreadElement(isolateCoverGrammar(parseAssignmentExpression));\n } else {\n expr = isolateCoverGrammar(parseAssignmentExpression);\n }\n args.push(expr);\n if (match(')')) {\n break;\n }\n expectCommaSeparator();\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token, node = new Node();\n\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpectedToken(token);\n }\n\n return node.finishIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = isolateCoverGrammar(parseExpression);\n\n expect(']');\n\n return expr;\n }\n\n // ECMA-262 12.3.3 The new Operator\n\n function parseNewExpression() {\n var callee, args, node = new Node();\n\n expectKeyword('new');\n\n if (match('.')) {\n lex();\n if (lookahead.type === Token.Identifier && lookahead.value === 'target') {\n if (state.inFunctionBody) {\n lex();\n return node.finishMetaProperty('new', 'target');\n }\n }\n throwUnexpectedToken(lookahead);\n }\n\n callee = isolateCoverGrammar(parseLeftHandSideExpression);\n args = match('(') ? parseArguments() : [];\n\n isAssignmentTarget = isBindingElement = false;\n\n return node.finishNewExpression(callee, args);\n }\n\n // ECMA-262 12.3.4 Function Calls\n\n function parseLeftHandSideExpressionAllowCall() {\n var quasi, expr, args, property, startToken, previousAllowIn = state.allowIn;\n\n startToken = lookahead;\n state.allowIn = true;\n\n if (matchKeyword('super') && state.inFunctionBody) {\n expr = new Node();\n lex();\n expr = expr.finishSuper();\n if (!match('(') && !match('.') && !match('[')) {\n throwUnexpectedToken(lookahead);\n }\n } else {\n expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);\n }\n\n for (;;) {\n if (match('.')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseNonComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n isBindingElement = false;\n isAssignmentTarget = false;\n args = parseArguments();\n expr = new WrappingNode(startToken).finishCallExpression(expr, args);\n } else if (match('[')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);\n } else if (lookahead.type === Token.Template && lookahead.head) {\n quasi = parseTemplateLiteral();\n expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);\n } else {\n break;\n }\n }\n state.allowIn = previousAllowIn;\n\n return expr;\n }\n\n // ECMA-262 12.3 Left-Hand-Side Expressions\n\n function parseLeftHandSideExpression() {\n var quasi, expr, property, startToken;\n assert(state.allowIn, 'callee of new expression always allow in keyword.');\n\n startToken = lookahead;\n\n if (matchKeyword('super') && state.inFunctionBody) {\n expr = new Node();\n lex();\n expr = expr.finishSuper();\n if (!match('[') && !match('.')) {\n throwUnexpectedToken(lookahead);\n }\n } else {\n expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);\n }\n\n for (;;) {\n if (match('[')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);\n } else if (match('.')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseNonComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);\n } else if (lookahead.type === Token.Template && lookahead.head) {\n quasi = parseTemplateLiteral();\n expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);\n } else {\n break;\n }\n }\n return expr;\n }\n\n // ECMA-262 12.4 Postfix Expressions\n\n function parsePostfixExpression() {\n var expr, token, startToken = lookahead;\n\n expr = inheritCoverGrammar(parseLeftHandSideExpressionAllowCall);\n\n if (!hasLineTerminator && lookahead.type === Token.Punctuator) {\n if (match('++') || match('--')) {\n // ECMA-262 11.3.1, 11.3.2\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n tolerateError(Messages.StrictLHSPostfix);\n }\n\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n\n isAssignmentTarget = isBindingElement = false;\n\n token = lex();\n expr = new WrappingNode(startToken).finishPostfixExpression(token.value, expr);\n }\n }\n\n return expr;\n }\n\n // ECMA-262 12.5 Unary Operators\n\n function parseUnaryExpression() {\n var token, expr, startToken;\n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n // ECMA-262 11.4.4, 11.4.5\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n tolerateError(Messages.StrictLHSPrefix);\n }\n\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n isAssignmentTarget = isBindingElement = false;\n } else if (match('+') || match('-') || match('~') || match('!')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n isAssignmentTarget = isBindingElement = false;\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {\n tolerateError(Messages.StrictDelete);\n }\n isAssignmentTarget = isBindingElement = false;\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n }\n\n function binaryPrecedence(token, allowIn) {\n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = allowIn ? 7 : 0;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n }\n\n // ECMA-262 12.6 Multiplicative Operators\n // ECMA-262 12.7 Additive Operators\n // ECMA-262 12.8 Bitwise Shift Operators\n // ECMA-262 12.9 Relational Operators\n // ECMA-262 12.10 Equality Operators\n // ECMA-262 12.11 Binary Bitwise Operators\n // ECMA-262 12.12 Binary Logical Operators\n\n function parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = inheritCoverGrammar(parseUnaryExpression);\n\n token = lookahead;\n prec = binaryPrecedence(token, state.allowIn);\n if (prec === 0) {\n return left;\n }\n isAssignmentTarget = isBindingElement = false;\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = isolateCoverGrammar(parseUnaryExpression);\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = isolateCoverGrammar(parseUnaryExpression);\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n // ECMA-262 12.13 Conditional Operator\n\n function parseConditionalExpression() {\n var expr, previousAllowIn, consequent, alternate, startToken;\n\n startToken = lookahead;\n\n expr = inheritCoverGrammar(parseBinaryExpression);\n if (match('?')) {\n lex();\n previousAllowIn = state.allowIn;\n state.allowIn = true;\n consequent = isolateCoverGrammar(parseAssignmentExpression);\n state.allowIn = previousAllowIn;\n expect(':');\n alternate = isolateCoverGrammar(parseAssignmentExpression);\n\n expr = new WrappingNode(startToken).finishConditionalExpression(expr, consequent, alternate);\n isAssignmentTarget = isBindingElement = false;\n }\n\n return expr;\n }\n\n // ECMA-262 14.2 Arrow Function Definitions\n\n function parseConciseBody() {\n if (match('{')) {\n return parseFunctionSourceElements();\n }\n return isolateCoverGrammar(parseAssignmentExpression);\n }\n\n function checkPatternParam(options, param) {\n var i;\n switch (param.type) {\n case Syntax.Identifier:\n validateParam(options, param, param.name);\n break;\n case Syntax.RestElement:\n checkPatternParam(options, param.argument);\n break;\n case Syntax.AssignmentPattern:\n checkPatternParam(options, param.left);\n break;\n case Syntax.ArrayPattern:\n for (i = 0; i < param.elements.length; i++) {\n if (param.elements[i] !== null) {\n checkPatternParam(options, param.elements[i]);\n }\n }\n break;\n case Syntax.YieldExpression:\n break;\n default:\n assert(param.type === Syntax.ObjectPattern, 'Invalid type');\n for (i = 0; i < param.properties.length; i++) {\n checkPatternParam(options, param.properties[i].value);\n }\n break;\n }\n }\n function reinterpretAsCoverFormalsList(expr) {\n var i, len, param, params, defaults, defaultCount, options, token;\n\n defaults = [];\n defaultCount = 0;\n params = [expr];\n\n switch (expr.type) {\n case Syntax.Identifier:\n break;\n case PlaceHolders.ArrowParameterPlaceHolder:\n params = expr.params;\n break;\n default:\n return null;\n }\n\n options = {\n paramSet: {}\n };\n\n for (i = 0, len = params.length; i < len; i += 1) {\n param = params[i];\n switch (param.type) {\n case Syntax.AssignmentPattern:\n params[i] = param.left;\n if (param.right.type === Syntax.YieldExpression) {\n if (param.right.argument) {\n throwUnexpectedToken(lookahead);\n }\n param.right.type = Syntax.Identifier;\n param.right.name = 'yield';\n delete param.right.argument;\n delete param.right.delegate;\n }\n defaults.push(param.right);\n ++defaultCount;\n checkPatternParam(options, param.left);\n break;\n default:\n checkPatternParam(options, param);\n params[i] = param;\n defaults.push(null);\n break;\n }\n }\n\n if (strict || !state.allowYield) {\n for (i = 0, len = params.length; i < len; i += 1) {\n param = params[i];\n if (param.type === Syntax.YieldExpression) {\n throwUnexpectedToken(lookahead);\n }\n }\n }\n\n if (options.message === Messages.StrictParamDupe) {\n token = strict ? options.stricted : options.firstRestricted;\n throwUnexpectedToken(token, options.message);\n }\n\n if (defaultCount === 0) {\n defaults = [];\n }\n\n return {\n params: params,\n defaults: defaults,\n stricted: options.stricted,\n firstRestricted: options.firstRestricted,\n message: options.message\n };\n }\n\n function parseArrowFunctionExpression(options, node) {\n var previousStrict, previousAllowYield, body;\n\n if (hasLineTerminator) {\n tolerateUnexpectedToken(lookahead);\n }\n expect('=>');\n\n previousStrict = strict;\n previousAllowYield = state.allowYield;\n state.allowYield = true;\n\n body = parseConciseBody();\n\n if (strict && options.firstRestricted) {\n throwUnexpectedToken(options.firstRestricted, options.message);\n }\n if (strict && options.stricted) {\n tolerateUnexpectedToken(options.stricted, options.message);\n }\n\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishArrowFunctionExpression(options.params, options.defaults, body, body.type !== Syntax.BlockStatement);\n }\n\n // ECMA-262 14.4 Yield expression\n\n function parseYieldExpression() {\n var argument, expr, delegate, previousAllowYield;\n\n argument = null;\n expr = new Node();\n delegate = false;\n\n expectKeyword('yield');\n\n if (!hasLineTerminator) {\n previousAllowYield = state.allowYield;\n state.allowYield = false;\n delegate = match('*');\n if (delegate) {\n lex();\n argument = parseAssignmentExpression();\n } else {\n if (!match(';') && !match('}') && !match(')') && lookahead.type !== Token.EOF) {\n argument = parseAssignmentExpression();\n }\n }\n state.allowYield = previousAllowYield;\n }\n\n return expr.finishYieldExpression(argument, delegate);\n }\n\n // ECMA-262 12.14 Assignment Operators\n\n function parseAssignmentExpression() {\n var token, expr, right, list, startToken;\n\n startToken = lookahead;\n token = lookahead;\n\n if (!state.allowYield && matchKeyword('yield')) {\n return parseYieldExpression();\n }\n\n expr = parseConditionalExpression();\n\n if (expr.type === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) {\n isAssignmentTarget = isBindingElement = false;\n list = reinterpretAsCoverFormalsList(expr);\n\n if (list) {\n firstCoverInitializedNameError = null;\n return parseArrowFunctionExpression(list, new WrappingNode(startToken));\n }\n\n return expr;\n }\n\n if (matchAssign()) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n\n // ECMA-262 12.1.1\n if (strict && expr.type === Syntax.Identifier) {\n if (isRestrictedWord(expr.name)) {\n tolerateUnexpectedToken(token, Messages.StrictLHSAssignment);\n }\n if (isStrictModeReservedWord(expr.name)) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n }\n }\n\n if (!match('=')) {\n isAssignmentTarget = isBindingElement = false;\n } else {\n reinterpretExpressionAsPattern(expr);\n }\n\n token = lex();\n right = isolateCoverGrammar(parseAssignmentExpression);\n expr = new WrappingNode(startToken).finishAssignmentExpression(token.value, expr, right);\n firstCoverInitializedNameError = null;\n }\n\n return expr;\n }\n\n // ECMA-262 12.15 Comma Operator\n\n function parseExpression() {\n var expr, startToken = lookahead, expressions;\n\n expr = isolateCoverGrammar(parseAssignmentExpression);\n\n if (match(',')) {\n expressions = [expr];\n\n while (startIndex < length) {\n if (!match(',')) {\n break;\n }\n lex();\n expressions.push(isolateCoverGrammar(parseAssignmentExpression));\n }\n\n expr = new WrappingNode(startToken).finishSequenceExpression(expressions);\n }\n\n return expr;\n }\n\n // ECMA-262 13.2 Block\n\n function parseStatementListItem() {\n if (lookahead.type === Token.Keyword) {\n switch (lookahead.value) {\n case 'export':\n if (state.sourceType !== 'module') {\n tolerateUnexpectedToken(lookahead, Messages.IllegalExportDeclaration);\n }\n return parseExportDeclaration();\n case 'import':\n if (state.sourceType !== 'module') {\n tolerateUnexpectedToken(lookahead, Messages.IllegalImportDeclaration);\n }\n return parseImportDeclaration();\n case 'const':\n return parseLexicalDeclaration({inFor: false});\n case 'function':\n return parseFunctionDeclaration(new Node());\n case 'class':\n return parseClassDeclaration();\n }\n }\n\n if (matchKeyword('let') && isLexicalDeclaration()) {\n return parseLexicalDeclaration({inFor: false});\n }\n\n return parseStatement();\n }\n\n function parseStatementList() {\n var list = [];\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n list.push(parseStatementListItem());\n }\n\n return list;\n }\n\n function parseBlock() {\n var block, node = new Node();\n\n expect('{');\n\n block = parseStatementList();\n\n expect('}');\n\n return node.finishBlockStatement(block);\n }\n\n // ECMA-262 13.3.2 Variable Statement\n\n function parseVariableIdentifier(kind) {\n var token, node = new Node();\n\n token = lex();\n\n if (token.type === Token.Keyword && token.value === 'yield') {\n if (strict) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n } if (!state.allowYield) {\n throwUnexpectedToken(token);\n }\n } else if (token.type !== Token.Identifier) {\n if (strict && token.type === Token.Keyword && isStrictModeReservedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n } else {\n if (strict || token.value !== 'let' || kind !== 'var') {\n throwUnexpectedToken(token);\n }\n }\n } else if (state.sourceType === 'module' && token.type === Token.Identifier && token.value === 'await') {\n tolerateUnexpectedToken(token);\n }\n\n return node.finishIdentifier(token.value);\n }\n\n function parseVariableDeclaration(options) {\n var init = null, id, node = new Node(), params = [];\n\n id = parsePattern(params, 'var');\n\n // ECMA-262 12.2.1\n if (strict && isRestrictedWord(id.name)) {\n tolerateError(Messages.StrictVarName);\n }\n\n if (match('=')) {\n lex();\n init = isolateCoverGrammar(parseAssignmentExpression);\n } else if (id.type !== Syntax.Identifier && !options.inFor) {\n expect('=');\n }\n\n return node.finishVariableDeclarator(id, init);\n }\n\n function parseVariableDeclarationList(options) {\n var opt, list;\n\n opt = { inFor: options.inFor };\n list = [parseVariableDeclaration(opt)];\n\n while (match(',')) {\n lex();\n list.push(parseVariableDeclaration(opt));\n }\n\n return list;\n }\n\n function parseVariableStatement(node) {\n var declarations;\n\n expectKeyword('var');\n\n declarations = parseVariableDeclarationList({ inFor: false });\n\n consumeSemicolon();\n\n return node.finishVariableDeclaration(declarations);\n }\n\n // ECMA-262 13.3.1 Let and Const Declarations\n\n function parseLexicalBinding(kind, options) {\n var init = null, id, node = new Node(), params = [];\n\n id = parsePattern(params, kind);\n\n // ECMA-262 12.2.1\n if (strict && id.type === Syntax.Identifier && isRestrictedWord(id.name)) {\n tolerateError(Messages.StrictVarName);\n }\n\n if (kind === 'const') {\n if (!matchKeyword('in') && !matchContextualKeyword('of')) {\n expect('=');\n init = isolateCoverGrammar(parseAssignmentExpression);\n }\n } else if ((!options.inFor && id.type !== Syntax.Identifier) || match('=')) {\n expect('=');\n init = isolateCoverGrammar(parseAssignmentExpression);\n }\n\n return node.finishVariableDeclarator(id, init);\n }\n\n function parseBindingList(kind, options) {\n var list = [parseLexicalBinding(kind, options)];\n\n while (match(',')) {\n lex();\n list.push(parseLexicalBinding(kind, options));\n }\n\n return list;\n }\n\n\n function tokenizerState() {\n return {\n index: index,\n lineNumber: lineNumber,\n lineStart: lineStart,\n hasLineTerminator: hasLineTerminator,\n lastIndex: lastIndex,\n lastLineNumber: lastLineNumber,\n lastLineStart: lastLineStart,\n startIndex: startIndex,\n startLineNumber: startLineNumber,\n startLineStart: startLineStart,\n lookahead: lookahead,\n tokenCount: extra.tokens ? extra.tokens.length : 0\n };\n }\n\n function resetTokenizerState(ts) {\n index = ts.index;\n lineNumber = ts.lineNumber;\n lineStart = ts.lineStart;\n hasLineTerminator = ts.hasLineTerminator;\n lastIndex = ts.lastIndex;\n lastLineNumber = ts.lastLineNumber;\n lastLineStart = ts.lastLineStart;\n startIndex = ts.startIndex;\n startLineNumber = ts.startLineNumber;\n startLineStart = ts.startLineStart;\n lookahead = ts.lookahead;\n if (extra.tokens) {\n extra.tokens.splice(ts.tokenCount, extra.tokens.length);\n }\n }\n\n function isLexicalDeclaration() {\n var lexical, ts;\n\n ts = tokenizerState();\n\n lex();\n lexical = (lookahead.type === Token.Identifier) || match('[') || match('{') ||\n matchKeyword('let') || matchKeyword('yield');\n\n resetTokenizerState(ts);\n\n return lexical;\n }\n\n function parseLexicalDeclaration(options) {\n var kind, declarations, node = new Node();\n\n kind = lex().value;\n assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\n declarations = parseBindingList(kind, options);\n\n consumeSemicolon();\n\n return node.finishLexicalDeclaration(declarations, kind);\n }\n\n function parseRestElement(params) {\n var param, node = new Node();\n\n lex();\n\n if (match('{')) {\n throwError(Messages.ObjectPatternAsRestParameter);\n }\n\n params.push(lookahead);\n\n param = parseVariableIdentifier();\n\n if (match('=')) {\n throwError(Messages.DefaultRestParameter);\n }\n\n if (!match(')')) {\n throwError(Messages.ParameterAfterRestParameter);\n }\n\n return node.finishRestElement(param);\n }\n\n // ECMA-262 13.4 Empty Statement\n\n function parseEmptyStatement(node) {\n expect(';');\n return node.finishEmptyStatement();\n }\n\n // ECMA-262 12.4 Expression Statement\n\n function parseExpressionStatement(node) {\n var expr = parseExpression();\n consumeSemicolon();\n return node.finishExpressionStatement(expr);\n }\n\n // ECMA-262 13.6 If statement\n\n function parseIfStatement(node) {\n var test, consequent, alternate;\n\n expectKeyword('if');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n consequent = parseStatement();\n\n if (matchKeyword('else')) {\n lex();\n alternate = parseStatement();\n } else {\n alternate = null;\n }\n\n return node.finishIfStatement(test, consequent, alternate);\n }\n\n // ECMA-262 13.7 Iteration Statements\n\n function parseDoWhileStatement(node) {\n var body, test, oldInIteration;\n\n expectKeyword('do');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n if (match(';')) {\n lex();\n }\n\n return node.finishDoWhileStatement(body, test);\n }\n\n function parseWhileStatement(node) {\n var test, body, oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n return node.finishWhileStatement(test, body);\n }\n\n function parseForStatement(node) {\n var init, forIn, initSeq, initStartToken, test, update, left, right, kind, declarations,\n body, oldInIteration, previousAllowIn = state.allowIn;\n\n init = test = update = null;\n forIn = true;\n\n expectKeyword('for');\n\n expect('(');\n\n if (match(';')) {\n lex();\n } else {\n if (matchKeyword('var')) {\n init = new Node();\n lex();\n\n state.allowIn = false;\n declarations = parseVariableDeclarationList({ inFor: true });\n state.allowIn = previousAllowIn;\n\n if (declarations.length === 1 && matchKeyword('in')) {\n init = init.finishVariableDeclaration(declarations);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) {\n init = init.finishVariableDeclaration(declarations);\n lex();\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n init = init.finishVariableDeclaration(declarations);\n expect(';');\n }\n } else if (matchKeyword('const') || matchKeyword('let')) {\n init = new Node();\n kind = lex().value;\n\n if (!strict && lookahead.value === 'in') {\n init = init.finishIdentifier(kind);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else {\n state.allowIn = false;\n declarations = parseBindingList(kind, {inFor: true});\n state.allowIn = previousAllowIn;\n\n if (declarations.length === 1 && declarations[0].init === null && matchKeyword('in')) {\n init = init.finishLexicalDeclaration(declarations, kind);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) {\n init = init.finishLexicalDeclaration(declarations, kind);\n lex();\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n consumeSemicolon();\n init = init.finishLexicalDeclaration(declarations, kind);\n }\n }\n } else {\n initStartToken = lookahead;\n state.allowIn = false;\n init = inheritCoverGrammar(parseAssignmentExpression);\n state.allowIn = previousAllowIn;\n\n if (matchKeyword('in')) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInForIn);\n }\n\n lex();\n reinterpretExpressionAsPattern(init);\n left = init;\n right = parseExpression();\n init = null;\n } else if (matchContextualKeyword('of')) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInForLoop);\n }\n\n lex();\n reinterpretExpressionAsPattern(init);\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n if (match(',')) {\n initSeq = [init];\n while (match(',')) {\n lex();\n initSeq.push(isolateCoverGrammar(parseAssignmentExpression));\n }\n init = new WrappingNode(initStartToken).finishSequenceExpression(initSeq);\n }\n expect(';');\n }\n }\n }\n\n if (typeof left === 'undefined') {\n\n if (!match(';')) {\n test = parseExpression();\n }\n expect(';');\n\n if (!match(')')) {\n update = parseExpression();\n }\n }\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = isolateCoverGrammar(parseStatement);\n\n state.inIteration = oldInIteration;\n\n return (typeof left === 'undefined') ?\n node.finishForStatement(init, test, update, body) :\n forIn ? node.finishForInStatement(left, right, body) :\n node.finishForOfStatement(left, right, body);\n }\n\n // ECMA-262 13.8 The continue statement\n\n function parseContinueStatement(node) {\n var label = null, key;\n\n expectKeyword('continue');\n\n // Optimize the most common form: 'continue;'.\n if (source.charCodeAt(startIndex) === 0x3B) {\n lex();\n\n if (!state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(null);\n }\n\n if (hasLineTerminator) {\n if (!state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(null);\n }\n\n if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(label);\n }\n\n // ECMA-262 13.9 The break statement\n\n function parseBreakStatement(node) {\n var label = null, key;\n\n expectKeyword('break');\n\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(lastIndex) === 0x3B) {\n lex();\n\n if (!(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n\n return node.finishBreakStatement(null);\n }\n\n if (hasLineTerminator) {\n if (!(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n } else if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n\n return node.finishBreakStatement(label);\n }\n\n // ECMA-262 13.10 The return statement\n\n function parseReturnStatement(node) {\n var argument = null;\n\n expectKeyword('return');\n\n if (!state.inFunctionBody) {\n tolerateError(Messages.IllegalReturn);\n }\n\n // 'return' followed by a space and an identifier is very common.\n if (source.charCodeAt(lastIndex) === 0x20) {\n if (isIdentifierStart(source.charCodeAt(lastIndex + 1))) {\n argument = parseExpression();\n consumeSemicolon();\n return node.finishReturnStatement(argument);\n }\n }\n\n if (hasLineTerminator) {\n // HACK\n return node.finishReturnStatement(null);\n }\n\n if (!match(';')) {\n if (!match('}') && lookahead.type !== Token.EOF) {\n argument = parseExpression();\n }\n }\n\n consumeSemicolon();\n\n return node.finishReturnStatement(argument);\n }\n\n // ECMA-262 13.11 The with statement\n\n function parseWithStatement(node) {\n var object, body;\n\n if (strict) {\n tolerateError(Messages.StrictModeWith);\n }\n\n expectKeyword('with');\n\n expect('(');\n\n object = parseExpression();\n\n expect(')');\n\n body = parseStatement();\n\n return node.finishWithStatement(object, body);\n }\n\n // ECMA-262 13.12 The switch statement\n\n function parseSwitchCase() {\n var test, consequent = [], statement, node = new Node();\n\n if (matchKeyword('default')) {\n lex();\n test = null;\n } else {\n expectKeyword('case');\n test = parseExpression();\n }\n expect(':');\n\n while (startIndex < length) {\n if (match('}') || matchKeyword('default') || matchKeyword('case')) {\n break;\n }\n statement = parseStatementListItem();\n consequent.push(statement);\n }\n\n return node.finishSwitchCase(test, consequent);\n }\n\n function parseSwitchStatement(node) {\n var discriminant, cases, clause, oldInSwitch, defaultFound;\n\n expectKeyword('switch');\n\n expect('(');\n\n discriminant = parseExpression();\n\n expect(')');\n\n expect('{');\n\n cases = [];\n\n if (match('}')) {\n lex();\n return node.finishSwitchStatement(discriminant, cases);\n }\n\n oldInSwitch = state.inSwitch;\n state.inSwitch = true;\n defaultFound = false;\n\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n clause = parseSwitchCase();\n if (clause.test === null) {\n if (defaultFound) {\n throwError(Messages.MultipleDefaultsInSwitch);\n }\n defaultFound = true;\n }\n cases.push(clause);\n }\n\n state.inSwitch = oldInSwitch;\n\n expect('}');\n\n return node.finishSwitchStatement(discriminant, cases);\n }\n\n // ECMA-262 13.14 The throw statement\n\n function parseThrowStatement(node) {\n var argument;\n\n expectKeyword('throw');\n\n if (hasLineTerminator) {\n throwError(Messages.NewlineAfterThrow);\n }\n\n argument = parseExpression();\n\n consumeSemicolon();\n\n return node.finishThrowStatement(argument);\n }\n\n // ECMA-262 13.15 The try statement\n\n function parseCatchClause() {\n var param, params = [], paramMap = {}, key, i, body, node = new Node();\n\n expectKeyword('catch');\n\n expect('(');\n if (match(')')) {\n throwUnexpectedToken(lookahead);\n }\n\n param = parsePattern(params);\n for (i = 0; i < params.length; i++) {\n key = '$' + params[i].value;\n if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n tolerateError(Messages.DuplicateBinding, params[i].value);\n }\n paramMap[key] = true;\n }\n\n // ECMA-262 12.14.1\n if (strict && isRestrictedWord(param.name)) {\n tolerateError(Messages.StrictCatchVariable);\n }\n\n expect(')');\n body = parseBlock();\n return node.finishCatchClause(param, body);\n }\n\n function parseTryStatement(node) {\n var block, handler = null, finalizer = null;\n\n expectKeyword('try');\n\n block = parseBlock();\n\n if (matchKeyword('catch')) {\n handler = parseCatchClause();\n }\n\n if (matchKeyword('finally')) {\n lex();\n finalizer = parseBlock();\n }\n\n if (!handler && !finalizer) {\n throwError(Messages.NoCatchOrFinally);\n }\n\n return node.finishTryStatement(block, handler, finalizer);\n }\n\n // ECMA-262 13.16 The debugger statement\n\n function parseDebuggerStatement(node) {\n expectKeyword('debugger');\n\n consumeSemicolon();\n\n return node.finishDebuggerStatement();\n }\n\n // 13 Statements\n\n function parseStatement() {\n var type = lookahead.type,\n expr,\n labeledBody,\n key,\n node;\n\n if (type === Token.EOF) {\n throwUnexpectedToken(lookahead);\n }\n\n if (type === Token.Punctuator && lookahead.value === '{') {\n return parseBlock();\n }\n isAssignmentTarget = isBindingElement = true;\n node = new Node();\n\n if (type === Token.Punctuator) {\n switch (lookahead.value) {\n case ';':\n return parseEmptyStatement(node);\n case '(':\n return parseExpressionStatement(node);\n default:\n break;\n }\n } else if (type === Token.Keyword) {\n switch (lookahead.value) {\n case 'break':\n return parseBreakStatement(node);\n case 'continue':\n return parseContinueStatement(node);\n case 'debugger':\n return parseDebuggerStatement(node);\n case 'do':\n return parseDoWhileStatement(node);\n case 'for':\n return parseForStatement(node);\n case 'function':\n return parseFunctionDeclaration(node);\n case 'if':\n return parseIfStatement(node);\n case 'return':\n return parseReturnStatement(node);\n case 'switch':\n return parseSwitchStatement(node);\n case 'throw':\n return parseThrowStatement(node);\n case 'try':\n return parseTryStatement(node);\n case 'var':\n return parseVariableStatement(node);\n case 'while':\n return parseWhileStatement(node);\n case 'with':\n return parseWithStatement(node);\n default:\n break;\n }\n }\n\n expr = parseExpression();\n\n // ECMA-262 12.12 Labelled Statements\n if ((expr.type === Syntax.Identifier) && match(':')) {\n lex();\n\n key = '$' + expr.name;\n if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.Redeclaration, 'Label', expr.name);\n }\n\n state.labelSet[key] = true;\n labeledBody = parseStatement();\n delete state.labelSet[key];\n return node.finishLabeledStatement(expr, labeledBody);\n }\n\n consumeSemicolon();\n\n return node.finishExpressionStatement(expr);\n }\n\n // ECMA-262 14.1 Function Definition\n\n function parseFunctionSourceElements() {\n var statement, body = [], token, directive, firstRestricted,\n oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody,\n node = new Node();\n\n expect('{');\n\n while (startIndex < length) {\n if (lookahead.type !== Token.StringLiteral) {\n break;\n }\n token = lookahead;\n\n statement = parseStatementListItem();\n body.push(statement);\n if (statement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n oldLabelSet = state.labelSet;\n oldInIteration = state.inIteration;\n oldInSwitch = state.inSwitch;\n oldInFunctionBody = state.inFunctionBody;\n\n state.labelSet = {};\n state.inIteration = false;\n state.inSwitch = false;\n state.inFunctionBody = true;\n\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n body.push(parseStatementListItem());\n }\n\n expect('}');\n\n state.labelSet = oldLabelSet;\n state.inIteration = oldInIteration;\n state.inSwitch = oldInSwitch;\n state.inFunctionBody = oldInFunctionBody;\n\n return node.finishBlockStatement(body);\n }\n\n function validateParam(options, param, name) {\n var key = '$' + name;\n if (strict) {\n if (isRestrictedWord(name)) {\n options.stricted = param;\n options.message = Messages.StrictParamName;\n }\n if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n options.stricted = param;\n options.message = Messages.StrictParamDupe;\n }\n } else if (!options.firstRestricted) {\n if (isRestrictedWord(name)) {\n options.firstRestricted = param;\n options.message = Messages.StrictParamName;\n } else if (isStrictModeReservedWord(name)) {\n options.firstRestricted = param;\n options.message = Messages.StrictReservedWord;\n } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n options.stricted = param;\n options.message = Messages.StrictParamDupe;\n }\n }\n options.paramSet[key] = true;\n }\n\n function parseParam(options) {\n var token, param, params = [], i, def;\n\n token = lookahead;\n if (token.value === '...') {\n param = parseRestElement(params);\n validateParam(options, param.argument, param.argument.name);\n options.params.push(param);\n options.defaults.push(null);\n return false;\n }\n\n param = parsePatternWithDefault(params);\n for (i = 0; i < params.length; i++) {\n validateParam(options, params[i], params[i].value);\n }\n\n if (param.type === Syntax.AssignmentPattern) {\n def = param.right;\n param = param.left;\n ++options.defaultCount;\n }\n\n options.params.push(param);\n options.defaults.push(def);\n\n return !match(')');\n }\n\n function parseParams(firstRestricted) {\n var options;\n\n options = {\n params: [],\n defaultCount: 0,\n defaults: [],\n firstRestricted: firstRestricted\n };\n\n expect('(');\n\n if (!match(')')) {\n options.paramSet = {};\n while (startIndex < length) {\n if (!parseParam(options)) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n if (options.defaultCount === 0) {\n options.defaults = [];\n }\n\n return {\n params: options.params,\n defaults: options.defaults,\n stricted: options.stricted,\n firstRestricted: options.firstRestricted,\n message: options.message\n };\n }\n\n function parseFunctionDeclaration(node, identifierIsOptional) {\n var id = null, params = [], defaults = [], body, token, stricted, tmp, firstRestricted, message, previousStrict,\n isGenerator, previousAllowYield;\n\n previousAllowYield = state.allowYield;\n\n expectKeyword('function');\n\n isGenerator = match('*');\n if (isGenerator) {\n lex();\n }\n\n if (!identifierIsOptional || !match('(')) {\n token = lookahead;\n id = parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n state.allowYield = !isGenerator;\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n defaults = tmp.defaults;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwUnexpectedToken(firstRestricted, message);\n }\n if (strict && stricted) {\n tolerateUnexpectedToken(stricted, message);\n }\n\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishFunctionDeclaration(id, params, defaults, body, isGenerator);\n }\n\n function parseFunctionExpression() {\n var token, id = null, stricted, firstRestricted, message, tmp,\n params = [], defaults = [], body, previousStrict, node = new Node(),\n isGenerator, previousAllowYield;\n\n previousAllowYield = state.allowYield;\n\n expectKeyword('function');\n\n isGenerator = match('*');\n if (isGenerator) {\n lex();\n }\n\n state.allowYield = !isGenerator;\n if (!match('(')) {\n token = lookahead;\n id = (!strict && !isGenerator && matchKeyword('yield')) ? parseNonComputedProperty() : parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n defaults = tmp.defaults;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwUnexpectedToken(firstRestricted, message);\n }\n if (strict && stricted) {\n tolerateUnexpectedToken(stricted, message);\n }\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishFunctionExpression(id, params, defaults, body, isGenerator);\n }\n\n // ECMA-262 14.5 Class Definitions\n\n function parseClassBody() {\n var classBody, token, isStatic, hasConstructor = false, body, method, computed, key;\n\n classBody = new Node();\n\n expect('{');\n body = [];\n while (!match('}')) {\n if (match(';')) {\n lex();\n } else {\n method = new Node();\n token = lookahead;\n isStatic = false;\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n if (key.name === 'static' && (lookaheadPropertyName() || match('*'))) {\n token = lookahead;\n isStatic = true;\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n }\n }\n }\n method = tryParseMethodDefinition(token, key, computed, method);\n if (method) {\n method['static'] = isStatic; // jscs:ignore requireDotNotation\n if (method.kind === 'init') {\n method.kind = 'method';\n }\n if (!isStatic) {\n if (!method.computed && (method.key.name || method.key.value.toString()) === 'constructor') {\n if (method.kind !== 'method' || !method.method || method.value.generator) {\n throwUnexpectedToken(token, Messages.ConstructorSpecialMethod);\n }\n if (hasConstructor) {\n throwUnexpectedToken(token, Messages.DuplicateConstructor);\n } else {\n hasConstructor = true;\n }\n method.kind = 'constructor';\n }\n } else {\n if (!method.computed && (method.key.name || method.key.value.toString()) === 'prototype') {\n throwUnexpectedToken(token, Messages.StaticPrototype);\n }\n }\n method.type = Syntax.MethodDefinition;\n delete method.method;\n delete method.shorthand;\n body.push(method);\n } else {\n throwUnexpectedToken(lookahead);\n }\n }\n }\n lex();\n return classBody.finishClassBody(body);\n }\n\n function parseClassDeclaration(identifierIsOptional) {\n var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict;\n strict = true;\n\n expectKeyword('class');\n\n if (!identifierIsOptional || lookahead.type === Token.Identifier) {\n id = parseVariableIdentifier();\n }\n\n if (matchKeyword('extends')) {\n lex();\n superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall);\n }\n classBody = parseClassBody();\n strict = previousStrict;\n\n return classNode.finishClassDeclaration(id, superClass, classBody);\n }\n\n function parseClassExpression() {\n var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict;\n strict = true;\n\n expectKeyword('class');\n\n if (lookahead.type === Token.Identifier) {\n id = parseVariableIdentifier();\n }\n\n if (matchKeyword('extends')) {\n lex();\n superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall);\n }\n classBody = parseClassBody();\n strict = previousStrict;\n\n return classNode.finishClassExpression(id, superClass, classBody);\n }\n\n // ECMA-262 15.2 Modules\n\n function parseModuleSpecifier() {\n var node = new Node();\n\n if (lookahead.type !== Token.StringLiteral) {\n throwError(Messages.InvalidModuleSpecifier);\n }\n return node.finishLiteral(lex());\n }\n\n // ECMA-262 15.2.3 Exports\n\n function parseExportSpecifier() {\n var exported, local, node = new Node(), def;\n if (matchKeyword('default')) {\n // export {default} from 'something';\n def = new Node();\n lex();\n local = def.finishIdentifier('default');\n } else {\n local = parseVariableIdentifier();\n }\n if (matchContextualKeyword('as')) {\n lex();\n exported = parseNonComputedProperty();\n }\n return node.finishExportSpecifier(local, exported);\n }\n\n function parseExportNamedDeclaration(node) {\n var declaration = null,\n isExportFromIdentifier,\n src = null, specifiers = [];\n\n // non-default export\n if (lookahead.type === Token.Keyword) {\n // covers:\n // export var f = 1;\n switch (lookahead.value) {\n case 'let':\n case 'const':\n declaration = parseLexicalDeclaration({inFor: false});\n return node.finishExportNamedDeclaration(declaration, specifiers, null);\n case 'var':\n case 'class':\n case 'function':\n declaration = parseStatementListItem();\n return node.finishExportNamedDeclaration(declaration, specifiers, null);\n }\n }\n\n expect('{');\n while (!match('}')) {\n isExportFromIdentifier = isExportFromIdentifier || matchKeyword('default');\n specifiers.push(parseExportSpecifier());\n if (!match('}')) {\n expect(',');\n if (match('}')) {\n break;\n }\n }\n }\n expect('}');\n\n if (matchContextualKeyword('from')) {\n // covering:\n // export {default} from 'foo';\n // export {foo} from 'foo';\n lex();\n src = parseModuleSpecifier();\n consumeSemicolon();\n } else if (isExportFromIdentifier) {\n // covering:\n // export {default}; // missing fromClause\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n } else {\n // cover\n // export {foo};\n consumeSemicolon();\n }\n return node.finishExportNamedDeclaration(declaration, specifiers, src);\n }\n\n function parseExportDefaultDeclaration(node) {\n var declaration = null,\n expression = null;\n\n // covers:\n // export default ...\n expectKeyword('default');\n\n if (matchKeyword('function')) {\n // covers:\n // export default function foo () {}\n // export default function () {}\n declaration = parseFunctionDeclaration(new Node(), true);\n return node.finishExportDefaultDeclaration(declaration);\n }\n if (matchKeyword('class')) {\n declaration = parseClassDeclaration(true);\n return node.finishExportDefaultDeclaration(declaration);\n }\n\n if (matchContextualKeyword('from')) {\n throwError(Messages.UnexpectedToken, lookahead.value);\n }\n\n // covers:\n // export default {};\n // export default [];\n // export default (1 + 2);\n if (match('{')) {\n expression = parseObjectInitializer();\n } else if (match('[')) {\n expression = parseArrayInitializer();\n } else {\n expression = parseAssignmentExpression();\n }\n consumeSemicolon();\n return node.finishExportDefaultDeclaration(expression);\n }\n\n function parseExportAllDeclaration(node) {\n var src;\n\n // covers:\n // export * from 'foo';\n expect('*');\n if (!matchContextualKeyword('from')) {\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n }\n lex();\n src = parseModuleSpecifier();\n consumeSemicolon();\n\n return node.finishExportAllDeclaration(src);\n }\n\n function parseExportDeclaration() {\n var node = new Node();\n if (state.inFunctionBody) {\n throwError(Messages.IllegalExportDeclaration);\n }\n\n expectKeyword('export');\n\n if (matchKeyword('default')) {\n return parseExportDefaultDeclaration(node);\n }\n if (match('*')) {\n return parseExportAllDeclaration(node);\n }\n return parseExportNamedDeclaration(node);\n }\n\n // ECMA-262 15.2.2 Imports\n\n function parseImportSpecifier() {\n // import {<foo as bar>} ...;\n var local, imported, node = new Node();\n\n imported = parseNonComputedProperty();\n if (matchContextualKeyword('as')) {\n lex();\n local = parseVariableIdentifier();\n }\n\n return node.finishImportSpecifier(local, imported);\n }\n\n function parseNamedImports() {\n var specifiers = [];\n // {foo, bar as bas}\n expect('{');\n while (!match('}')) {\n specifiers.push(parseImportSpecifier());\n if (!match('}')) {\n expect(',');\n if (match('}')) {\n break;\n }\n }\n }\n expect('}');\n return specifiers;\n }\n\n function parseImportDefaultSpecifier() {\n // import <foo> ...;\n var local, node = new Node();\n\n local = parseNonComputedProperty();\n\n return node.finishImportDefaultSpecifier(local);\n }\n\n function parseImportNamespaceSpecifier() {\n // import <* as foo> ...;\n var local, node = new Node();\n\n expect('*');\n if (!matchContextualKeyword('as')) {\n throwError(Messages.NoAsAfterImportNamespace);\n }\n lex();\n local = parseNonComputedProperty();\n\n return node.finishImportNamespaceSpecifier(local);\n }\n\n function parseImportDeclaration() {\n var specifiers = [], src, node = new Node();\n\n if (state.inFunctionBody) {\n throwError(Messages.IllegalImportDeclaration);\n }\n\n expectKeyword('import');\n\n if (lookahead.type === Token.StringLiteral) {\n // import 'foo';\n src = parseModuleSpecifier();\n } else {\n\n if (match('{')) {\n // import {bar}\n specifiers = specifiers.concat(parseNamedImports());\n } else if (match('*')) {\n // import * as foo\n specifiers.push(parseImportNamespaceSpecifier());\n } else if (isIdentifierName(lookahead) && !matchKeyword('default')) {\n // import foo\n specifiers.push(parseImportDefaultSpecifier());\n if (match(',')) {\n lex();\n if (match('*')) {\n // import foo, * as foo\n specifiers.push(parseImportNamespaceSpecifier());\n } else if (match('{')) {\n // import foo, {bar}\n specifiers = specifiers.concat(parseNamedImports());\n } else {\n throwUnexpectedToken(lookahead);\n }\n }\n } else {\n throwUnexpectedToken(lex());\n }\n\n if (!matchContextualKeyword('from')) {\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n }\n lex();\n src = parseModuleSpecifier();\n }\n\n consumeSemicolon();\n return node.finishImportDeclaration(specifiers, src);\n }\n\n // ECMA-262 15.1 Scripts\n\n function parseScriptBody() {\n var statement, body = [], token, directive, firstRestricted;\n\n while (startIndex < length) {\n token = lookahead;\n if (token.type !== Token.StringLiteral) {\n break;\n }\n\n statement = parseStatementListItem();\n body.push(statement);\n if (statement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n while (startIndex < length) {\n statement = parseStatementListItem();\n /* istanbul ignore if */\n if (typeof statement === 'undefined') {\n break;\n }\n body.push(statement);\n }\n return body;\n }\n\n function parseProgram() {\n var body, node;\n\n peek();\n node = new Node();\n\n body = parseScriptBody();\n return node.finishProgram(body, state.sourceType);\n }\n\n function filterTokenLocation() {\n var i, entry, token, tokens = [];\n\n for (i = 0; i < extra.tokens.length; ++i) {\n entry = extra.tokens[i];\n token = {\n type: entry.type,\n value: entry.value\n };\n if (entry.regex) {\n token.regex = {\n pattern: entry.regex.pattern,\n flags: entry.regex.flags\n };\n }\n if (extra.range) {\n token.range = entry.range;\n }\n if (extra.loc) {\n token.loc = entry.loc;\n }\n tokens.push(token);\n }\n\n extra.tokens = tokens;\n }\n\n function tokenize(code, options, delegate) {\n var toString,\n tokens;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n allowYield: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1,\n curlyStack: []\n };\n\n extra = {};\n\n // Options matching.\n options = options || {};\n\n // Of course we collect tokens here.\n options.tokens = true;\n extra.tokens = [];\n extra.tokenValues = [];\n extra.tokenize = true;\n extra.delegate = delegate;\n\n // The following two fields are necessary to compute the Regex tokens.\n extra.openParenToken = -1;\n extra.openCurlyToken = -1;\n\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n\n try {\n peek();\n if (lookahead.type === Token.EOF) {\n return extra.tokens;\n }\n\n lex();\n while (lookahead.type !== Token.EOF) {\n try {\n lex();\n } catch (lexError) {\n if (extra.errors) {\n recordError(lexError);\n // We have to break on the first error\n // to avoid infinite loops.\n break;\n } else {\n throw lexError;\n }\n }\n }\n\n tokens = extra.tokens;\n if (typeof extra.errors !== 'undefined') {\n tokens.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n return tokens;\n }\n\n function parse(code, options) {\n var program, toString;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n allowYield: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1,\n curlyStack: [],\n sourceType: 'script'\n };\n strict = false;\n\n extra = {};\n if (typeof options !== 'undefined') {\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;\n\n if (extra.loc && options.source !== null && options.source !== undefined) {\n extra.source = toString(options.source);\n }\n\n if (typeof options.tokens === 'boolean' && options.tokens) {\n extra.tokens = [];\n }\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n if (extra.attachComment) {\n extra.range = true;\n extra.comments = [];\n extra.bottomRightStack = [];\n extra.trailingComments = [];\n extra.leadingComments = [];\n }\n if (options.sourceType === 'module') {\n // very restrictive condition for now\n state.sourceType = options.sourceType;\n strict = true;\n }\n }\n\n try {\n program = parseProgram();\n if (typeof extra.comments !== 'undefined') {\n program.comments = extra.comments;\n }\n if (typeof extra.tokens !== 'undefined') {\n filterTokenLocation();\n program.tokens = extra.tokens;\n }\n if (typeof extra.errors !== 'undefined') {\n program.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n\n return program;\n }\n\n // Sync with *.json manifests.\n exports.version = '2.7.2';\n\n exports.tokenize = tokenize;\n\n exports.parse = parse;\n\n // Deep copy.\n /* istanbul ignore next */\n exports.Syntax = (function () {\n var name, types = {};\n\n if (typeof Object.create === 'function') {\n types = Object.create(null);\n }\n\n for (name in Syntax) {\n if (Syntax.hasOwnProperty(name)) {\n types[name] = Syntax[name];\n }\n }\n\n if (typeof Object.freeze === 'function') {\n Object.freeze(types);\n }\n\n return types;\n }());\n\n}));\n/* vim: set sw=4 ts=4 et tw=80 : */\n","","// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// when used in node, this will actually load the util module we depend on\n// versus loading the builtin util module as happens otherwise\n// this is a bug in node module loading as far as I am concerned\nvar util = require('util/');\n\nvar pSlice = Array.prototype.slice;\nvar hasOwn = Object.prototype.hasOwnProperty;\n\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n }\n else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = stackStartFunction.name;\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction replacer(key, value) {\n if (util.isUndefined(value)) {\n return '' + value;\n }\n if (util.isNumber(value) && !isFinite(value)) {\n return value.toString();\n }\n if (util.isFunction(value) || util.isRegExp(value)) {\n return value.toString();\n }\n return value;\n}\n\nfunction truncate(s, n) {\n if (util.isString(s)) {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\n\nfunction getMessage(self) {\n return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +\n self.operator + ' ' +\n truncate(JSON.stringify(self.expected, replacer), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nfunction _deepEqual(actual, expected) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n\n } else if (util.isBuffer(actual) && util.isBuffer(expected)) {\n if (actual.length != expected.length) return false;\n\n for (var i = 0; i < actual.length; i++) {\n if (actual[i] !== expected[i]) return false;\n }\n\n return true;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if (!util.isObject(actual) && !util.isObject(expected)) {\n return actual == expected;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else {\n return objEquiv(actual, expected);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))\n return false;\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b)) {\n return a === b;\n }\n var aIsArgs = isArguments(a),\n bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b);\n }\n var ka = objectKeys(a),\n kb = objectKeys(b),\n key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length != kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key])) return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n } else if (actual instanceof expected) {\n return true;\n } else if (expected.call({}, actual) === true) {\n return true;\n }\n\n return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (util.isString(expected)) {\n message = expected;\n expected = null;\n }\n\n try {\n block();\n } catch (e) {\n actual = e;\n }\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n if (!shouldThrow && expectedException(actual, expected)) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/message) {\n _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict'\n\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nfunction init () {\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n }\n\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n}\n\ninit()\n\nfunction toByteArray (b64) {\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\n(function () {\n try {\n cachedSetTimeout = setTimeout;\n } catch (e) {\n cachedSetTimeout = function () {\n throw new Error('setTimeout is not defined');\n }\n }\n try {\n cachedClearTimeout = clearTimeout;\n } catch (e) {\n cachedClearTimeout = function () {\n throw new Error('clearTimeout is not defined');\n }\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // 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\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // 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.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","module.exports = require(\"./lib/_stream_duplex.js\")\n","// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\nvar keys = objectKeys(Writable.prototype);\nfor (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n processNextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nfunction forEach(xs, f) {\n for (var i = 0, l = xs.length; i < l; i++) {\n f(xs[i], i);\n }\n}","// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream;\n(function () {\n try {\n Stream = require('st' + 'ream');\n } catch (_) {} finally {\n if (!Stream) Stream = require('events').EventEmitter;\n }\n})();\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\n/*<replacement>*/\nvar bufferShim = require('buffer-shims');\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/*</replacement>*/\n\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar hasPrependListener = typeof EE.prototype.prependListener === 'function';\n\nfunction prependListener(emitter, event, fn) {\n if (hasPrependListener) return emitter.prependListener(event, fn);\n\n // This is a brutally ugly hack to make sure that our error handler\n // is attached before any userland ones. NEVER DO THIS. This is here\n // only because this code needs to continue to work with older versions\n // of Node.js that do not include the prependListener() method. The goal\n // is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nvar Duplex;\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n this.buffer = [];\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // when piping, we only care about 'readable' events that happen\n // after read()ing all the bytes and not getting any pushback.\n this.ranOut = false;\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nvar Duplex;\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options && typeof options.read === 'function') this._read = options.read;\n\n Stream.call(this);\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n\n if (!state.objectMode && typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = bufferShim.from(chunk, encoding);\n encoding = '';\n }\n }\n\n return readableAddChunk(this, state, chunk, encoding, false);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n var state = this._readableState;\n return readableAddChunk(this, state, chunk, '', true);\n};\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\nfunction readableAddChunk(stream, state, chunk, encoding, addToFront) {\n var er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (state.ended && !addToFront) {\n var e = new Error('stream.push() after EOF');\n stream.emit('error', e);\n } else if (state.endEmitted && addToFront) {\n var _e = new Error('stream.unshift() after end event');\n stream.emit('error', _e);\n } else {\n var skipAdd;\n if (state.decoder && !addToFront && !encoding) {\n chunk = state.decoder.write(chunk);\n skipAdd = !state.objectMode && chunk.length === 0;\n }\n\n if (!addToFront) state.reading = false;\n\n // Don't add to the buffer if we've decoded to an empty string chunk and\n // we're not in object mode\n if (!skipAdd) {\n // if we want the data now, just emit it.\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n }\n\n maybeReadMore(stream, state);\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n\n return needMoreData(state);\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\nfunction howMuchToRead(n, state) {\n if (state.length === 0 && state.ended) return 0;\n\n if (state.objectMode) return n === 0 ? 0 : 1;\n\n if (n === null || isNaN(n)) {\n // only flow one buffer at a time\n if (state.flowing && state.buffer.length) return state.buffer[0].length;else return state.length;\n }\n\n if (n <= 0) return 0;\n\n // If we're asking for more than the target buffer level,\n // then raise the water mark. Bump up to the next highest\n // power of 2, to prevent increasing it excessively in tiny\n // amounts.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n\n // don't have that much. return null, unless we've ended.\n if (n > state.length) {\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n } else {\n return state.length;\n }\n }\n\n return n;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n var state = this._readableState;\n var nOrig = n;\n\n if (typeof n !== 'number' || n > 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n }\n\n if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n }\n\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (doRead && !state.reading) n = howMuchToRead(nOrig, state);\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n }\n\n state.length -= n;\n\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (state.length === 0 && !state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended && state.length === 0) endReadable(this);\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction chunkInvalid(state, chunk) {\n var er = null;\n if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n processNextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : cleanup;\n if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable) {\n debug('onunpipe');\n if (readable === src) {\n cleanup();\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', cleanup);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n if (false === ret) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var _i = 0; _i < len; _i++) {\n dests[_i].emit('unpipe', this);\n }return this;\n }\n\n // try to find the right one.\n var i = indexOf(state.pipes, dest);\n if (i === -1) return this;\n\n state.pipes.splice(i, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n // If listening to data, and it has not explicitly been paused,\n // then call resume to start the flow of data on the next tick.\n if (ev === 'data' && false !== this._readableState.flowing) {\n this.resume();\n }\n\n if (ev === 'readable' && !this._readableState.endEmitted) {\n var state = this._readableState;\n if (!state.readableListening) {\n state.readableListening = true;\n state.emittedReadable = false;\n state.needReadable = true;\n if (!state.reading) {\n processNextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this, state);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n processNextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n if (state.flowing) {\n do {\n var chunk = stream.read();\n } while (null !== chunk && state.flowing);\n }\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var state = this._readableState;\n var paused = false;\n\n var self = this;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) self.push(chunk);\n }\n\n self.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = self.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n var events = ['error', 'close', 'destroy', 'pause', 'resume'];\n forEach(events, function (ev) {\n stream.on(ev, self.emit.bind(self, ev));\n });\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n self._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return self;\n};\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\nfunction fromList(n, state) {\n var list = state.buffer;\n var length = state.length;\n var stringMode = !!state.decoder;\n var objectMode = !!state.objectMode;\n var ret;\n\n // nothing in the list, definitely empty.\n if (list.length === 0) return null;\n\n if (length === 0) ret = null;else if (objectMode) ret = list.shift();else if (!n || n >= length) {\n // read it all, truncate the array.\n if (stringMode) ret = list.join('');else if (list.length === 1) ret = list[0];else ret = Buffer.concat(list, length);\n list.length = 0;\n } else {\n // read just some of it.\n if (n < list[0].length) {\n // just take a part of the first list item.\n // slice is the same for buffers and strings.\n var buf = list[0];\n ret = buf.slice(0, n);\n list[0] = buf.slice(n);\n } else if (n === list[0].length) {\n // first list is a perfect match\n ret = list.shift();\n } else {\n // complex case.\n // we have enough to cover it, but it spans past the first buffer.\n if (stringMode) ret = '';else ret = bufferShim.allocUnsafe(n);\n\n var c = 0;\n for (var i = 0, l = list.length; i < l && c < n; i++) {\n var _buf = list[0];\n var cpy = Math.min(n - c, _buf.length);\n\n if (stringMode) ret += _buf.slice(0, cpy);else _buf.copy(ret, c, 0, cpy);\n\n if (cpy < _buf.length) list[0] = _buf.slice(cpy);else list.shift();\n\n c += cpy;\n }\n }\n }\n\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n processNextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction forEach(xs, f) {\n for (var i = 0, l = xs.length; i < l; i++) {\n f(xs[i], i);\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction TransformState(stream) {\n this.afterTransform = function (er, data) {\n return afterTransform(stream, er, data);\n };\n\n this.needTransform = false;\n this.transforming = false;\n this.writecb = null;\n this.writechunk = null;\n this.writeencoding = null;\n}\n\nfunction afterTransform(stream, er, data) {\n var ts = stream._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data !== null && data !== undefined) stream.push(data);\n\n cb(er);\n\n var rs = stream._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n stream._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = new TransformState(this);\n\n // when the writable side finishes, then flush out anything remaining.\n var stream = this;\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n this.once('prefinish', function () {\n if (typeof this._flush === 'function') this._flush(function (er) {\n done(stream, er);\n });else done(stream);\n });\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('Not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nfunction done(stream, er) {\n if (er) return stream.emit('error', er);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n var ws = stream._writableState;\n var ts = stream._transformState;\n\n if (ws.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (ts.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/*<replacement>*/\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream;\n(function () {\n try {\n Stream = require('st' + 'ream');\n } catch (_) {} finally {\n if (!Stream) Stream = require('events').EventEmitter;\n }\n})();\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\n/*<replacement>*/\nvar bufferShim = require('buffer-shims');\n/*</replacement>*/\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\nvar Duplex;\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function writableStateGetBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')\n });\n } catch (_) {}\n})();\n\nvar Duplex;\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, though they're not\n // instanceof Writable, they're instanceof Readable.\n if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options);\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n processNextTick(cb, er);\n}\n\n// If we get something that is not a buffer, string, null, or undefined,\n// and we're not in objectMode, then that's an error.\n// Otherwise stream chunks are all considered to be of length=1, and the\n// watermarks determine how many objects to keep in the buffer, rather than\n// how many bytes or characters.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n // Always throw error if a null is written\n // if we are not in object mode then throw\n // if it is not a buffer, string, or undefined.\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n processNextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = bufferShim.from(chunk, encoding);\n }\n return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, cb) {\n chunk = decodeChunk(state, chunk, encoding);\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) processNextTick(cb, er);else cb(er);\n\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n while (entry) {\n buffer[count] = entry;\n entry = entry.next;\n count += 1;\n }\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequestCount = 0;\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished) {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n if (state.pendingcb === 0) {\n prefinish(stream, state);\n state.finished = true;\n stream.emit('finish');\n } else {\n prefinish(stream, state);\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) processNextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function (err) {\n var entry = _this.entry;\n _this.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = _this;\n } else {\n state.corkedRequestsFree = _this;\n }\n };\n}","'use strict';\n\nvar buffer = require('buffer');\nvar Buffer = buffer.Buffer;\nvar SlowBuffer = buffer.SlowBuffer;\nvar MAX_LEN = buffer.kMaxLength || 2147483647;\nexports.alloc = function alloc(size, fill, encoding) {\n if (typeof Buffer.alloc === 'function') {\n return Buffer.alloc(size, fill, encoding);\n }\n if (typeof encoding === 'number') {\n throw new TypeError('encoding must not be number');\n }\n if (typeof size !== 'number') {\n throw new TypeError('size must be a number');\n }\n if (size > MAX_LEN) {\n throw new RangeError('size is too large');\n }\n var enc = encoding;\n var _fill = fill;\n if (_fill === undefined) {\n enc = undefined;\n _fill = 0;\n }\n var buf = new Buffer(size);\n if (typeof _fill === 'string') {\n var fillBuf = new Buffer(_fill, enc);\n var flen = fillBuf.length;\n var i = -1;\n while (++i < size) {\n buf[i] = fillBuf[i % flen];\n }\n } else {\n buf.fill(_fill);\n }\n return buf;\n}\nexports.allocUnsafe = function allocUnsafe(size) {\n if (typeof Buffer.allocUnsafe === 'function') {\n return Buffer.allocUnsafe(size);\n }\n if (typeof size !== 'number') {\n throw new TypeError('size must be a number');\n }\n if (size > MAX_LEN) {\n throw new RangeError('size is too large');\n }\n return new Buffer(size);\n}\nexports.from = function from(value, encodingOrOffset, length) {\n if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {\n return Buffer.from(value, encodingOrOffset, length);\n }\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number');\n }\n if (typeof value === 'string') {\n return new Buffer(value, encodingOrOffset);\n }\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n var offset = encodingOrOffset;\n if (arguments.length === 1) {\n return new Buffer(value);\n }\n if (typeof offset === 'undefined') {\n offset = 0;\n }\n var len = length;\n if (typeof len === 'undefined') {\n len = value.byteLength - offset;\n }\n if (offset >= value.byteLength) {\n throw new RangeError('\\'offset\\' is out of bounds');\n }\n if (len > value.byteLength - offset) {\n throw new RangeError('\\'length\\' is out of bounds');\n }\n return new Buffer(value.slice(offset, offset + len));\n }\n if (Buffer.isBuffer(value)) {\n var out = new Buffer(value.length);\n value.copy(out, 0, 0, value.length);\n return out;\n }\n if (value) {\n if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {\n return new Buffer(value);\n }\n if (value.type === 'Buffer' && Array.isArray(value.data)) {\n return new Buffer(value.data);\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');\n}\nexports.allocUnsafeSlow = function allocUnsafeSlow(size) {\n if (typeof Buffer.allocUnsafeSlow === 'function') {\n return Buffer.allocUnsafeSlow(size);\n }\n if (typeof size !== 'number') {\n throw new TypeError('size must be a number');\n }\n if (size >= MAX_LEN) {\n throw new RangeError('size is too large');\n }\n return new SlowBuffer(size);\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","'use strict';\n\nif (!process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = nextTick;\n} else {\n module.exports = process.nextTick;\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","module.exports = require(\"./lib/_stream_passthrough.js\")\n","var Stream = (function (){\n try {\n return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify\n } catch(_){}\n}());\nexports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = Stream || exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n\nif (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {\n module.exports = Stream;\n}\n","module.exports = require(\"./lib/_stream_transform.js\")\n","module.exports = require(\"./lib/_stream_writable.js\")\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","var ClientRequest = require('./lib/request')\nvar extend = require('xtend')\nvar statusCodes = require('builtin-status-codes')\nvar url = require('url')\n\nvar http = exports\n\nhttp.request = function (opts, cb) {\n\tif (typeof opts === 'string')\n\t\topts = url.parse(opts)\n\telse\n\t\topts = extend(opts)\n\n\t// Normally, the page is loaded from http or https, so not specifying a protocol\n\t// will result in a (valid) protocol-relative url. However, this won't work if\n\t// the protocol is something else, like 'file:'\n\tvar defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''\n\n\tvar protocol = opts.protocol || defaultProtocol\n\tvar host = opts.hostname || opts.host\n\tvar port = opts.port\n\tvar path = opts.path || '/'\n\n\t// Necessary for IPv6 addresses\n\tif (host && host.indexOf(':') !== -1)\n\t\thost = '[' + host + ']'\n\n\t// This may be a relative url. The browser should always be able to interpret it correctly.\n\topts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path\n\topts.method = (opts.method || 'GET').toUpperCase()\n\topts.headers = opts.headers || {}\n\n\t// Also valid opts.auth, opts.mode\n\n\tvar req = new ClientRequest(opts)\n\tif (cb)\n\t\treq.on('response', cb)\n\treturn req\n}\n\nhttp.get = function get (opts, cb) {\n\tvar req = http.request(opts, cb)\n\treq.end()\n\treturn req\n}\n\nhttp.Agent = function () {}\nhttp.Agent.defaultMaxSockets = 4\n\nhttp.STATUS_CODES = statusCodes\n\nhttp.METHODS = [\n\t'CHECKOUT',\n\t'CONNECT',\n\t'COPY',\n\t'DELETE',\n\t'GET',\n\t'HEAD',\n\t'LOCK',\n\t'M-SEARCH',\n\t'MERGE',\n\t'MKACTIVITY',\n\t'MKCOL',\n\t'MOVE',\n\t'NOTIFY',\n\t'OPTIONS',\n\t'PATCH',\n\t'POST',\n\t'PROPFIND',\n\t'PROPPATCH',\n\t'PURGE',\n\t'PUT',\n\t'REPORT',\n\t'SEARCH',\n\t'SUBSCRIBE',\n\t'TRACE',\n\t'UNLOCK',\n\t'UNSUBSCRIBE'\n]","exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)\n\nexports.blobConstructor = false\ntry {\n\tnew Blob([new ArrayBuffer(1)])\n\texports.blobConstructor = true\n} catch (e) {}\n\nvar xhr = new global.XMLHttpRequest()\n// If location.host is empty, e.g. if this page/worker was loaded\n// from a Blob, then use example.com to avoid an error\nxhr.open('GET', global.location.host ? '/' : 'https://example.com')\n\nfunction checkTypeSupport (type) {\n\ttry {\n\t\txhr.responseType = type\n\t\treturn xhr.responseType === type\n\t} catch (e) {}\n\treturn false\n}\n\n// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.\n// Safari 7.1 appears to have fixed this bug.\nvar haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined'\nvar haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice)\n\nexports.arraybuffer = haveArrayBuffer && checkTypeSupport('arraybuffer')\n// These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\nexports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream')\nexports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer &&\n\tcheckTypeSupport('moz-chunked-arraybuffer')\nexports.overrideMimeType = isFunction(xhr.overrideMimeType)\nexports.vbArray = isFunction(global.VBArray)\n\nfunction isFunction (value) {\n return typeof value === 'function'\n}\n\nxhr = null // Help gc\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar response = require('./response')\nvar stream = require('readable-stream')\nvar toArrayBuffer = require('to-arraybuffer')\n\nvar IncomingMessage = response.IncomingMessage\nvar rStates = response.readyStates\n\nfunction decideMode (preferBinary) {\n\tif (capability.fetch) {\n\t\treturn 'fetch'\n\t} else if (capability.mozchunkedarraybuffer) {\n\t\treturn 'moz-chunked-arraybuffer'\n\t} else if (capability.msstream) {\n\t\treturn 'ms-stream'\n\t} else if (capability.arraybuffer && preferBinary) {\n\t\treturn 'arraybuffer'\n\t} else if (capability.vbArray && preferBinary) {\n\t\treturn 'text:vbarray'\n\t} else {\n\t\treturn 'text'\n\t}\n}\n\nvar ClientRequest = module.exports = function (opts) {\n\tvar self = this\n\tstream.Writable.call(self)\n\n\tself._opts = opts\n\tself._body = []\n\tself._headers = {}\n\tif (opts.auth)\n\t\tself.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'))\n\tObject.keys(opts.headers).forEach(function (name) {\n\t\tself.setHeader(name, opts.headers[name])\n\t})\n\n\tvar preferBinary\n\tif (opts.mode === 'prefer-streaming') {\n\t\t// If streaming is a high priority but binary compatibility and\n\t\t// the accuracy of the 'content-type' header aren't\n\t\tpreferBinary = false\n\t} else if (opts.mode === 'allow-wrong-content-type') {\n\t\t// If streaming is more important than preserving the 'content-type' header\n\t\tpreferBinary = !capability.overrideMimeType\n\t} else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {\n\t\t// Use binary if text streaming may corrupt data or the content-type header, or for speed\n\t\tpreferBinary = true\n\t} else {\n\t\tthrow new Error('Invalid value for opts.mode')\n\t}\n\tself._mode = decideMode(preferBinary)\n\n\tself.on('finish', function () {\n\t\tself._onFinish()\n\t})\n}\n\ninherits(ClientRequest, stream.Writable)\n\nClientRequest.prototype.setHeader = function (name, value) {\n\tvar self = this\n\tvar lowerName = name.toLowerCase()\n\t// This check is not necessary, but it prevents warnings from browsers about setting unsafe\n\t// headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but\n\t// http-browserify did it, so I will too.\n\tif (unsafeHeaders.indexOf(lowerName) !== -1)\n\t\treturn\n\n\tself._headers[lowerName] = {\n\t\tname: name,\n\t\tvalue: value\n\t}\n}\n\nClientRequest.prototype.getHeader = function (name) {\n\tvar self = this\n\treturn self._headers[name.toLowerCase()].value\n}\n\nClientRequest.prototype.removeHeader = function (name) {\n\tvar self = this\n\tdelete self._headers[name.toLowerCase()]\n}\n\nClientRequest.prototype._onFinish = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\tvar opts = self._opts\n\n\tvar headersObj = self._headers\n\tvar body\n\tif (opts.method === 'POST' || opts.method === 'PUT' || opts.method === 'PATCH') {\n\t\tif (capability.blobConstructor) {\n\t\t\tbody = new global.Blob(self._body.map(function (buffer) {\n\t\t\t\treturn toArrayBuffer(buffer)\n\t\t\t}), {\n\t\t\t\ttype: (headersObj['content-type'] || {}).value || ''\n\t\t\t})\n\t\t} else {\n\t\t\t// get utf8 string\n\t\t\tbody = Buffer.concat(self._body).toString()\n\t\t}\n\t}\n\n\tif (self._mode === 'fetch') {\n\t\tvar headers = Object.keys(headersObj).map(function (name) {\n\t\t\treturn [headersObj[name].name, headersObj[name].value]\n\t\t})\n\n\t\tglobal.fetch(self._opts.url, {\n\t\t\tmethod: self._opts.method,\n\t\t\theaders: headers,\n\t\t\tbody: body,\n\t\t\tmode: 'cors',\n\t\t\tcredentials: opts.withCredentials ? 'include' : 'same-origin'\n\t\t}).then(function (response) {\n\t\t\tself._fetchResponse = response\n\t\t\tself._connect()\n\t\t}, function (reason) {\n\t\t\tself.emit('error', reason)\n\t\t})\n\t} else {\n\t\tvar xhr = self._xhr = new global.XMLHttpRequest()\n\t\ttry {\n\t\t\txhr.open(self._opts.method, self._opts.url, true)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\t// Can't set responseType on really old browsers\n\t\tif ('responseType' in xhr)\n\t\t\txhr.responseType = self._mode.split(':')[0]\n\n\t\tif ('withCredentials' in xhr)\n\t\t\txhr.withCredentials = !!opts.withCredentials\n\n\t\tif (self._mode === 'text' && 'overrideMimeType' in xhr)\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined')\n\n\t\tObject.keys(headersObj).forEach(function (name) {\n\t\t\txhr.setRequestHeader(headersObj[name].name, headersObj[name].value)\n\t\t})\n\n\t\tself._response = null\n\t\txhr.onreadystatechange = function () {\n\t\t\tswitch (xhr.readyState) {\n\t\t\t\tcase rStates.LOADING:\n\t\t\t\tcase rStates.DONE:\n\t\t\t\t\tself._onXHRProgress()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Necessary for streaming in Firefox, since xhr.response is ONLY defined\n\t\t// in onprogress, not in onreadystatechange with xhr.readyState = 3\n\t\tif (self._mode === 'moz-chunked-arraybuffer') {\n\t\t\txhr.onprogress = function () {\n\t\t\t\tself._onXHRProgress()\n\t\t\t}\n\t\t}\n\n\t\txhr.onerror = function () {\n\t\t\tif (self._destroyed)\n\t\t\t\treturn\n\t\t\tself.emit('error', new Error('XHR error'))\n\t\t}\n\n\t\ttry {\n\t\t\txhr.send(body)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n}\n\n/**\n * Checks if xhr.status is readable and non-zero, indicating no error.\n * Even though the spec says it should be available in readyState 3,\n * accessing it throws an exception in IE8\n */\nfunction statusValid (xhr) {\n\ttry {\n\t\tvar status = xhr.status\n\t\treturn (status !== null && status !== 0)\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\nClientRequest.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tif (!statusValid(self._xhr) || self._destroyed)\n\t\treturn\n\n\tif (!self._response)\n\t\tself._connect()\n\n\tself._response._onXHRProgress()\n}\n\nClientRequest.prototype._connect = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\n\tself._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode)\n\tself.emit('response', self._response)\n}\n\nClientRequest.prototype._write = function (chunk, encoding, cb) {\n\tvar self = this\n\n\tself._body.push(chunk)\n\tcb()\n}\n\nClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {\n\tvar self = this\n\tself._destroyed = true\n\tif (self._response)\n\t\tself._response._destroyed = true\n\tif (self._xhr)\n\t\tself._xhr.abort()\n\t// Currently, there isn't a way to truly abort a fetch.\n\t// If you like bikeshedding, see https://github.com/whatwg/fetch/issues/27\n}\n\nClientRequest.prototype.end = function (data, encoding, cb) {\n\tvar self = this\n\tif (typeof data === 'function') {\n\t\tcb = data\n\t\tdata = undefined\n\t}\n\n\tstream.Writable.prototype.end.call(self, data, encoding, cb)\n}\n\nClientRequest.prototype.flushHeaders = function () {}\nClientRequest.prototype.setTimeout = function () {}\nClientRequest.prototype.setNoDelay = function () {}\nClientRequest.prototype.setSocketKeepAlive = function () {}\n\n// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\nvar unsafeHeaders = [\n\t'accept-charset',\n\t'accept-encoding',\n\t'access-control-request-headers',\n\t'access-control-request-method',\n\t'connection',\n\t'content-length',\n\t'cookie',\n\t'cookie2',\n\t'date',\n\t'dnt',\n\t'expect',\n\t'host',\n\t'keep-alive',\n\t'origin',\n\t'referer',\n\t'te',\n\t'trailer',\n\t'transfer-encoding',\n\t'upgrade',\n\t'user-agent',\n\t'via'\n]\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar stream = require('readable-stream')\n\nvar rStates = exports.readyStates = {\n\tUNSENT: 0,\n\tOPENED: 1,\n\tHEADERS_RECEIVED: 2,\n\tLOADING: 3,\n\tDONE: 4\n}\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode) {\n\tvar self = this\n\tstream.Readable.call(self)\n\n\tself._mode = mode\n\tself.headers = {}\n\tself.rawHeaders = []\n\tself.trailers = {}\n\tself.rawTrailers = []\n\n\t// Fake the 'close' event, but only once 'end' fires\n\tself.on('end', function () {\n\t\t// The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n\t\tprocess.nextTick(function () {\n\t\t\tself.emit('close')\n\t\t})\n\t})\n\n\tif (mode === 'fetch') {\n\t\tself._fetchResponse = response\n\n\t\tself.url = response.url\n\t\tself.statusCode = response.status\n\t\tself.statusMessage = response.statusText\n\t\t// backwards compatible version of for (<item> of <iterable>):\n\t\t// for (var <item>,_i,_it = <iterable>[Symbol.iterator](); <item> = (_i = _it.next()).value,!_i.done;)\n\t\tfor (var header, _i, _it = response.headers[Symbol.iterator](); header = (_i = _it.next()).value, !_i.done;) {\n\t\t\tself.headers[header[0].toLowerCase()] = header[1]\n\t\t\tself.rawHeaders.push(header[0], header[1])\n\t\t}\n\n\t\t// TODO: this doesn't respect backpressure. Once WritableStream is available, this can be fixed\n\t\tvar reader = response.body.getReader()\n\t\tfunction read () {\n\t\t\treader.read().then(function (result) {\n\t\t\t\tif (self._destroyed)\n\t\t\t\t\treturn\n\t\t\t\tif (result.done) {\n\t\t\t\t\tself.push(null)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tself.push(new Buffer(result.value))\n\t\t\t\tread()\n\t\t\t})\n\t\t}\n\t\tread()\n\n\t} else {\n\t\tself._xhr = xhr\n\t\tself._pos = 0\n\n\t\tself.url = xhr.responseURL\n\t\tself.statusCode = xhr.status\n\t\tself.statusMessage = xhr.statusText\n\t\tvar headers = xhr.getAllResponseHeaders().split(/\\r?\\n/)\n\t\theaders.forEach(function (header) {\n\t\t\tvar matches = header.match(/^([^:]+):\\s*(.*)/)\n\t\t\tif (matches) {\n\t\t\t\tvar key = matches[1].toLowerCase()\n\t\t\t\tif (key === 'set-cookie') {\n\t\t\t\t\tif (self.headers[key] === undefined) {\n\t\t\t\t\t\tself.headers[key] = []\n\t\t\t\t\t}\n\t\t\t\t\tself.headers[key].push(matches[2])\n\t\t\t\t} else if (self.headers[key] !== undefined) {\n\t\t\t\t\tself.headers[key] += ', ' + matches[2]\n\t\t\t\t} else {\n\t\t\t\t\tself.headers[key] = matches[2]\n\t\t\t\t}\n\t\t\t\tself.rawHeaders.push(matches[1], matches[2])\n\t\t\t}\n\t\t})\n\n\t\tself._charset = 'x-user-defined'\n\t\tif (!capability.overrideMimeType) {\n\t\t\tvar mimeType = self.rawHeaders['mime-type']\n\t\t\tif (mimeType) {\n\t\t\t\tvar charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/)\n\t\t\t\tif (charsetMatch) {\n\t\t\t\t\tself._charset = charsetMatch[1].toLowerCase()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!self._charset)\n\t\t\t\tself._charset = 'utf-8' // best guess\n\t\t}\n\t}\n}\n\ninherits(IncomingMessage, stream.Readable)\n\nIncomingMessage.prototype._read = function () {}\n\nIncomingMessage.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tvar xhr = self._xhr\n\n\tvar response = null\n\tswitch (self._mode) {\n\t\tcase 'text:vbarray': // For IE9\n\t\t\tif (xhr.readyState !== rStates.DONE)\n\t\t\t\tbreak\n\t\t\ttry {\n\t\t\t\t// This fails in IE8\n\t\t\t\tresponse = new global.VBArray(xhr.responseBody).toArray()\n\t\t\t} catch (e) {}\n\t\t\tif (response !== null) {\n\t\t\t\tself.push(new Buffer(response))\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Falls through in IE8\t\n\t\tcase 'text':\n\t\t\ttry { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4\n\t\t\t\tresponse = xhr.responseText\n\t\t\t} catch (e) {\n\t\t\t\tself._mode = 'text:vbarray'\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (response.length > self._pos) {\n\t\t\t\tvar newData = response.substr(self._pos)\n\t\t\t\tif (self._charset === 'x-user-defined') {\n\t\t\t\t\tvar buffer = new Buffer(newData.length)\n\t\t\t\t\tfor (var i = 0; i < newData.length; i++)\n\t\t\t\t\t\tbuffer[i] = newData.charCodeAt(i) & 0xff\n\n\t\t\t\t\tself.push(buffer)\n\t\t\t\t} else {\n\t\t\t\t\tself.push(newData, self._charset)\n\t\t\t\t}\n\t\t\t\tself._pos = response.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'arraybuffer':\n\t\t\tif (xhr.readyState !== rStates.DONE)\n\t\t\t\tbreak\n\t\t\tresponse = xhr.response\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'moz-chunked-arraybuffer': // take whole\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING || !response)\n\t\t\t\tbreak\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'ms-stream':\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING)\n\t\t\t\tbreak\n\t\t\tvar reader = new global.MSStreamReader()\n\t\t\treader.onprogress = function () {\n\t\t\t\tif (reader.result.byteLength > self._pos) {\n\t\t\t\t\tself.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))))\n\t\t\t\t\tself._pos = reader.result.byteLength\n\t\t\t\t}\n\t\t\t}\n\t\t\treader.onload = function () {\n\t\t\t\tself.push(null)\n\t\t\t}\n\t\t\t// reader.onerror = ??? // TODO: this\n\t\t\treader.readAsArrayBuffer(response)\n\t\t\tbreak\n\t}\n\n\t// The ms-stream case handles end separately in reader.onload()\n\tif (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n\t\tself.push(null)\n\t}\n}\n","module.exports = {\n \"100\": \"Continue\",\n \"101\": \"Switching Protocols\",\n \"102\": \"Processing\",\n \"200\": \"OK\",\n \"201\": \"Created\",\n \"202\": \"Accepted\",\n \"203\": \"Non-Authoritative Information\",\n \"204\": \"No Content\",\n \"205\": \"Reset Content\",\n \"206\": \"Partial Content\",\n \"207\": \"Multi-Status\",\n \"208\": \"Already Reported\",\n \"226\": \"IM Used\",\n \"300\": \"Multiple Choices\",\n \"301\": \"Moved Permanently\",\n \"302\": \"Found\",\n \"303\": \"See Other\",\n \"304\": \"Not Modified\",\n \"305\": \"Use Proxy\",\n \"307\": \"Temporary Redirect\",\n \"308\": \"Permanent Redirect\",\n \"400\": \"Bad Request\",\n \"401\": \"Unauthorized\",\n \"402\": \"Payment Required\",\n \"403\": \"Forbidden\",\n \"404\": \"Not Found\",\n \"405\": \"Method Not Allowed\",\n \"406\": \"Not Acceptable\",\n \"407\": \"Proxy Authentication Required\",\n \"408\": \"Request Timeout\",\n \"409\": \"Conflict\",\n \"410\": \"Gone\",\n \"411\": \"Length Required\",\n \"412\": \"Precondition Failed\",\n \"413\": \"Payload Too Large\",\n \"414\": \"URI Too Long\",\n \"415\": \"Unsupported Media Type\",\n \"416\": \"Range Not Satisfiable\",\n \"417\": \"Expectation Failed\",\n \"418\": \"I'm a teapot\",\n \"421\": \"Misdirected Request\",\n \"422\": \"Unprocessable Entity\",\n \"423\": \"Locked\",\n \"424\": \"Failed Dependency\",\n \"425\": \"Unordered Collection\",\n \"426\": \"Upgrade Required\",\n \"428\": \"Precondition Required\",\n \"429\": \"Too Many Requests\",\n \"431\": \"Request Header Fields Too Large\",\n \"500\": \"Internal Server Error\",\n \"501\": \"Not Implemented\",\n \"502\": \"Bad Gateway\",\n \"503\": \"Service Unavailable\",\n \"504\": \"Gateway Timeout\",\n \"505\": \"HTTP Version Not Supported\",\n \"506\": \"Variant Also Negotiates\",\n \"507\": \"Insufficient Storage\",\n \"508\": \"Loop Detected\",\n \"509\": \"Bandwidth Limit Exceeded\",\n \"510\": \"Not Extended\",\n \"511\": \"Network Authentication Required\"\n}\n","var Buffer = require('buffer').Buffer\n\nmodule.exports = function (buf) {\n\t// If the buffer is backed by a Uint8Array, a faster version will work\n\tif (buf instanceof Uint8Array) {\n\t\t// If the buffer isn't a subarray, return the underlying ArrayBuffer\n\t\tif (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {\n\t\t\treturn buf.buffer\n\t\t} else if (typeof buf.buffer.slice === 'function') {\n\t\t\t// Otherwise we need to get a proper copy\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)\n\t\t}\n\t}\n\n\tif (Buffer.isBuffer(buf)) {\n\t\t// This is the slow version that will work with any Buffer\n\t\t// implementation (even in old browsers)\n\t\tvar arrayCopy = new Uint8Array(buf.length)\n\t\tvar len = buf.length\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tarrayCopy[i] = buf[i]\n\t\t}\n\t\treturn arrayCopy.buffer\n\t} else {\n\t\tthrow new Error('Argument must be a Buffer')\n\t}\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar Buffer = require('buffer').Buffer;\n\nvar isBufferEncoding = Buffer.isEncoding\n || function(encoding) {\n switch (encoding && encoding.toLowerCase()) {\n case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;\n default: return false;\n }\n }\n\n\nfunction assertEncoding(encoding) {\n if (encoding && !isBufferEncoding(encoding)) {\n throw new Error('Unknown encoding: ' + encoding);\n }\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters. CESU-8 is handled as part of the UTF-8 encoding.\n//\n// @TODO Handling all encodings inside a single object makes it very difficult\n// to reason about this code, so it should be split up in the future.\n// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n// points as used by CESU-8.\nvar StringDecoder = exports.StringDecoder = function(encoding) {\n this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');\n assertEncoding(encoding);\n switch (this.encoding) {\n case 'utf8':\n // CESU-8 represents each of Surrogate Pair by 3-bytes\n this.surrogateSize = 3;\n break;\n case 'ucs2':\n case 'utf16le':\n // UTF-16 represents each of Surrogate Pair by 2-bytes\n this.surrogateSize = 2;\n this.detectIncompleteChar = utf16DetectIncompleteChar;\n break;\n case 'base64':\n // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n this.surrogateSize = 3;\n this.detectIncompleteChar = base64DetectIncompleteChar;\n break;\n default:\n this.write = passThroughWrite;\n return;\n }\n\n // Enough space to store all bytes of a single character. UTF-8 needs 4\n // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n this.charBuffer = new Buffer(6);\n // Number of bytes received for the current incomplete multi-byte character.\n this.charReceived = 0;\n // Number of bytes expected for the current incomplete multi-byte character.\n this.charLength = 0;\n};\n\n\n// write decodes the given buffer and returns it as JS string that is\n// guaranteed to not contain any partial multi-byte characters. Any partial\n// character found at the end of the buffer is buffered up, and will be\n// returned when calling write again with the remaining bytes.\n//\n// Note: Converting a Buffer containing an orphan surrogate to a String\n// currently works, but converting a String to a Buffer (via `new Buffer`, or\n// Buffer#write) will replace incomplete surrogates with the unicode\n// replacement character. See https://codereview.chromium.org/121173009/ .\nStringDecoder.prototype.write = function(buffer) {\n var charStr = '';\n // if our last write ended with an incomplete multibyte character\n while (this.charLength) {\n // determine how many remaining bytes this buffer has to offer for this char\n var available = (buffer.length >= this.charLength - this.charReceived) ?\n this.charLength - this.charReceived :\n buffer.length;\n\n // add the new bytes to the char buffer\n buffer.copy(this.charBuffer, this.charReceived, 0, available);\n this.charReceived += available;\n\n if (this.charReceived < this.charLength) {\n // still not enough chars in this buffer? wait for more ...\n return '';\n }\n\n // remove bytes belonging to the current character from the buffer\n buffer = buffer.slice(available, buffer.length);\n\n // get the character that was split\n charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);\n\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n var charCode = charStr.charCodeAt(charStr.length - 1);\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n this.charLength += this.surrogateSize;\n charStr = '';\n continue;\n }\n this.charReceived = this.charLength = 0;\n\n // if there are no more bytes in this buffer, just emit our char\n if (buffer.length === 0) {\n return charStr;\n }\n break;\n }\n\n // determine and set charLength / charReceived\n this.detectIncompleteChar(buffer);\n\n var end = buffer.length;\n if (this.charLength) {\n // buffer the incomplete character bytes we got\n buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);\n end -= this.charReceived;\n }\n\n charStr += buffer.toString(this.encoding, 0, end);\n\n var end = charStr.length - 1;\n var charCode = charStr.charCodeAt(end);\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n var size = this.surrogateSize;\n this.charLength += size;\n this.charReceived += size;\n this.charBuffer.copy(this.charBuffer, size, 0, size);\n buffer.copy(this.charBuffer, 0, 0, size);\n return charStr.substring(0, end);\n }\n\n // or just emit the charStr\n return charStr;\n};\n\n// detectIncompleteChar determines if there is an incomplete UTF-8 character at\n// the end of the given buffer. If so, it sets this.charLength to the byte\n// length that character, and sets this.charReceived to the number of bytes\n// that are available for this character.\nStringDecoder.prototype.detectIncompleteChar = function(buffer) {\n // determine how many bytes we have to check at the end of this buffer\n var i = (buffer.length >= 3) ? 3 : buffer.length;\n\n // Figure out if one of the last i bytes of our buffer announces an\n // incomplete char.\n for (; i > 0; i--) {\n var c = buffer[buffer.length - i];\n\n // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n // 110XXXXX\n if (i == 1 && c >> 5 == 0x06) {\n this.charLength = 2;\n break;\n }\n\n // 1110XXXX\n if (i <= 2 && c >> 4 == 0x0E) {\n this.charLength = 3;\n break;\n }\n\n // 11110XXX\n if (i <= 3 && c >> 3 == 0x1E) {\n this.charLength = 4;\n break;\n }\n }\n this.charReceived = i;\n};\n\nStringDecoder.prototype.end = function(buffer) {\n var res = '';\n if (buffer && buffer.length)\n res = this.write(buffer);\n\n if (this.charReceived) {\n var cr = this.charReceived;\n var buf = this.charBuffer;\n var enc = this.encoding;\n res += buf.slice(0, cr).toString(enc);\n }\n\n return res;\n};\n\nfunction passThroughWrite(buffer) {\n return buffer.toString(this.encoding);\n}\n\nfunction utf16DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 2;\n this.charLength = this.charReceived ? 2 : 0;\n}\n\nfunction base64DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 3;\n this.charLength = this.charReceived ? 3 : 0;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","var path = require('path');\nvar minimist = require('minimist');\nvar wordwrap = require('wordwrap');\n\n/* Hack an instance of Argv with process.argv into Argv\n so people can do\n require('optimist')(['--beeble=1','-z','zizzle']).argv\n to parse a list of args and\n require('optimist').argv\n to get a parsed version of process.argv.\n*/\n\nvar inst = Argv(process.argv.slice(2));\nObject.keys(inst).forEach(function (key) {\n Argv[key] = typeof inst[key] == 'function'\n ? inst[key].bind(inst)\n : inst[key];\n});\n\nvar exports = module.exports = Argv;\nfunction Argv (processArgs, cwd) {\n var self = {};\n if (!cwd) cwd = process.cwd();\n \n self.$0 = process.argv\n .slice(0,2)\n .map(function (x) {\n var b = rebase(cwd, x);\n return x.match(/^\\//) && b.length < x.length\n ? b : x\n })\n .join(' ')\n ;\n \n if (process.env._ != undefined && process.argv[1] == process.env._) {\n self.$0 = process.env._.replace(\n path.dirname(process.execPath) + '/', ''\n );\n }\n \n var options = {\n boolean: [],\n string: [],\n alias: {},\n default: []\n };\n \n self.boolean = function (bools) {\n options.boolean.push.apply(options.boolean, [].concat(bools));\n return self;\n };\n \n self.string = function (strings) {\n options.string.push.apply(options.string, [].concat(strings));\n return self;\n };\n \n self.default = function (key, value) {\n if (typeof key === 'object') {\n Object.keys(key).forEach(function (k) {\n self.default(k, key[k]);\n });\n }\n else {\n options.default[key] = value;\n }\n return self;\n };\n \n self.alias = function (x, y) {\n if (typeof x === 'object') {\n Object.keys(x).forEach(function (key) {\n self.alias(key, x[key]);\n });\n }\n else {\n options.alias[x] = (options.alias[x] || []).concat(y);\n }\n return self;\n };\n \n var demanded = {};\n self.demand = function (keys) {\n if (typeof keys == 'number') {\n if (!demanded._) demanded._ = 0;\n demanded._ += keys;\n }\n else if (Array.isArray(keys)) {\n keys.forEach(function (key) {\n self.demand(key);\n });\n }\n else {\n demanded[keys] = true;\n }\n \n return self;\n };\n \n var usage;\n self.usage = function (msg, opts) {\n if (!opts && typeof msg === 'object') {\n opts = msg;\n msg = null;\n }\n \n usage = msg;\n \n if (opts) self.options(opts);\n \n return self;\n };\n \n function fail (msg) {\n self.showHelp();\n if (msg) console.error(msg);\n process.exit(1);\n }\n \n var checks = [];\n self.check = function (f) {\n checks.push(f);\n return self;\n };\n \n var descriptions = {};\n self.describe = function (key, desc) {\n if (typeof key === 'object') {\n Object.keys(key).forEach(function (k) {\n self.describe(k, key[k]);\n });\n }\n else {\n descriptions[key] = desc;\n }\n return self;\n };\n \n self.parse = function (args) {\n return parseArgs(args);\n };\n \n self.option = self.options = function (key, opt) {\n if (typeof key === 'object') {\n Object.keys(key).forEach(function (k) {\n self.options(k, key[k]);\n });\n }\n else {\n if (opt.alias) self.alias(key, opt.alias);\n if (opt.demand) self.demand(key);\n if (typeof opt.default !== 'undefined') {\n self.default(key, opt.default);\n }\n \n if (opt.boolean || opt.type === 'boolean') {\n self.boolean(key);\n }\n if (opt.string || opt.type === 'string') {\n self.string(key);\n }\n \n var desc = opt.describe || opt.description || opt.desc;\n if (desc) {\n self.describe(key, desc);\n }\n }\n \n return self;\n };\n \n var wrap = null;\n self.wrap = function (cols) {\n wrap = cols;\n return self;\n };\n \n self.showHelp = function (fn) {\n if (!fn) fn = console.error;\n fn(self.help());\n };\n \n self.help = function () {\n var keys = Object.keys(\n Object.keys(descriptions)\n .concat(Object.keys(demanded))\n .concat(Object.keys(options.default))\n .reduce(function (acc, key) {\n if (key !== '_') acc[key] = true;\n return acc;\n }, {})\n );\n \n var help = keys.length ? [ 'Options:' ] : [];\n \n if (usage) {\n help.unshift(usage.replace(/\\$0/g, self.$0), '');\n }\n \n var switches = keys.reduce(function (acc, key) {\n acc[key] = [ key ].concat(options.alias[key] || [])\n .map(function (sw) {\n return (sw.length > 1 ? '--' : '-') + sw\n })\n .join(', ')\n ;\n return acc;\n }, {});\n \n var switchlen = longest(Object.keys(switches).map(function (s) {\n return switches[s] || '';\n }));\n \n var desclen = longest(Object.keys(descriptions).map(function (d) { \n return descriptions[d] || '';\n }));\n \n keys.forEach(function (key) {\n var kswitch = switches[key];\n var desc = descriptions[key] || '';\n \n if (wrap) {\n desc = wordwrap(switchlen + 4, wrap)(desc)\n .slice(switchlen + 4)\n ;\n }\n \n var spadding = new Array(\n Math.max(switchlen - kswitch.length + 3, 0)\n ).join(' ');\n \n var dpadding = new Array(\n Math.max(desclen - desc.length + 1, 0)\n ).join(' ');\n \n var type = null;\n \n if (options.boolean[key]) type = '[boolean]';\n if (options.string[key]) type = '[string]';\n \n if (!wrap && dpadding.length > 0) {\n desc += dpadding;\n }\n \n var prelude = ' ' + kswitch + spadding;\n var extra = [\n type,\n demanded[key]\n ? '[required]'\n : null\n ,\n options.default[key] !== undefined\n ? '[default: ' + JSON.stringify(options.default[key]) + ']'\n : null\n ,\n ].filter(Boolean).join(' ');\n \n var body = [ desc, extra ].filter(Boolean).join(' ');\n \n if (wrap) {\n var dlines = desc.split('\\n');\n var dlen = dlines.slice(-1)[0].length\n + (dlines.length === 1 ? prelude.length : 0)\n \n body = desc + (dlen + extra.length > wrap - 2\n ? '\\n'\n + new Array(wrap - extra.length + 1).join(' ')\n + extra\n : new Array(wrap - extra.length - dlen + 1).join(' ')\n + extra\n );\n }\n \n help.push(prelude + body);\n });\n \n help.push('');\n return help.join('\\n');\n };\n \n Object.defineProperty(self, 'argv', {\n get : function () { return parseArgs(processArgs) },\n enumerable : true,\n });\n \n function parseArgs (args) {\n var argv = minimist(args, options);\n argv.$0 = self.$0;\n \n if (demanded._ && argv._.length < demanded._) {\n fail('Not enough non-option arguments: got '\n + argv._.length + ', need at least ' + demanded._\n );\n }\n \n var missing = [];\n Object.keys(demanded).forEach(function (key) {\n if (!argv[key]) missing.push(key);\n });\n \n if (missing.length) {\n fail('Missing required arguments: ' + missing.join(', '));\n }\n \n checks.forEach(function (f) {\n try {\n if (f(argv) === false) {\n fail('Argument check failed: ' + f.toString());\n }\n }\n catch (err) {\n fail(err)\n }\n });\n \n return argv;\n }\n \n function longest (xs) {\n return Math.max.apply(\n null,\n xs.map(function (x) { return x.length })\n );\n }\n \n return self;\n};\n\n// rebase an absolute path to a relative one with respect to a base directory\n// exported for tests\nexports.rebase = rebase;\nfunction rebase (base, dir) {\n var ds = path.normalize(dir).split('/').slice(1);\n var bs = path.normalize(base).split('/').slice(1);\n \n for (var i = 0; ds[i] && ds[i] == bs[i]; i++);\n ds.splice(0, i); bs.splice(0, i);\n \n var p = path.normalize(\n bs.map(function () { return '..' }).concat(ds).join('/')\n ).replace(/\\/$/,'').replace(/^$/, '.');\n return p.match(/^[.\\/]/) ? p : './' + p;\n};\n","module.exports = function (args, opts) {\n if (!opts) opts = {};\n \n var flags = { bools : {}, strings : {} };\n \n [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {\n flags.bools[key] = true;\n });\n \n var aliases = {};\n Object.keys(opts.alias || {}).forEach(function (key) {\n aliases[key] = [].concat(opts.alias[key]);\n aliases[key].forEach(function (x) {\n aliases[x] = [key].concat(aliases[key].filter(function (y) {\n return x !== y;\n }));\n });\n });\n\n [].concat(opts.string).filter(Boolean).forEach(function (key) {\n flags.strings[key] = true;\n if (aliases[key]) {\n flags.strings[aliases[key]] = true;\n }\n });\n\n var defaults = opts['default'] || {};\n \n var argv = { _ : [] };\n Object.keys(flags.bools).forEach(function (key) {\n setArg(key, defaults[key] === undefined ? false : defaults[key]);\n });\n \n var notFlags = [];\n\n if (args.indexOf('--') !== -1) {\n notFlags = args.slice(args.indexOf('--')+1);\n args = args.slice(0, args.indexOf('--'));\n }\n\n function setArg (key, val) {\n var value = !flags.strings[key] && isNumber(val)\n ? Number(val) : val\n ;\n setKey(argv, key.split('.'), value);\n \n (aliases[key] || []).forEach(function (x) {\n setKey(argv, x.split('.'), value);\n });\n }\n \n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n \n if (/^--.+=/.test(arg)) {\n // Using [\\s\\S] instead of . because js doesn't support the\n // 'dotall' regex modifier. See:\n // http://stackoverflow.com/a/1068308/13216\n var m = arg.match(/^--([^=]+)=([\\s\\S]*)$/);\n setArg(m[1], m[2]);\n }\n else if (/^--no-.+/.test(arg)) {\n var key = arg.match(/^--no-(.+)/)[1];\n setArg(key, false);\n }\n else if (/^--.+/.test(arg)) {\n var key = arg.match(/^--(.+)/)[1];\n var next = args[i + 1];\n if (next !== undefined && !/^-/.test(next)\n && !flags.bools[key]\n && (aliases[key] ? !flags.bools[aliases[key]] : true)) {\n setArg(key, next);\n i++;\n }\n else if (/^(true|false)$/.test(next)) {\n setArg(key, next === 'true');\n i++;\n }\n else {\n setArg(key, flags.strings[key] ? '' : true);\n }\n }\n else if (/^-[^-]+/.test(arg)) {\n var letters = arg.slice(1,-1).split('');\n \n var broken = false;\n for (var j = 0; j < letters.length; j++) {\n var next = arg.slice(j+2);\n \n if (next === '-') {\n setArg(letters[j], next)\n continue;\n }\n \n if (/[A-Za-z]/.test(letters[j])\n && /-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next)) {\n setArg(letters[j], next);\n broken = true;\n break;\n }\n \n if (letters[j+1] && letters[j+1].match(/\\W/)) {\n setArg(letters[j], arg.slice(j+2));\n broken = true;\n break;\n }\n else {\n setArg(letters[j], flags.strings[letters[j]] ? '' : true);\n }\n }\n \n var key = arg.slice(-1)[0];\n if (!broken && key !== '-') {\n if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])\n && !flags.bools[key]\n && (aliases[key] ? !flags.bools[aliases[key]] : true)) {\n setArg(key, args[i+1]);\n i++;\n }\n else if (args[i+1] && /true|false/.test(args[i+1])) {\n setArg(key, args[i+1] === 'true');\n i++;\n }\n else {\n setArg(key, flags.strings[key] ? '' : true);\n }\n }\n }\n else {\n argv._.push(\n flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)\n );\n }\n }\n \n Object.keys(defaults).forEach(function (key) {\n if (!hasKey(argv, key.split('.'))) {\n setKey(argv, key.split('.'), defaults[key]);\n \n (aliases[key] || []).forEach(function (x) {\n setKey(argv, x.split('.'), defaults[key]);\n });\n }\n });\n \n notFlags.forEach(function(key) {\n argv._.push(key);\n });\n\n return argv;\n};\n\nfunction hasKey (obj, keys) {\n var o = obj;\n keys.slice(0,-1).forEach(function (key) {\n o = (o[key] || {});\n });\n\n var key = keys[keys.length - 1];\n return key in o;\n}\n\nfunction setKey (obj, keys, value) {\n var o = obj;\n keys.slice(0,-1).forEach(function (key) {\n if (o[key] === undefined) o[key] = {};\n o = o[key];\n });\n \n var key = keys[keys.length - 1];\n if (o[key] === undefined || typeof o[key] === 'boolean') {\n o[key] = value;\n }\n else if (Array.isArray(o[key])) {\n o[key].push(value);\n }\n else {\n o[key] = [ o[key], value ];\n }\n}\n\nfunction isNumber (x) {\n if (typeof x === 'number') return true;\n if (/^0x[0-9a-f]+$/i.test(x)) return true;\n return /^[-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(e[-+]?\\d+)?$/.test(x);\n}\n\n","var wordwrap = module.exports = function (start, stop, params) {\n if (typeof start === 'object') {\n params = start;\n start = params.start;\n stop = params.stop;\n }\n \n if (typeof stop === 'object') {\n params = stop;\n start = start || params.start;\n stop = undefined;\n }\n \n if (!stop) {\n stop = start;\n start = 0;\n }\n \n if (!params) params = {};\n var mode = params.mode || 'soft';\n var re = mode === 'hard' ? /\\b/ : /(\\S+\\s+)/;\n \n return function (text) {\n var chunks = text.toString()\n .split(re)\n .reduce(function (acc, x) {\n if (mode === 'hard') {\n for (var i = 0; i < x.length; i += stop - start) {\n acc.push(x.slice(i, i + stop - start));\n }\n }\n else acc.push(x)\n return acc;\n }, [])\n ;\n \n return chunks.reduce(function (lines, rawChunk) {\n if (rawChunk === '') return lines;\n \n var chunk = rawChunk.replace(/\\t/g, ' ');\n \n var i = lines.length - 1;\n if (lines[i].length + chunk.length > stop) {\n lines[i] = lines[i].replace(/\\s+$/, '');\n \n chunk.split(/\\n/).forEach(function (c) {\n lines.push(\n new Array(start + 1).join(' ')\n + c.replace(/^\\s+/, '')\n );\n });\n }\n else if (chunk.match(/\\n/)) {\n var xs = chunk.split(/\\n/);\n lines[i] += xs.shift();\n xs.forEach(function (c) {\n lines.push(\n new Array(start + 1).join(' ')\n + c.replace(/^\\s+/, '')\n );\n });\n }\n else {\n lines[i] += chunk;\n }\n \n return lines;\n }, [ new Array(start + 1).join(' ') ]).join('\\n');\n };\n};\n\nwordwrap.soft = wordwrap;\n\nwordwrap.hard = function (start, stop) {\n return wordwrap(start, stop, { mode : 'hard' });\n};\n",";(function (sax) { // wrapper for non-node envs\n sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n 'procInstName', 'procInstBody', 'entity', 'attribName',\n 'attribValue', 'cdata', 'script'\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace'\n ]\n\n function SAXParser (strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F () {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength (parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers (parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers (parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () { end(this) },\n write: write,\n resume: function () { this.error = null; return this },\n close: function () { return this.write(null) },\n flush: function () { flushBuffers(this) }\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream (strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function SAXStream (strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream\n }\n })\n\n SAXStream.prototype.write = function (data) {\n if (typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)) {\n if (!this._decoder) {\n var SD = require('string_decoder').StringDecoder\n this._decoder = new SD('utf8')\n }\n data = this._decoder.write(data)\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // character classes and tokens\n var whitespace = '\\r\\n\\t '\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var number = '0124356789'\n var letter = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\n // (Letter | \"_\" | \":\")\n var quote = '\\'\"'\n var attribEnd = whitespace + '>'\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // turn all the string character sets into character class objects.\n whitespace = charClass(whitespace)\n number = charClass(number)\n letter = charClass(letter)\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040\\.\\d-]/\n\n var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040\\.\\d-]/\n\n quote = charClass(quote)\n attribEnd = charClass(attribEnd)\n\n function charClass (str) {\n return str.split('').reduce(function (s, c) {\n s[c] = true\n return s\n }, {})\n }\n\n function isRegExp (c) {\n return Object.prototype.toString.call(c) === '[object RegExp]'\n }\n\n function is (charclass, c) {\n return isRegExp(charclass) ? !!c.match(charclass) : charclass[c]\n }\n\n function not (charclass, c) {\n return !is(charclass, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // &amp and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // <!BLARG\n SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n DOCTYPE: S++, // <!DOCTYPE\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n COMMENT_STARTING: S++, // <!-\n COMMENT: S++, // <!--\n COMMENT_ENDING: S++, // <!-- blah -\n COMMENT_ENDED: S++, // <!-- blah --\n CDATA: S++, // <![CDATA[ something\n CDATA_ENDING: S++, // ]\n CDATA_ENDING_2: S++, // ]]\n PROC_INST: S++, // <?hi\n PROC_INST_BODY: S++, // <?hi there\n PROC_INST_ENDING: S++, // <?hi \"there\" ?\n OPEN_TAG: S++, // <strong\n OPEN_TAG_SLASH: S++, // <strong /\n ATTRIB: S++, // <a\n ATTRIB_NAME: S++, // <a foo\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n ATTRIB_VALUE: S++, // <a foo=\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\"&quot;\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar=&quot\n CLOSE_TAG: S++, // </a\n CLOSE_TAG_SAW_WHITE: S++, // </a >\n SCRIPT: S++, // <script> ...\n SCRIPT_ENDING: S++ // <script> ... <\n }\n\n sax.XML_ENTITIES = {\n 'amp': '&',\n 'gt': '>',\n 'lt': '<',\n 'quot': '\"',\n 'apos': \"'\"\n }\n\n sax.ENTITIES = {\n 'amp': '&',\n 'gt': '>',\n 'lt': '<',\n 'quot': '\"',\n 'apos': \"'\",\n 'AElig': 198,\n 'Aacute': 193,\n 'Acirc': 194,\n 'Agrave': 192,\n 'Aring': 197,\n 'Atilde': 195,\n 'Auml': 196,\n 'Ccedil': 199,\n 'ETH': 208,\n 'Eacute': 201,\n 'Ecirc': 202,\n 'Egrave': 200,\n 'Euml': 203,\n 'Iacute': 205,\n 'Icirc': 206,\n 'Igrave': 204,\n 'Iuml': 207,\n 'Ntilde': 209,\n 'Oacute': 211,\n 'Ocirc': 212,\n 'Ograve': 210,\n 'Oslash': 216,\n 'Otilde': 213,\n 'Ouml': 214,\n 'THORN': 222,\n 'Uacute': 218,\n 'Ucirc': 219,\n 'Ugrave': 217,\n 'Uuml': 220,\n 'Yacute': 221,\n 'aacute': 225,\n 'acirc': 226,\n 'aelig': 230,\n 'agrave': 224,\n 'aring': 229,\n 'atilde': 227,\n 'auml': 228,\n 'ccedil': 231,\n 'eacute': 233,\n 'ecirc': 234,\n 'egrave': 232,\n 'eth': 240,\n 'euml': 235,\n 'iacute': 237,\n 'icirc': 238,\n 'igrave': 236,\n 'iuml': 239,\n 'ntilde': 241,\n 'oacute': 243,\n 'ocirc': 244,\n 'ograve': 242,\n 'oslash': 248,\n 'otilde': 245,\n 'ouml': 246,\n 'szlig': 223,\n 'thorn': 254,\n 'uacute': 250,\n 'ucirc': 251,\n 'ugrave': 249,\n 'uuml': 252,\n 'yacute': 253,\n 'yuml': 255,\n 'copy': 169,\n 'reg': 174,\n 'nbsp': 160,\n 'iexcl': 161,\n 'cent': 162,\n 'pound': 163,\n 'curren': 164,\n 'yen': 165,\n 'brvbar': 166,\n 'sect': 167,\n 'uml': 168,\n 'ordf': 170,\n 'laquo': 171,\n 'not': 172,\n 'shy': 173,\n 'macr': 175,\n 'deg': 176,\n 'plusmn': 177,\n 'sup1': 185,\n 'sup2': 178,\n 'sup3': 179,\n 'acute': 180,\n 'micro': 181,\n 'para': 182,\n 'middot': 183,\n 'cedil': 184,\n 'ordm': 186,\n 'raquo': 187,\n 'frac14': 188,\n 'frac12': 189,\n 'frac34': 190,\n 'iquest': 191,\n 'times': 215,\n 'divide': 247,\n 'OElig': 338,\n 'oelig': 339,\n 'Scaron': 352,\n 'scaron': 353,\n 'Yuml': 376,\n 'fnof': 402,\n 'circ': 710,\n 'tilde': 732,\n 'Alpha': 913,\n 'Beta': 914,\n 'Gamma': 915,\n 'Delta': 916,\n 'Epsilon': 917,\n 'Zeta': 918,\n 'Eta': 919,\n 'Theta': 920,\n 'Iota': 921,\n 'Kappa': 922,\n 'Lambda': 923,\n 'Mu': 924,\n 'Nu': 925,\n 'Xi': 926,\n 'Omicron': 927,\n 'Pi': 928,\n 'Rho': 929,\n 'Sigma': 931,\n 'Tau': 932,\n 'Upsilon': 933,\n 'Phi': 934,\n 'Chi': 935,\n 'Psi': 936,\n 'Omega': 937,\n 'alpha': 945,\n 'beta': 946,\n 'gamma': 947,\n 'delta': 948,\n 'epsilon': 949,\n 'zeta': 950,\n 'eta': 951,\n 'theta': 952,\n 'iota': 953,\n 'kappa': 954,\n 'lambda': 955,\n 'mu': 956,\n 'nu': 957,\n 'xi': 958,\n 'omicron': 959,\n 'pi': 960,\n 'rho': 961,\n 'sigmaf': 962,\n 'sigma': 963,\n 'tau': 964,\n 'upsilon': 965,\n 'phi': 966,\n 'chi': 967,\n 'psi': 968,\n 'omega': 969,\n 'thetasym': 977,\n 'upsih': 978,\n 'piv': 982,\n 'ensp': 8194,\n 'emsp': 8195,\n 'thinsp': 8201,\n 'zwnj': 8204,\n 'zwj': 8205,\n 'lrm': 8206,\n 'rlm': 8207,\n 'ndash': 8211,\n 'mdash': 8212,\n 'lsquo': 8216,\n 'rsquo': 8217,\n 'sbquo': 8218,\n 'ldquo': 8220,\n 'rdquo': 8221,\n 'bdquo': 8222,\n 'dagger': 8224,\n 'Dagger': 8225,\n 'bull': 8226,\n 'hellip': 8230,\n 'permil': 8240,\n 'prime': 8242,\n 'Prime': 8243,\n 'lsaquo': 8249,\n 'rsaquo': 8250,\n 'oline': 8254,\n 'frasl': 8260,\n 'euro': 8364,\n 'image': 8465,\n 'weierp': 8472,\n 'real': 8476,\n 'trade': 8482,\n 'alefsym': 8501,\n 'larr': 8592,\n 'uarr': 8593,\n 'rarr': 8594,\n 'darr': 8595,\n 'harr': 8596,\n 'crarr': 8629,\n 'lArr': 8656,\n 'uArr': 8657,\n 'rArr': 8658,\n 'dArr': 8659,\n 'hArr': 8660,\n 'forall': 8704,\n 'part': 8706,\n 'exist': 8707,\n 'empty': 8709,\n 'nabla': 8711,\n 'isin': 8712,\n 'notin': 8713,\n 'ni': 8715,\n 'prod': 8719,\n 'sum': 8721,\n 'minus': 8722,\n 'lowast': 8727,\n 'radic': 8730,\n 'prop': 8733,\n 'infin': 8734,\n 'ang': 8736,\n 'and': 8743,\n 'or': 8744,\n 'cap': 8745,\n 'cup': 8746,\n 'int': 8747,\n 'there4': 8756,\n 'sim': 8764,\n 'cong': 8773,\n 'asymp': 8776,\n 'ne': 8800,\n 'equiv': 8801,\n 'le': 8804,\n 'ge': 8805,\n 'sub': 8834,\n 'sup': 8835,\n 'nsub': 8836,\n 'sube': 8838,\n 'supe': 8839,\n 'oplus': 8853,\n 'otimes': 8855,\n 'perp': 8869,\n 'sdot': 8901,\n 'lceil': 8968,\n 'rceil': 8969,\n 'lfloor': 8970,\n 'rfloor': 8971,\n 'lang': 9001,\n 'rang': 9002,\n 'loz': 9674,\n 'spades': 9824,\n 'clubs': 9827,\n 'hearts': 9829,\n 'diams': 9830\n }\n\n Object.keys(sax.ENTITIES).forEach(function (key) {\n var e = sax.ENTITIES[key]\n var s = typeof e === 'number' ? String.fromCharCode(e) : e\n sax.ENTITIES[key] = s\n })\n\n for (var s in sax.STATE) {\n sax.STATE[sax.STATE[s]] = s\n }\n\n // shorthand\n S = sax.STATE\n\n function emit (parser, event, data) {\n parser[event] && parser[event](data)\n }\n\n function emitNode (parser, nodeType, data) {\n if (parser.textNode) closeText(parser)\n emit(parser, nodeType, data)\n }\n\n function closeText (parser) {\n parser.textNode = textopts(parser.opt, parser.textNode)\n if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n parser.textNode = ''\n }\n\n function textopts (opt, text) {\n if (opt.trim) text = text.trim()\n if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n return text\n }\n\n function error (parser, er) {\n closeText(parser)\n if (parser.trackPosition) {\n er += '\\nLine: ' + parser.line +\n '\\nColumn: ' + parser.column +\n '\\nChar: ' + parser.c\n }\n er = new Error(er)\n parser.error = er\n emit(parser, 'onerror', er)\n return parser\n }\n\n function end (parser) {\n if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')\n if ((parser.state !== S.BEGIN) &&\n (parser.state !== S.BEGIN_WHITESPACE) &&\n (parser.state !== S.TEXT)) {\n error(parser, 'Unexpected end')\n }\n closeText(parser)\n parser.c = ''\n parser.closed = true\n emit(parser, 'onend')\n SAXParser.call(parser, parser.strict, parser.opt)\n return parser\n }\n\n function strictFail (parser, message) {\n if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n throw new Error('bad call to strictFail')\n }\n if (parser.strict) {\n error(parser, message)\n }\n }\n\n function newTag (parser) {\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n var parent = parser.tags[parser.tags.length - 1] || parser\n var tag = parser.tag = { name: parser.tagName, attributes: {} }\n\n // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n if (parser.opt.xmlns) {\n tag.ns = parent.ns\n }\n parser.attribList.length = 0\n emitNode(parser, 'onopentagstart', tag)\n }\n\n function qname (name, attribute) {\n var i = name.indexOf(':')\n var qualName = i < 0 ? [ '', name ] : name.split(':')\n var prefix = qualName[0]\n var local = qualName[1]\n\n // <x \"xmlns\"=\"http://foo\">\n if (attribute && name === 'xmlns') {\n prefix = 'xmlns'\n local = ''\n }\n\n return { prefix: prefix, local: local }\n }\n\n function attrib (parser) {\n if (!parser.strict) {\n parser.attribName = parser.attribName[parser.looseCase]()\n }\n\n if (parser.attribList.indexOf(parser.attribName) !== -1 ||\n parser.tag.attributes.hasOwnProperty(parser.attribName)) {\n parser.attribName = parser.attribValue = ''\n return\n }\n\n if (parser.opt.xmlns) {\n var qn = qname(parser.attribName, true)\n var prefix = qn.prefix\n var local = qn.local\n\n if (prefix === 'xmlns') {\n // namespace binding attribute. push the binding into scope\n if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n strictFail(parser,\n 'xml: prefix must be bound to ' + XML_NAMESPACE + '\\n' +\n 'Actual: ' + parser.attribValue)\n } else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {\n strictFail(parser,\n 'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\\n' +\n 'Actual: ' + parser.attribValue)\n } else {\n var tag = parser.tag\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns === parent.ns) {\n tag.ns = Object.create(parent.ns)\n }\n tag.ns[local] = parser.attribValue\n }\n }\n\n // defer onattribute events until all attributes have been seen\n // so any new bindings can take effect. preserve attribute order\n // so deferred events can be emitted in document order\n parser.attribList.push([parser.attribName, parser.attribValue])\n } else {\n // in non-xmlns mode, we can emit the event right away\n parser.tag.attributes[parser.attribName] = parser.attribValue\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: parser.attribValue\n })\n }\n\n parser.attribName = parser.attribValue = ''\n }\n\n function openTag (parser, selfClosing) {\n if (parser.opt.xmlns) {\n // emit namespace binding events\n var tag = parser.tag\n\n // add namespace info to tag\n var qn = qname(parser.tagName)\n tag.prefix = qn.prefix\n tag.local = qn.local\n tag.uri = tag.ns[qn.prefix] || ''\n\n if (tag.prefix && !tag.uri) {\n strictFail(parser, 'Unbound namespace prefix: ' +\n JSON.stringify(parser.tagName))\n tag.uri = qn.prefix\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns && parent.ns !== tag.ns) {\n Object.keys(tag.ns).forEach(function (p) {\n emitNode(parser, 'onopennamespace', {\n prefix: p,\n uri: tag.ns[p]\n })\n })\n }\n\n // handle deferred onattribute events\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\n var nv = parser.attribList[i]\n var name = nv[0]\n var value = nv[1]\n var qualName = qname(name, true)\n var prefix = qualName.prefix\n var local = qualName.local\n var uri = prefix === '' ? '' : (tag.ns[prefix] || '')\n var a = {\n name: name,\n value: value,\n prefix: prefix,\n local: local,\n uri: uri\n }\n\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (prefix && prefix !== 'xmlns' && !uri) {\n strictFail(parser, 'Unbound namespace prefix: ' +\n JSON.stringify(prefix))\n a.uri = prefix\n }\n parser.tag.attributes[name] = a\n emitNode(parser, 'onattribute', a)\n }\n parser.attribList.length = 0\n }\n\n parser.tag.isSelfClosing = !!selfClosing\n\n // process the tag\n parser.sawRoot = true\n parser.tags.push(parser.tag)\n emitNode(parser, 'onopentag', parser.tag)\n if (!selfClosing) {\n // special case for <script> in non-strict mode.\n if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n parser.state = S.SCRIPT\n } else {\n parser.state = S.TEXT\n }\n parser.tag = null\n parser.tagName = ''\n }\n parser.attribName = parser.attribValue = ''\n parser.attribList.length = 0\n }\n\n function closeTag (parser) {\n if (!parser.tagName) {\n strictFail(parser, 'Weird empty close tag.')\n parser.textNode += '</>'\n parser.state = S.TEXT\n return\n }\n\n if (parser.script) {\n if (parser.tagName !== 'script') {\n parser.script += '</' + parser.tagName + '>'\n parser.tagName = ''\n parser.state = S.SCRIPT\n return\n }\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n\n // first make sure that the closing tag actually exists.\n // <a><b></c></b></a> will close everything, otherwise.\n var t = parser.tags.length\n var tagName = parser.tagName\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]()\n }\n var closeTo = tagName\n while (t--) {\n var close = parser.tags[t]\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, 'Unexpected close tag')\n } else {\n break\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n parser.textNode += '</' + parser.tagName + '>'\n parser.state = S.TEXT\n return\n }\n parser.tagName = tagName\n var s = parser.tags.length\n while (s-- > t) {\n var tag = parser.tag = parser.tags.pop()\n parser.tagName = parser.tag.name\n emitNode(parser, 'onclosetag', parser.tagName)\n\n var x = {}\n for (var i in tag.ns) {\n x[i] = tag.ns[i]\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p]\n emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n })\n }\n }\n if (t === 0) parser.closedRoot = true\n parser.tagName = parser.attribValue = parser.attribName = ''\n parser.attribList.length = 0\n parser.state = S.TEXT\n }\n\n function parseEntity (parser) {\n var entity = parser.entity\n var entityLC = entity.toLowerCase()\n var num\n var numStr = ''\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity]\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC]\n }\n entity = entityLC\n if (entity.charAt(0) === '#') {\n if (entity.charAt(1) === 'x') {\n entity = entity.slice(2)\n num = parseInt(entity, 16)\n numStr = num.toString(16)\n } else {\n entity = entity.slice(1)\n num = parseInt(entity, 10)\n numStr = num.toString(10)\n }\n }\n entity = entity.replace(/^0+/, '')\n if (numStr.toLowerCase() !== entity) {\n strictFail(parser, 'Invalid character entity')\n return '&' + parser.entity + ';'\n }\n\n return String.fromCodePoint(num)\n }\n\n function beginWhiteSpace (parser, c) {\n if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (not(whitespace, c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, 'Non-whitespace before first tag.')\n parser.textNode = c\n parser.state = S.TEXT\n }\n }\n\n function charAt (chunk, i) {\n var result = ''\n if (i < chunk.length) {\n result = chunk.charAt(i)\n }\n return result\n }\n\n function write (chunk) {\n var parser = this\n if (this.error) {\n throw this.error\n }\n if (parser.closed) {\n return error(parser,\n 'Cannot write after close. Assign an onready handler.')\n }\n if (chunk === null) {\n return end(parser)\n }\n if (typeof chunk === 'object') {\n chunk = chunk.toString()\n }\n var i = 0\n var c = ''\n while (true) {\n c = charAt(chunk, i++)\n parser.c = c\n if (!c) {\n break\n }\n if (parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE\n if (c === '\\uFEFF') {\n continue\n }\n beginWhiteSpace(parser, c)\n continue\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c)\n continue\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1\n while (c && c !== '<' && c !== '&') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1)\n }\n if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else {\n if (not(whitespace, c) && (!parser.sawRoot || parser.closedRoot)) {\n strictFail(parser, 'Text data outside of root node.')\n }\n if (c === '&') {\n parser.state = S.TEXT_ENTITY\n } else {\n parser.textNode += c\n }\n }\n continue\n\n case S.SCRIPT:\n // only non-strict\n if (c === '<') {\n parser.state = S.SCRIPT_ENDING\n } else {\n parser.script += c\n }\n continue\n\n case S.SCRIPT_ENDING:\n if (c === '/') {\n parser.state = S.CLOSE_TAG\n } else {\n parser.script += '<' + c\n parser.state = S.SCRIPT\n }\n continue\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === '!') {\n parser.state = S.SGML_DECL\n parser.sgmlDecl = ''\n } else if (is(whitespace, c)) {\n // wait for it...\n } else if (is(nameStart, c)) {\n parser.state = S.OPEN_TAG\n parser.tagName = c\n } else if (c === '/') {\n parser.state = S.CLOSE_TAG\n parser.tagName = ''\n } else if (c === '?') {\n parser.state = S.PROC_INST\n parser.procInstName = parser.procInstBody = ''\n } else {\n strictFail(parser, 'Unencoded <')\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition\n c = new Array(pad).join(' ') + c\n }\n parser.textNode += '<' + c\n parser.state = S.TEXT\n }\n continue\n\n case S.SGML_DECL:\n if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, 'onopencdata')\n parser.state = S.CDATA\n parser.sgmlDecl = ''\n parser.cdata = ''\n } else if (parser.sgmlDecl + c === '--') {\n parser.state = S.COMMENT\n parser.comment = ''\n parser.sgmlDecl = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE\n if (parser.doctype || parser.sawRoot) {\n strictFail(parser,\n 'Inappropriately located doctype declaration')\n }\n parser.doctype = ''\n parser.sgmlDecl = ''\n } else if (c === '>') {\n emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n parser.sgmlDecl = ''\n parser.state = S.TEXT\n } else if (is(quote, c)) {\n parser.state = S.SGML_DECL_QUOTED\n parser.sgmlDecl += c\n } else {\n parser.sgmlDecl += c\n }\n continue\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL\n parser.q = ''\n }\n parser.sgmlDecl += c\n continue\n\n case S.DOCTYPE:\n if (c === '>') {\n parser.state = S.TEXT\n emitNode(parser, 'ondoctype', parser.doctype)\n parser.doctype = true // just remember that we saw it.\n } else {\n parser.doctype += c\n if (c === '[') {\n parser.state = S.DOCTYPE_DTD\n } else if (is(quote, c)) {\n parser.state = S.DOCTYPE_QUOTED\n parser.q = c\n }\n }\n continue\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.q = ''\n parser.state = S.DOCTYPE\n }\n continue\n\n case S.DOCTYPE_DTD:\n parser.doctype += c\n if (c === ']') {\n parser.state = S.DOCTYPE\n } else if (is(quote, c)) {\n parser.state = S.DOCTYPE_DTD_QUOTED\n parser.q = c\n }\n continue\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD\n parser.q = ''\n }\n continue\n\n case S.COMMENT:\n if (c === '-') {\n parser.state = S.COMMENT_ENDING\n } else {\n parser.comment += c\n }\n continue\n\n case S.COMMENT_ENDING:\n if (c === '-') {\n parser.state = S.COMMENT_ENDED\n parser.comment = textopts(parser.opt, parser.comment)\n if (parser.comment) {\n emitNode(parser, 'oncomment', parser.comment)\n }\n parser.comment = ''\n } else {\n parser.comment += '-' + c\n parser.state = S.COMMENT\n }\n continue\n\n case S.COMMENT_ENDED:\n if (c !== '>') {\n strictFail(parser, 'Malformed comment')\n // allow <!-- blah -- bloo --> in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += '--' + c\n parser.state = S.COMMENT\n } else {\n parser.state = S.TEXT\n }\n continue\n\n case S.CDATA:\n if (c === ']') {\n parser.state = S.CDATA_ENDING\n } else {\n parser.cdata += c\n }\n continue\n\n case S.CDATA_ENDING:\n if (c === ']') {\n parser.state = S.CDATA_ENDING_2\n } else {\n parser.cdata += ']' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.CDATA_ENDING_2:\n if (c === '>') {\n if (parser.cdata) {\n emitNode(parser, 'oncdata', parser.cdata)\n }\n emitNode(parser, 'onclosecdata')\n parser.cdata = ''\n parser.state = S.TEXT\n } else if (c === ']') {\n parser.cdata += ']'\n } else {\n parser.cdata += ']]' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.PROC_INST:\n if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else if (is(whitespace, c)) {\n parser.state = S.PROC_INST_BODY\n } else {\n parser.procInstName += c\n }\n continue\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && is(whitespace, c)) {\n continue\n } else if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else {\n parser.procInstBody += c\n }\n continue\n\n case S.PROC_INST_ENDING:\n if (c === '>') {\n emitNode(parser, 'onprocessinginstruction', {\n name: parser.procInstName,\n body: parser.procInstBody\n })\n parser.procInstName = parser.procInstBody = ''\n parser.state = S.TEXT\n } else {\n parser.procInstBody += '?' + c\n parser.state = S.PROC_INST_BODY\n }\n continue\n\n case S.OPEN_TAG:\n if (is(nameBody, c)) {\n parser.tagName += c\n } else {\n newTag(parser)\n if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else {\n if (not(whitespace, c)) {\n strictFail(parser, 'Invalid character in tag name')\n }\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.OPEN_TAG_SLASH:\n if (c === '>') {\n openTag(parser, true)\n closeTag(parser)\n } else {\n strictFail(parser, 'Forward-slash in opening tag not followed by >')\n parser.state = S.ATTRIB\n }\n continue\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (is(whitespace, c)) {\n continue\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (is(nameStart, c)) {\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (c === '>') {\n strictFail(parser, 'Attribute without value')\n parser.attribValue = parser.attribName\n attrib(parser)\n openTag(parser)\n } else if (is(whitespace, c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE\n } else if (is(nameBody, c)) {\n parser.attribName += c\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (is(whitespace, c)) {\n continue\n } else {\n strictFail(parser, 'Attribute without value')\n parser.tag.attributes[parser.attribName] = ''\n parser.attribValue = ''\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: ''\n })\n parser.attribName = ''\n if (c === '>') {\n openTag(parser)\n } else if (is(nameStart, c)) {\n parser.attribName = c\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.ATTRIB_VALUE:\n if (is(whitespace, c)) {\n continue\n } else if (is(quote, c)) {\n parser.q = c\n parser.state = S.ATTRIB_VALUE_QUOTED\n } else {\n strictFail(parser, 'Unquoted attribute value')\n parser.state = S.ATTRIB_VALUE_UNQUOTED\n parser.attribValue = c\n }\n continue\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n parser.q = ''\n parser.state = S.ATTRIB_VALUE_CLOSED\n continue\n\n case S.ATTRIB_VALUE_CLOSED:\n if (is(whitespace, c)) {\n parser.state = S.ATTRIB\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (is(nameStart, c)) {\n strictFail(parser, 'No whitespace between attributes')\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (not(attribEnd, c)) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_U\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n if (c === '>') {\n openTag(parser)\n } else {\n parser.state = S.ATTRIB\n }\n continue\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (is(whitespace, c)) {\n continue\n } else if (not(nameStart, c)) {\n if (parser.script) {\n parser.script += '</' + c\n parser.state = S.SCRIPT\n } else {\n strictFail(parser, 'Invalid tagname in closing tag.')\n }\n } else {\n parser.tagName = c\n }\n } else if (c === '>') {\n closeTag(parser)\n } else if (is(nameBody, c)) {\n parser.tagName += c\n } else if (parser.script) {\n parser.script += '</' + parser.tagName\n parser.tagName = ''\n parser.state = S.SCRIPT\n } else {\n if (not(whitespace, c)) {\n strictFail(parser, 'Invalid tagname in closing tag')\n }\n parser.state = S.CLOSE_TAG_SAW_WHITE\n }\n continue\n\n case S.CLOSE_TAG_SAW_WHITE:\n if (is(whitespace, c)) {\n continue\n }\n if (c === '>') {\n closeTag(parser)\n } else {\n strictFail(parser, 'Invalid characters in closing tag')\n }\n continue\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState\n var buffer\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT\n buffer = 'textNode'\n break\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED\n buffer = 'attribValue'\n break\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED\n buffer = 'attribValue'\n break\n }\n\n if (c === ';') {\n parser[buffer] += parseEntity(parser)\n parser.entity = ''\n parser.state = returnState\n } else if (is(parser.entity.length ? entityBody : entityStart, c)) {\n parser.entity += c\n } else {\n strictFail(parser, 'Invalid character in entity name')\n parser[buffer] += '&' + parser.entity + c\n parser.entity = ''\n parser.state = returnState\n }\n\n continue\n\n default:\n throw new Error(parser, 'Unknown state: ' + parser.state)\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser)\n }\n return parser\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n if (!String.fromCodePoint) {\n (function () {\n var stringFromCharCode = String.fromCharCode\n var floor = Math.floor\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000\n var codeUnits = []\n var highSurrogate\n var lowSurrogate\n var index = -1\n var length = arguments.length\n if (!length) {\n return ''\n }\n var result = ''\n while (++index < length) {\n var codePoint = Number(arguments[index])\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10FFFF || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError('Invalid code point: ' + codePoint)\n }\n if (codePoint <= 0xFFFF) { // BMP code point\n codeUnits.push(codePoint)\n } else { // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000\n highSurrogate = (codePoint >> 10) + 0xD800\n lowSurrogate = (codePoint % 0x400) + 0xDC00\n codeUnits.push(highSurrogate, lowSurrogate)\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits)\n codeUnits.length = 0\n }\n }\n return result\n }\n if (Object.defineProperty) {\n Object.defineProperty(String, 'fromCodePoint', {\n value: fromCodePoint,\n configurable: true,\n writable: true\n })\n } else {\n String.fromCodePoint = fromCodePoint\n }\n }())\n }\n})(typeof exports === 'undefined' ? this.sax = {} : exports)\n","// Copyright 2011-2012 Jacob Beard, INFICON, and other SCION contributors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n\nvar extend = Object.assign || \n function (to, from){\n Object.keys(from).forEach(function(k){\n to[k] = from[k]; \n });\n return to;\n };\n\nvar STATE_TYPES = {\n BASIC: 0,\n COMPOSITE: 1,\n PARALLEL: 2,\n HISTORY: 3,\n INITIAL: 4,\n FINAL: 5\n};\n\nvar ioProcessorTypes = {\n 'scxml': {\n location: 'http://www.w3.org/TR/scxml/#SCXMLEventProcessor'\n },\n 'basichttp': {\n location: 'http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor'\n },\n 'dom': {\n location: 'http://www.w3.org/TR/scxml/#DOMEventProcessor'\n },\n 'publish': {\n location: 'https://github.com/jbeard4/SCION#publish'\n }\n};\n\nfunction transitionWithTargets(t){\n return t.targets;\n}\n\nfunction stateExitComparator(s1, s2) {\n return s2.depth - s1.depth; \n}\n\nfunction stateEntryComparator(s1, s2) {\n return s1.depth - s2.depth;\n}\n\nfunction transitionComparator(t1, t2) {\n return t1.documentOrder - t2.documentOrder;\n}\n\nfunction initializeModel(rootState){\n var transitions = [], idToStateMap = new Map(), documentOrder = 0;\n\n\n //TODO: need to add fake ids to anyone that doesn't have them\n //FIXME: make this safer - break into multiple passes\n var idCount = {};\n\n function generateId(type){\n if(idCount[type] === undefined) idCount[type] = 0;\n\n var count = idCount[type]++;\n return '$generated-' + type + '-' + count; \n }\n\n function wrapInFakeRootState(state){\n return {\n $deserializeDatamodel : state.$deserializeDatamodel || function(){},\n $serializeDatamodel : state.$serializeDatamodel || function(){ return null;},\n $idToStateMap : idToStateMap, //keep this for handy deserialization of serialized configuration\n states : [\n {\n $type : 'initial',\n transitions : [{\n target : state\n }]\n },\n state\n ]\n };\n }\n\n var statesWithInitialAttributes = [];\n\n function traverse(ancestors,state){\n\n //add to global transition and state id caches\n if(state.transitions) transitions.push.apply(transitions,state.transitions);\n\n //populate state id map\n if(state.id){\n if(idToStateMap.has(state.id)) throw new Error('Redefinition of state id ' + state.id);\n\n idToStateMap.set(state.id, state);\n }\n\n //create a default type, just to normalize things\n //this way we can check for unsupported types below\n state.$type = state.$type || 'state';\n\n //add ancestors and depth properties\n state.ancestors = ancestors;\n state.depth = ancestors.length;\n state.parent = ancestors[0];\n\n //add some information to transitions\n state.transitions = state.transitions || [];\n for (var j = 0, len = state.transitions.length; j < len; j++) {\n var transition = state.transitions[j];\n transition.documentOrder = documentOrder++; \n transition.source = state;\n };\n\n //recursive step\n if(state.states) {\n var ancs = [state].concat(ancestors);\n for (var j = 0, len = state.states.length; j < len; j++) {\n traverse(ancs, state.states[j]);\n }\n }\n\n //setup fast state type\n switch(state.$type){\n case 'parallel':\n state.typeEnum = STATE_TYPES.PARALLEL;\n break;\n case 'initial' : \n state.typeEnum = STATE_TYPES.INITIAL;\n break;\n case 'history' :\n state.typeEnum = STATE_TYPES.HISTORY;\n break;\n case 'final' : \n state.typeEnum = STATE_TYPES.FINAL;\n break;\n case 'state' : \n case 'scxml' :\n if(state.states && state.states.length){\n state.typeEnum = STATE_TYPES.COMPOSITE;\n }else{\n state.typeEnum = STATE_TYPES.BASIC;\n }\n break;\n default :\n throw new Error('Unknown state type: ' + state.$type);\n }\n\n //descendants property on states will now be populated. add descendants to this state\n if(state.states){\n state.descendants = state.states.concat(state.states.map(function(s){return s.descendants;}).reduce(function(a,b){return a.concat(b);},[]));\n }else{\n state.descendants = [];\n }\n\n var initialChildren;\n if(state.typeEnum === STATE_TYPES.COMPOSITE){\n //set up initial state\n \n if(typeof state.initial === 'string'){\n statesWithInitialAttributes.push(state);\n }else{\n //take the first child that has initial type, or first child\n initialChildren = state.states.filter(function(child){\n return child.$type === 'initial';\n });\n\n state.initialRef = initialChildren.length ? initialChildren[0] : state.states[0];\n checkInitialRef(state);\n }\n\n }\n\n //hook up history\n if(state.typeEnum === STATE_TYPES.COMPOSITE ||\n state.typeEnum === STATE_TYPES.PARALLEL){\n\n var historyChildren = state.states.filter(function(s){\n return s.$type === 'history';\n }); \n\n state.historyRef = historyChildren[0];\n }\n\n //now it's safe to fill in fake state ids\n if(!state.id){\n state.id = generateId(state.$type);\n idToStateMap.set(state.id, state);\n }\n\n //normalize onEntry/onExit, which can be single fn or array\n if (state.onEntry && !Array.isArray(state.onEntry)) {\n state.onEntry = [state.onEntry];\n }\n\n if (state.onExit && !Array.isArray(state.onExit)) {\n state.onExit = [state.onExit];\n }\n }\n\n //TODO: convert events to regular expressions in advance\n\n function checkInitialRef(state){\n if(!state.initialRef) throw new Error('Unable to locate initial state for composite state: ' + state.id);\n }\n function connectIntialAttributes(){\n for (var j = 0, len = statesWithInitialAttributes.length; j < len; j++) {\n var s = statesWithInitialAttributes[j];\n s.initialRef = idToStateMap.get(s.initial);\n checkInitialRef(s);\n }\n }\n\n var RX_WHITESPACE = /\\s+/;\n\n function connectTransitionGraph(){\n //normalize as with onEntry/onExit\n for (var i = 0, len = transitions.length; i < len; i++) {\n var t = transitions[i];\n if (t.onTransition && !Array.isArray(t.onTransition)) {\n t.onTransition = [t.onTransition];\n }\n\n //normalize \"event\" attribute into \"events\" attribute\n if (typeof t.event === 'string') {\n t.events = t.event.trim().split(RX_WHITESPACE);\n }\n delete t.event;\n\n if(t.targets || (typeof t.target === 'undefined')) {\n //targets have already been set up\n continue;\n } \n\n if(typeof t.target === 'string'){\n var target = idToStateMap.get(t.target);\n if(!target) throw new Error('Unable to find target state with id ' + t.target);\n t.target = target;\n t.targets = [t.target];\n }else if(Array.isArray(t.target)){\n t.targets = t.target.map(function(target){\n if(typeof target === 'string'){\n target = idToStateMap.get(target);\n if(!target) throw new Error('Unable to find target state with id ' + t.target);\n return target;\n }else{\n return target;\n } \n }); \n }else if(typeof t.target === 'object'){\n t.targets = [t.target];\n }else{\n throw new Error('Transition target has unknown type: ' + t.target);\n }\n }\n\n //hook up LCA - optimization\n for (var i = 0, len = transitions.length; i < len; i++) {\n var t = transitions[i];\n if(t.targets) t.lcca = getLCCA(t.source,t.targets[0]); //FIXME: we technically do not need to hang onto the lcca. only the scope is used by the algorithm\n\n t.scope = getScope(t);\n //console.log('scope',t.source.id,t.scope.id,t.targets);\n }\n }\n\n function getScope(transition){\n //Transition scope is normally the least common compound ancestor (lcca).\n //Internal transitions have a scope equal to the source state.\n\n var transitionIsReallyInternal = \n transition.type === 'internal' &&\n transition.source.parent && //root state won't have parent\n transition.targets && //does it target its descendants\n transition.targets.every(\n function(target){ return transition.source.descendants.indexOf(target) > -1;});\n\n if(!transition.targets){\n return transition.source; \n }else if(transitionIsReallyInternal){\n return transition.source; \n }else{\n return transition.lcca;\n }\n }\n\n function getLCCA(s1, s2) {\n //console.log('getLCCA',s1, s2);\n var commonAncestors = [];\n for (var j = 0, len = s1.ancestors.length; j < len; j++) {\n var anc = s1.ancestors[j];\n //console.log('s1.id',s1.id,'anc',anc.id,'anc.typeEnum',anc.typeEnum,'s2.id',s2.id);\n if(anc.typeEnum === STATE_TYPES.COMPOSITE &&\n anc.descendants.indexOf(s2) > -1){\n commonAncestors.push(anc);\n }\n };\n //console.log('commonAncestors',s1.id,s2.id,commonAncestors.map(function(s){return s.id;}));\n if(!commonAncestors.length) throw new Error(\"Could not find LCA for states.\");\n return commonAncestors[0];\n }\n\n //main execution starts here\n //FIXME: only wrap in root state if it's not a compound state\n var fakeRootState = wrapInFakeRootState(rootState); //I wish we had pointer semantics and could make this a C-style \"out argument\". Instead we return him\n traverse([],fakeRootState);\n connectTransitionGraph();\n connectIntialAttributes();\n\n return fakeRootState;\n}\n\n/* begin tiny-events: https://github.com/ZauberNerd/tiny-events */\nfunction EventEmitter() {\n this._listeners = {};\n this._listeners['*'] = [];\n}\n\nEventEmitter.prototype.on = function _on(type, listener) {\n if (!Array.isArray(this._listeners[type])) {\n this._listeners[type] = [];\n }\n\n if (this._listeners[type].indexOf(listener) === -1) {\n this._listeners[type].push(listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.once = function _once(type, listener) {\n var self = this;\n\n function __once() {\n for (var args = [], i = 0; i < arguments.length; i += 1) {\n args[i] = arguments[i];\n }\n\n self.off(type, __once);\n listener.apply(self, args);\n }\n\n __once.listener = listener;\n\n return this.on(type, __once);\n};\n\nEventEmitter.prototype.off = function _off(type, listener) {\n if (!Array.isArray(this._listeners[type])) {\n return this;\n }\n\n if (typeof listener === 'undefined') {\n this._listeners[type] = [];\n return this;\n }\n\n var index = this._listeners[type].indexOf(listener);\n\n if (index === -1) {\n for (var i = 0; i < this._listeners[type].length; i += 1) {\n if (this._listeners[type][i].listener === listener) {\n index = i;\n break;\n }\n }\n }\n\n this._listeners[type].splice(index, 1);\n return this;\n};\n\nEventEmitter.prototype.emit = function _emit(type) {\n\n var args = Array.prototype.slice.call(arguments);\n var modifiedArgs = args.slice(1);\n\n var listeners = this._listeners[type];\n var j, len;\n if (Array.isArray(listeners)) {\n for (j = 0, len = listeners.length; j < len; j++) {\n listeners[j].apply(this, modifiedArgs);\n }\n }\n\n //special '*' event\n listeners = this._listeners['*'];\n for (j = 0, len = listeners.length; j < len; j++) {\n listeners[j].apply(this, args);\n }\n\n return this;\n};\n\n/* end tiny-events */\n\n/* begin ArraySet */\n\n/** @constructor */\nfunction ArraySet(l) { \n l = l || [];\n this.o = new Set(l); \n}\n\nArraySet.prototype = {\n\n add : function(x) {\n this.o.add(x);\n },\n\n remove : function(x) {\n return this.o.delete(x);\n },\n\n union : function(l) {\n for (var v of l.o) {\n this.o.add(v);\n }\n return this;\n },\n\n difference : function(l) {\n for (var v of l.o) {\n this.o.delete(v);\n }\n return this;\n },\n\n contains : function(x) {\n return this.o.has(x);\n },\n\n iter : function() {\n return Array.from(this.o);\n },\n\n isEmpty : function() {\n return !this.o.size;\n },\n\n size: function() {\n return this.o.size;\n },\n\n equals : function(s2) {\n if (this.o.size !== s2.size()) {\n return false;\n }\n\n for (var v of this.o) {\n if (!s2.contains(v)) {\n return false;\n }\n }\n\n return true;\n },\n\n toString : function() {\n return \"Set(\" + Array.from(this.o).toString() + \")\";\n }\n};\n\nvar scxmlPrefixTransitionSelector = (function(){\n\n var eventNameReCache = {};\n\n function eventNameToRe(name) {\n return new RegExp(\"^\" + (name.replace(/\\./g, \"\\\\.\")) + \"(\\\\.[0-9a-zA-Z]+)*$\");\n }\n\n function retrieveEventRe(name) {\n return eventNameReCache[name] ? eventNameReCache[name] : eventNameReCache[name] = eventNameToRe(name);\n }\n\n function nameMatch(t, event) {\n return event && event.name &&\n (t.events.indexOf(\"*\") > -1 ? \n true : \n t.events.filter(function(tEvent){\n return retrieveEventRe(tEvent).test(event.name);\n }).length);\n\n }\n\n return function(state, event, evaluator) {\n return state.transitions.filter(function(t){\n return (!t.events || nameMatch(t,event)) && (!t.cond || evaluator(t.cond));\n });\n };\n})();\n\n//model accessor functions\nvar query = {\n getAncestors: function(s, root) {\n var ancestors, index, state;\n index = s.ancestors.indexOf(root);\n if (index > -1) {\n return s.ancestors.slice(0, index);\n } else {\n return s.ancestors;\n }\n },\n /** @this {model} */\n getAncestorsOrSelf: function(s, root) {\n return [s].concat(this.getAncestors(s, root));\n },\n getDescendantsOrSelf: function(s) {\n return [s].concat(s.descendants);\n },\n /** @this {model} */\n isOrthogonalTo: function(s1, s2) {\n //Two control states are orthogonal if they are not ancestrally\n //related, and their smallest, mutual parent is a Concurrent-state.\n return !this.isAncestrallyRelatedTo(s1, s2) && this.getLCA(s1, s2).typeEnum === STATE_TYPES.PARALLEL;\n },\n /** @this {model} */\n isAncestrallyRelatedTo: function(s1, s2) {\n //Two control states are ancestrally related if one is child/grandchild of another.\n return this.getAncestorsOrSelf(s2).indexOf(s1) > -1 || this.getAncestorsOrSelf(s1).indexOf(s2) > -1;\n },\n /** @this {model} */\n getLCA: function(s1, s2) {\n var commonAncestors = this.getAncestors(s1).filter(function(a){\n return a.descendants.indexOf(s2) > -1;\n },this);\n return commonAncestors[0];\n }\n};\n\n//priority comparison functions\nfunction getTransitionWithHigherSourceChildPriority(_arg) {\n var t1 = _arg[0], t2 = _arg[1];\n //compare transitions based first on depth, then based on document order\n if (t1.source.depth < t2.source.depth) {\n return t2;\n } else if (t2.source.depth < t1.source.depth) {\n return t1;\n } else {\n if (t1.documentOrder < t2.documentOrder) {\n return t1;\n } else {\n return t2;\n }\n }\n}\n\nfunction initializeModelGeneratorFn(modelFn, opts, interpreter){\n\n opts.x = opts.x || {};\n\n return modelFn.call(interpreter,\n opts.x,\n opts.sessionid,\n opts.ioprocessors,\n interpreter.isIn.bind(interpreter));\n}\n\nfunction deserializeSerializedConfiguration(serializedConfiguration,idToStateMap){\n return serializedConfiguration.map(function(id){\n var state = idToStateMap.get(id);\n if(!state) throw new Error('Error loading serialized configuration. Unable to locate state with id ' + id);\n return state;\n });\n}\n\nfunction deserializeHistory(serializedHistory,idToStateMap){\n var o = {};\n Object.keys(serializedHistory).forEach(function(sid){\n o[sid] = serializedHistory[sid].map(function(id){\n var state = idToStateMap.get(id);\n if(!state) throw new Error('Error loading serialized history. Unable to locate state with id ' + id);\n return state;\n });\n });\n return o;\n}\n\n/** @const */\nvar printTrace = false;\n\n/** @constructor */\nfunction BaseInterpreter(modelOrFnGenerator, opts){\n\n EventEmitter.call(this);\n\n this._scriptingContext = opts.interpreterScriptingContext || (opts.InterpreterScriptingContext ? new opts.InterpreterScriptingContext(this) : {}); \n\n var model;\n if(typeof modelOrFnGenerator === 'function'){\n model = initializeModelGeneratorFn(modelOrFnGenerator, opts, this);\n }else if(typeof modelOrFnGenerator === 'string'){\n model = JSON.parse(modelOrFnGenerator);\n }else{\n model = modelOrFnGenerator;\n }\n\n this._model = initializeModel(model);\n\n //console.log(require('util').inspect(this._model,false,4));\n \n this.opts = opts || {};\n\n this.opts.console = opts.console || (typeof console === 'undefined' ? {log : function(){}} : console); //rely on global console if this console is undefined\n this.opts.Set = this.opts.Set || ArraySet;\n this.opts.priorityComparisonFn = this.opts.priorityComparisonFn || getTransitionWithHigherSourceChildPriority;\n this.opts.transitionSelector = this.opts.transitionSelector || scxmlPrefixTransitionSelector;\n\n this._scriptingContext.log = this._scriptingContext.log || (function log(){ \n if(this.opts.console.log.apply){\n this.opts.console.log.apply(this.opts.console, arguments); \n } else {\n //console.log on older IE does not support Function.apply, so just pass him the first argument. Best we can do for now.\n this.opts.console.log(Array.prototype.slice.apply(arguments).join(',')); \n }\n }.bind(this)); //set up default scripting context log function\n\n this._internalEventQueue = [];\n\n //check if we're loading from a previous snapshot\n if(opts.snapshot){\n this._configuration = new this.opts.Set(deserializeSerializedConfiguration(opts.snapshot[0], this._model.$idToStateMap));\n this._historyValue = deserializeHistory(opts.snapshot[1], this._model.$idToStateMap); \n this._isInFinalState = opts.snapshot[2];\n this._model.$deserializeDatamodel(opts.snapshot[3]); //load up the datamodel\n }else{\n this._configuration = new this.opts.Set();\n this._historyValue = {};\n this._isInFinalState = false;\n }\n\n //SCXML system variables:\n this._x = {\n _sessionId : opts.sessionId || null,\n _name : model.name || opts.name || null,\n _ioprocessors : opts.ioprocessors || null\n };\n\n}\n\nBaseInterpreter.prototype = extend(beget(EventEmitter.prototype),{\n\n /** @expose */\n start : function() {\n //perform big step without events to take all default transitions and reach stable initial state\n if (printTrace) this.opts.console.log(\"performing initial big step\");\n\n //We effectively need to figure out states to enter here to populate initial config. assuming root is compound state makes this simple.\n //but if we want it to be parallel, then this becomes more complex. so when initializing the model, we add a 'fake' root state, which\n //makes the following operation safe.\n this._configuration.add(this._model.initialRef); \n\n this._performBigStep();\n return this.getConfiguration();\n },\n\n /**\n * Starts the interpreter asynchronously\n * @param {Function} cb Callback invoked with an error or the interpreter's stable configuration\n * @expose\n */\n startAsync : function(cb) {\n if (typeof cb !== 'function') {\n cb = nop;\n }\n\n if (printTrace) this.opts.console.log(\"performing initial big step\");\n\n this._configuration.add(this._model.initialRef);\n\n this._performBigStepAsync(null, cb);\n },\n\n /** @expose */\n getConfiguration : function() {\n return this._configuration.iter().map(function(s){return s.id;});\n },\n\n /** @expose */\n getFullConfiguration : function() {\n return this._configuration.iter().\n map(function(s){ return [s].concat(query.getAncestors(s));},this).\n reduce(function(a,b){return a.concat(b);},[]). //flatten\n map(function(s){return s.id;}).\n reduce(function(a,b){return a.indexOf(b) > -1 ? a : a.concat(b);},[]); //uniq\n },\n\n\n /** @expose */\n isIn : function(stateName) {\n return this.getFullConfiguration().indexOf(stateName) > -1;\n },\n\n /** @expose */\n isFinal : function(stateName) {\n return this._isInFinalState;\n },\n\n /** @private */\n _performBigStep : function(e) {\n this.emit('onBigStepBegin');\n if (e) this._internalEventQueue.push(e);\n var keepGoing = true;\n while (keepGoing) {\n var currentEvent = this._internalEventQueue.shift() || null;\n this.emit('onSmallStepBegin', currentEvent);\n var selectedTransitions = this._performSmallStep(currentEvent);\n keepGoing = !selectedTransitions.isEmpty();\n }\n this._isInFinalState = this._configuration.iter().every(function(s){ return s.typeEnum === STATE_TYPES.FINAL; });\n this.emit('onBigStepEnd');\n },\n\n _performBigStepAsync : function(event, cb) {\n if (event) {\n this._internalEventQueue.push(event);\n }\n\n var self = this;\n function doBigStep(eventToEmit) {\n var selectedTransitions;\n try {\n self.emit(eventToEmit);\n var currentEvent = self._internalEventQueue.shift() || null;\n self.emit('onSmallStepBegin', currentEvent);\n selectedTransitions = self._performSmallStep(currentEvent);\n self.emit('onSmallStepEnd', currentEvent);\n } catch(err) {\n cb(err);\n return;\n }\n\n if (!selectedTransitions.isEmpty()) {\n // keep going, but be nice (yield) to the process\n // TODO: for compat with non-node, non-mozilla\n // allow the context to provide the defer task function\n self.emit('onBigStepSuspend');\n setImmediate(doBigStep, 'onBigStepResume');\n } else {\n self._isInFinalState =\n self._configuration.iter().every(function(s) {\n return s.typeEnum === STATE_TYPES.FINAL;\n });\n self.emit('onBigStepEnd');\n cb(undefined, self.getConfiguration());\n }\n }\n\n doBigStep('onBigStepBegin');\n },\n\n /** @private */\n _performSmallStep : function(currentEvent) {\n\n if (printTrace) this.opts.console.log(\"selecting transitions with currentEvent: \", currentEvent);\n\n var selectedTransitions = this._selectTransitions(currentEvent);\n\n if (printTrace) this.opts.console.log(\"selected transitions: \", selectedTransitions);\n\n if (!selectedTransitions.isEmpty()) {\n\n if (printTrace) this.opts.console.log(\"sorted transitions: \", selectedTransitions);\n\n //we only want to enter and exit states from transitions with targets\n //filter out targetless transitions here - we will only use these to execute transition actions\n var selectedTransitionsWithTargets = new this.opts.Set(selectedTransitions.iter().filter(transitionWithTargets));\n\n var exitedTuple = this._getStatesExited(selectedTransitionsWithTargets), \n basicStatesExited = exitedTuple[0], \n statesExited = exitedTuple[1];\n\n var enteredTuple = this._getStatesEntered(selectedTransitionsWithTargets), \n basicStatesEntered = enteredTuple[0], \n statesEntered = enteredTuple[1];\n\n if (printTrace) this.opts.console.log(\"basicStatesExited \", basicStatesExited);\n if (printTrace) this.opts.console.log(\"basicStatesEntered \", basicStatesEntered);\n if (printTrace) this.opts.console.log(\"statesExited \", statesExited);\n if (printTrace) this.opts.console.log(\"statesEntered \", statesEntered);\n\n var eventsToAddToInnerQueue = new this.opts.Set();\n\n //update history states\n if (printTrace) this.opts.console.log(\"executing state exit actions\");\n\n for (var j = 0, len = statesExited.length; j < len; j++) {\n var stateExited = statesExited[j];\n\n if (printTrace || this.opts.logStatesEnteredAndExited) this.opts.console.log(\"exiting \", stateExited.id);\n\n //invoke listeners\n this.emit('onExit',stateExited.id)\n\n if(stateExited.onExit !== undefined) {\n for (var exitIdx = 0, exitLen = stateExited.onExit.length; exitIdx < exitLen; exitIdx++) {\n this._evaluateAction(currentEvent, stateExited.onExit[exitIdx]);\n }\n }\n\n var f;\n if (stateExited.historyRef) {\n if (stateExited.historyRef.isDeep) {\n f = function(s0) {\n return s0.typeEnum === STATE_TYPES.BASIC && stateExited.descendants.indexOf(s0) > -1;\n };\n } else {\n f = function(s0) {\n return s0.parent === stateExited;\n };\n }\n //update history\n this._historyValue[stateExited.historyRef.id] = statesExited.filter(f);\n }\n }\n\n // -> Concurrency: Number of transitions: Multiple\n // -> Concurrency: Order of transitions: Explicitly defined\n var sortedTransitions = selectedTransitions.iter().sort(transitionComparator);\n\n if (printTrace) this.opts.console.log(\"executing transitition actions\");\n\n\n for (var stxIdx = 0, len = sortedTransitions.length; stxIdx < len; stxIdx++) {\n var transition = sortedTransitions[stxIdx];\n\n var targetIds = transition.targets && transition.targets.map(function(target){return target.id;});\n\n this.emit('onTransition',transition.source.id,targetIds);\n\n if(transition.onTransition !== undefined) {\n for (var txIdx = 0, txLen = transition.onTransition.length; txIdx < txLen; txIdx++) {\n this._evaluateAction(currentEvent, transition.onTransition[txIdx]);\n }\n }\n }\n \n if (printTrace) this.opts.console.log(\"executing state enter actions\");\n\n for (var enterIdx = 0, enterLen = statesEntered.length; enterIdx < enterLen; enterIdx++) {\n var stateEntered = statesEntered[enterIdx];\n\n if (printTrace || this.opts.logStatesEnteredAndExited) this.opts.console.log(\"entering\", stateEntered.id);\n\n this.emit('onEntry',stateEntered.id);\n\n if(stateEntered.onEntry !== undefined) {\n for (var entryIdx = 0, entryLen = stateEntered.onEntry.length; entryIdx < entryLen; entryIdx++) {\n this._evaluateAction(currentEvent, stateEntered.onEntry[entryIdx]);\n }\n }\n }\n\n if (printTrace) this.opts.console.log(\"updating configuration \");\n if (printTrace) this.opts.console.log(\"old configuration \", this._configuration);\n\n //update configuration by removing basic states exited, and adding basic states entered\n this._configuration.difference(basicStatesExited);\n this._configuration.union(basicStatesEntered);\n\n\n if (printTrace) this.opts.console.log(\"new configuration \", this._configuration);\n \n //add set of generated events to the innerEventQueue -> Event Lifelines: Next small-step\n if (!eventsToAddToInnerQueue.isEmpty()) {\n if (printTrace) this.opts.console.log(\"adding triggered events to inner queue \", eventsToAddToInnerQueue);\n this._internalEventQueue.push(eventsToAddToInnerQueue);\n }\n\n }\n\n //if selectedTransitions is empty, we have reached a stable state, and the big-step will stop, otherwise will continue -> Maximality: Take-Many\n return selectedTransitions;\n },\n\n /** @private */\n _evaluateAction : function(currentEvent, actionRef) {\n try {\n return actionRef.call(this._scriptingContext, currentEvent); //SCXML system variables\n } catch (e){\n var err = {\n tagname: actionRef.tagname, \n line: actionRef.line, \n column: actionRef.column,\n reason: e.message\n }\n this._internalEventQueue.push({\"name\":\"error.execution\",data : err});\n this.emit('onError', err);\n }\n },\n\n /** @private */\n _getStatesExited : function(transitions) {\n var statesExited = new this.opts.Set();\n var basicStatesExited = new this.opts.Set();\n\n //States exited are defined to be active states that are\n //descendants of the scope of each priority-enabled transition.\n //Here, we iterate through the transitions, and collect states\n //that match this condition. \n var transitionList = transitions.iter();\n for (var txIdx = 0, txLen = transitionList.length; txIdx < txLen; txIdx++) {\n var transition = transitionList[txIdx];\n var scope = transition.scope,\n desc = scope.descendants;\n\n //For each state in the configuration\n //is that state a descendant of the transition scope?\n //Store ancestors of that state up to but not including the scope.\n var configList = this._configuration.iter();\n for (var cfgIdx = 0, cfgLen = configList.length; cfgIdx < cfgLen; cfgIdx++) {\n var state = configList[cfgIdx];\n if(desc.indexOf(state) > -1){\n basicStatesExited.add(state);\n statesExited.add(state);\n var ancestors = query.getAncestors(state,scope); \n for (var ancIdx = 0, ancLen = ancestors.length; ancIdx < ancLen; ancIdx++) { \n statesExited.add(ancestors[ancIdx]);\n }\n }\n }\n }\n\n var sortedStatesExited = statesExited.iter().sort(stateExitComparator);\n return [basicStatesExited, sortedStatesExited];\n },\n\n /** @private */\n _getStatesEntered : function(transitions) {\n\n var o = {\n statesToEnter : new this.opts.Set(),\n basicStatesToEnter : new this.opts.Set(),\n statesProcessed : new this.opts.Set(),\n statesToProcess : []\n };\n\n //do the initial setup\n var transitionList = transitions.iter();\n for (var txIdx = 0, txLen = transitionList.length; txIdx < txLen; txIdx++) {\n var transition = transitionList[txIdx];\n for (var targetIdx = 0, targetLen = transition.targets.length; targetIdx < targetLen; targetIdx++) {\n this._addStateAndAncestors(transition.targets[targetIdx],transition.scope,o);\n }\n }\n\n //loop and add states until there are no more to add (we reach a stable state)\n var s;\n /*jsl:ignore*/\n while(s = o.statesToProcess.pop()){\n /*jsl:end*/\n this._addStateAndDescendants(s,o);\n }\n\n //sort based on depth\n var sortedStatesEntered = o.statesToEnter.iter().sort(stateEntryComparator);\n\n return [o.basicStatesToEnter, sortedStatesEntered];\n },\n\n /** @private */\n _addStateAndAncestors : function(target,scope,o){\n\n //process each target\n this._addStateAndDescendants(target,o);\n\n //and process ancestors of targets up to the scope, but according to special rules\n var ancestors = query.getAncestors(target,scope);\n for (var ancIdx = 0, ancLen = ancestors.length; ancIdx < ancLen; ancIdx++) {\n var s = ancestors[ancIdx];\n if (s.typeEnum === STATE_TYPES.COMPOSITE) {\n //just add him to statesToEnter, and declare him processed\n //this is to prevent adding his initial state later on\n o.statesToEnter.add(s);\n\n o.statesProcessed.add(s);\n }else{\n //everything else can just be passed through as normal\n this._addStateAndDescendants(s,o);\n } \n }\n },\n\n /** @private */\n _addStateAndDescendants : function(s,o){\n\n if(o.statesProcessed.contains(s)) return;\n\n if (s.typeEnum === STATE_TYPES.HISTORY) {\n if (s.id in this._historyValue) {\n this._historyValue[s.id].forEach(function(stateFromHistory){\n this._addStateAndAncestors(stateFromHistory,s.parent,o);\n },this);\n } else {\n o.statesToEnter.add(s);\n o.basicStatesToEnter.add(s);\n }\n } else {\n o.statesToEnter.add(s);\n\n if (s.typeEnum === STATE_TYPES.PARALLEL) {\n o.statesToProcess.push.apply(o.statesToProcess,\n s.states.filter(function(s){return s.typeEnum !== STATE_TYPES.HISTORY;}));\n } else if (s.typeEnum === STATE_TYPES.COMPOSITE) {\n o.statesToProcess.push(s.initialRef); \n } else if (s.typeEnum === STATE_TYPES.INITIAL || s.typeEnum === STATE_TYPES.BASIC || s.typeEnum === STATE_TYPES.FINAL) {\n o.basicStatesToEnter.add(s);\n }\n }\n\n o.statesProcessed.add(s); \n },\n\n /** @private */\n _selectTransitions : function(currentEvent) {\n if (this.opts.onlySelectFromBasicStates) {\n var states = this._configuration.iter();\n } else {\n var statesAndParents = new this.opts.Set;\n\n //get full configuration, unordered\n //this means we may select transitions from parents before states\n var configList = this._configuration.iter();\n for (var idx = 0, len = configList.length; idx < len; idx++) {\n var basicState = configList[idx];\n statesAndParents.add(basicState);\n var ancestors = query.getAncestors(basicState);\n for (var ancIdx = 0, ancLen = ancestors.length; ancIdx < ancLen; ancIdx++) {\n statesAndParents.add(ancestors[ancIdx]);\n }\n }\n\n states = statesAndParents.iter();\n }\n\n \n\n var usePrefixMatchingAlgorithm = currentEvent && currentEvent.name && currentEvent.name.search(\".\");\n\n var transitionSelector = usePrefixMatchingAlgorithm ? scxmlPrefixTransitionSelector : this.opts.transitionSelector;\n var enabledTransitions = new this.opts.Set();\n\n var e = this._evaluateAction.bind(this,currentEvent);\n\n for (var stateIdx = 0, stateLen = states.length; stateIdx < stateLen; stateIdx++) {\n var transitions = transitionSelector(states[stateIdx],currentEvent,e);\n for (var txIdx = 0, len = transitions.length; txIdx < len; txIdx++) {\n enabledTransitions.add(transitions[txIdx]);\n }\n }\n\n var priorityEnabledTransitions = this._selectPriorityEnabledTransitions(enabledTransitions);\n\n if (printTrace) this.opts.console.log(\"priorityEnabledTransitions\", priorityEnabledTransitions);\n \n return priorityEnabledTransitions;\n },\n\n /** @private */\n _selectPriorityEnabledTransitions : function(enabledTransitions) {\n var priorityEnabledTransitions = new this.opts.Set();\n\n var tuple = this._getInconsistentTransitions(enabledTransitions), \n consistentTransitions = tuple[0], \n inconsistentTransitionsPairs = tuple[1];\n\n priorityEnabledTransitions.union(consistentTransitions);\n\n if (printTrace) this.opts.console.log(\"enabledTransitions\", enabledTransitions);\n if (printTrace) this.opts.console.log(\"consistentTransitions\", consistentTransitions);\n if (printTrace) this.opts.console.log(\"inconsistentTransitionsPairs\", inconsistentTransitionsPairs);\n if (printTrace) this.opts.console.log(\"priorityEnabledTransitions\", priorityEnabledTransitions);\n \n while (!inconsistentTransitionsPairs.isEmpty()) {\n enabledTransitions = new this.opts.Set(\n inconsistentTransitionsPairs.iter().map(function(t){return this.opts.priorityComparisonFn(t);},this));\n\n tuple = this._getInconsistentTransitions(enabledTransitions);\n consistentTransitions = tuple[0]; \n inconsistentTransitionsPairs = tuple[1];\n\n priorityEnabledTransitions.union(consistentTransitions);\n\n if (printTrace) this.opts.console.log(\"enabledTransitions\", enabledTransitions);\n if (printTrace) this.opts.console.log(\"consistentTransitions\", consistentTransitions);\n if (printTrace) this.opts.console.log(\"inconsistentTransitionsPairs\", inconsistentTransitionsPairs);\n if (printTrace) this.opts.console.log(\"priorityEnabledTransitions\", priorityEnabledTransitions);\n \n }\n return priorityEnabledTransitions;\n },\n\n /** @private */\n _getInconsistentTransitions : function(transitions) {\n var allInconsistentTransitions = new this.opts.Set();\n var inconsistentTransitionsPairs = new this.opts.Set();\n var transitionList = transitions.iter();\n\n if (printTrace) this.opts.console.log(\"transitions\", transitionList);\n\n for(var i = 0; i < transitionList.length; i++){\n for(var j = i+1; j < transitionList.length; j++){\n var t1 = transitionList[i];\n var t2 = transitionList[j];\n if (this._conflicts(t1, t2)) {\n allInconsistentTransitions.add(t1);\n allInconsistentTransitions.add(t2);\n inconsistentTransitionsPairs.add([t1, t2]);\n }\n }\n }\n\n var consistentTransitions = transitions.difference(allInconsistentTransitions);\n return [consistentTransitions, inconsistentTransitionsPairs];\n },\n\n /** @private */\n _conflicts : function(t1, t2) {\n return !this._isArenaOrthogonal(t1, t2);\n },\n\n /** @private */\n _isArenaOrthogonal : function(t1, t2) {\n\n if (printTrace) this.opts.console.log(\"transition scopes\", t1.scope, t2.scope);\n\n var isOrthogonal = query.isOrthogonalTo(t1.scope, t2.scope);\n\n if (printTrace) this.opts.console.log(\"transition scopes are orthogonal?\", isOrthogonal);\n\n return isOrthogonal;\n },\n\n\n /*\n registerListener provides a generic mechanism to subscribe to state change and runtime error notifications.\n Can be used for logging and debugging. For example, can attach a logger that simply logs the state changes.\n Or can attach a network debugging client that sends state change notifications to a debugging server.\n \n listener is of the form:\n {\n onEntry : function(stateId){},\n onExit : function(stateId){},\n onTransition : function(sourceStateId,targetStatesIds[]){},\n onError: function(errorInfo){},\n onBigStepBegin: function(){},\n onBigStepResume: function(){},\n onBigStepSuspend: function(){},\n onBigStepEnd: function(){}\n onSmallStepBegin: function(event){},\n onSmallStepEnd: function(){}\n }\n */\n //TODO: refactor this to be event emitter? \n\n /** @expose */\n registerListener : function(listener){\n if(listener.onEntry) this.on('onEntry',listener.onEntry);\n if(listener.onExit) this.on('onExit',listener.onExit);\n if(listener.onTransition) this.on('onTransition',listener.onTransition);\n if(listener.onError) this.on('onError', listener.onError);\n if(listener.onBigStepBegin) this.on('onBigStepBegin', listener.onBigStepBegin);\n if(listener.onBigStepSuspend) this.on('onBigStepSuspend', listener.onBigStepSuspend);\n if(listener.onBigStepResume) this.on('onBigStepResume', listener.onBigStepResume);\n if(listener.onSmallStepBegin) this.on('onSmallStepBegin', listener.onSmallStepBegin);\n if(listener.onSmallStepEnd) this.on('onSmallStepEnd', listener.onSmallStepEnd);\n if(listener.onBigStepEnd) this.on('onBigStepEnd', listener.onBigStepEnd);\n },\n\n /** @expose */\n unregisterListener : function(listener){\n if(listener.onEntry) this.off('onEntry',listener.onEntry);\n if(listener.onExit) this.off('onExit',listener.onExit);\n if(listener.onTransition) this.off('onTransition',listener.onTransition);\n if(listener.onError) this.off('onError', listener.onError);\n if(listener.onBigStepBegin) this.off('onBigStepBegin', listener.onBigStepBegin);\n if(listener.onBigStepSuspend) this.off('onBigStepSuspend', listener.onBigStepSuspend);\n if(listener.onBigStepResume) this.off('onBigStepResume', listener.onBigStepResume);\n if(listener.onSmallStepBegin) this.off('onSmallStepBegin', listener.onSmallStepBegin);\n if(listener.onSmallStepEnd) this.off('onSmallStepEnd', listener.onSmallStepEnd);\n if(listener.onBigStepEnd) this.off('onBigStepEnd', listener.onBigStepEnd);\n },\n\n /** @expose */\n getAllTransitionEvents : function(){\n var events = {};\n function getEvents(state){\n\n if(state.transitions){\n for (var txIdx = 0, txLen = state.transitions.length; txIdx < txLen; txIdx++) {\n events[state.transitions[txIdx].event] = true;\n }\n }\n\n if(state.states) {\n for (var stateIdx = 0, stateLen = state.states.length; stateIdx < stateLen; stateIdx++) {\n getEvents(state.states[stateIdx]);\n }\n }\n }\n\n getEvents(this._model);\n\n return Object.keys(events);\n },\n\n \n /** @expose */\n /**\n Three things capture the current snapshot of a running SCION interpreter:\n\n * basic configuration (the set of basic states the state machine is in)\n * history state values (the states the state machine was in last time it was in the parent of a history state)\n * the datamodel\n \n Note that this assumes that the method to serialize a scion.SCXML\n instance is not called when the interpreter is executing a big-step (e.g. after\n scion.SCXML.prototype.gen is called, and before the call to gen returns). If\n the serialization method is called during the execution of a big-step, then the\n inner event queue must also be saved. I do not expect this to be a common\n requirement however, and therefore I believe it would be better to only support\n serialization when the interpreter is not executing a big-step.\n */\n getSnapshot : function(){\n if(this._isStepping) throw new Error('getSnapshot cannot be called while interpreter is executing a big-step');\n\n\n return [\n this.getConfiguration(),\n this._serializeHistory(),\n this._isInFinalState,\n this._model.$serializeDatamodel()\n ];\n },\n\n _serializeHistory : function(){\n var o = {};\n Object.keys(this._historyValue).forEach(function(sid){\n o[sid] = this._historyValue[sid].map(function(state){return state.id});\n },this);\n return o;\n }\n});\n\n/**\n * @constructor\n * @extends BaseInterpreter\n */\nfunction Statechart(model, opts) {\n opts = opts || {};\n\n opts.ioprocessors = {};\n\n //Create all supported Event I/O processor nodes.\n //TODO fix location after implementing actual processors\n for (var processorType in ioProcessorTypes) {\n opts.ioprocessors[processorType] = ioProcessorTypes[processorType];\n }\n\n opts.InterpreterScriptingContext = opts.InterpreterScriptingContext || InterpreterScriptingContext;\n\n this._isStepping = false;\n\n BaseInterpreter.call(this,model,opts); //call super constructor\n}\n\nfunction beget(o){\n function F(){}\n F.prototype = o;\n return new F();\n}\n\n/**\n * Do nothing\n */\nfunction nop() {}\n\n//Statechart.prototype = Object.create(BaseInterpreter.prototype);\n//would like to use Object.create here, but not portable, but it's too complicated to use portably\nStatechart.prototype = beget(BaseInterpreter.prototype); \n\n/** @expose */\nStatechart.prototype.gen = function(evtObjOrName,optionalData) {\n\n var currentEvent;\n switch(typeof evtObjOrName){\n case 'string':\n currentEvent = {name : evtObjOrName, data : optionalData};\n break;\n case 'object':\n if(typeof evtObjOrName.name === 'string'){\n currentEvent = evtObjOrName;\n }else{\n throw new Error('Event object must have \"name\" property of type string.');\n }\n break;\n default:\n throw new Error('First argument to gen must be a string or object.');\n }\n\n if(this._isStepping) throw new Error('Cannot call gen during a big-step');\n\n //otherwise, kick him off\n this._isStepping = true;\n\n this._performBigStep(currentEvent);\n\n this._isStepping = false;\n return this.getConfiguration();\n};\n\n/**\n * Injects an external event into the interpreter asynchronously\n * @param {object} currentEvent The event to inject\n * @param {string} currentEvent.name The name of the event\n * @param {string} [currentEvent.data] The event data\n * @param {Function} cb Callback invoked with an error or the interpreter's stable configuration\n * @expose\n */\nStatechart.prototype.genAsync = function(currentEvent, cb) {\n if (typeof currentEvent !== 'object' || !currentEvent || typeof currentEvent.name !== 'string') {\n throw new Error('expected currentEvent to be an Object with a name');\n }\n\n if(this._isStepping) {\n throw new Error('Cannot call gen during a big-step');\n }\n\n if (typeof cb !== 'function') {\n cb = nop;\n }\n\n this._isStepping = true;\n\n var self = this;\n this._performBigStepAsync(currentEvent, function(err, config) {\n self._isStepping = false;\n cb(err, config);\n });\n};\n\nfunction InterpreterScriptingContext(interpreter) {\n this._interpreter = interpreter;\n this._timeoutMap = {};\n}\n\n//Regex from:\n// http://daringfireball.net/2010/07/improved_regex_for_matching_urls\n// http://stackoverflow.com/a/6927878\nvar validateUriRegex = /\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))/i;\n\n//TODO: consider whether this is the API we would like to expose\nInterpreterScriptingContext.prototype = {\n raise : function(event){\n this._interpreter._internalEventQueue.push(event); \n },\n send : function(event, options){\n //TODO: move these out\n function validateSend(event, options, sendAction){\n if(event.target){\n var targetIsValidUri = validateUriRegex.test(event.target)\n if(!targetIsValidUri){\n return this.raise({ name : \"error.execution\", data: 'Target is not valid URI', sendid: options.sendid });\n }\n }\n\n var eventProcessorTypes = Object.keys(ioProcessorTypes).map(function(k){return ioProcessorTypes[k].location});\n if(eventProcessorTypes.indexOf(event.type) === -1) {\n return this.raise({ name : \"error.execution\", data: 'Unsupported event processor type', sendid: options.sendid });\n }\n\n sendAction.call(this, event, options);\n }\n\n function defaultSendAction (event, options) {\n\n if( typeof setTimeout === 'undefined' ) throw new Error('Default implementation of Statechart.prototype.send will not work unless setTimeout is defined globally.');\n\n var timeoutId = setTimeout(this._interpreter.gen.bind(this._interpreter, event), options.delay || 0);\n\n if (options.sendid) this._timeoutMap[options.sendid] = timeoutId;\n }\n\n function publish(){\n this._interpreter.emit(event.name,event.data);\n }\n\n event.type = event.type || ioProcessorTypes.scxml.location;\n\n //choose send function\n var sendFn;\n if(event.type === 'https://github.com/jbeard4/SCION#publish'){\n sendFn = publish;\n }else if(this._interpreter.opts.customSend){\n sendFn = this._interpreter.opts.customSend;\n }else{\n sendFn = defaultSendAction;\n }\n\n options=options || {};\n\n if (printTrace) this._interpreter.opts.console.log(\"sending event\", event.name, \"with content\", event.data, \"after delay\", options.delay);\n\n validateSend.call(this, event, options, sendFn);\n },\n cancel : function(sendid){\n if(this._interpreter.opts.customCancel) {\n return this._interpreter.opts.customCancel.apply(this, [sendid]);\n }\n\n if( typeof clearTimeout === 'undefined' ) throw new Error('Default implementation of Statechart.prototype.cancel will not work unless setTimeout is defined globally.');\n\n if (sendid in this._timeoutMap) {\n if (printTrace) this._interpreter.opts.console.log(\"cancelling \", sendid, \" with timeout id \", this._timeoutMap[sendid]);\n clearTimeout(this._timeoutMap[sendid]);\n }\n }\n};\n\nmodule.exports = {\n /** @expose */\n BaseInterpreter: BaseInterpreter,\n /** @expose */\n Statechart: Statechart,\n /** @expose */\n ArraySet : ArraySet,\n /** @expose */\n STATE_TYPES : STATE_TYPES,\n /** @expose */\n initializeModel : initializeModel,\n /** @expose */\n InterpreterScriptingContext : InterpreterScriptingContext,\n /** @expose */\n ioProcessorTypes : ioProcessorTypes \n};\n","(function() {\n var JS_ILLEGAL_IDENTIFIER_CHARS, JS_KEYWORDS, WRAPPER_PREFIX, WRAPPER_REGEX, WRAPPER_SUFFIX, char_wrapper, to_js_identifier, wrapper;\n\n JS_KEYWORDS = [\"break\", \"case\", \"catch\", \"class\", \"const\", \"continue\", \"debugger\", \"default\", \"delete\", \"do\", \"else\", \"enum\", \"export\", \"extends\", \"false\", \"finally\", \"for\", \"function\", \"if\", \"implements\", \"import\", \"in\", \"instanceof\", \"interface\", \"let\", \"new\", \"null\", \"package\", \"private\", \"protected\", \"public\", \"return\", \"static\", \"switch\", \"super\", \"this\", \"throw\", \"true\", \"try\", \"typeof\", \"undefined\", \"var\", \"void\", \"while\", \"with\", \"yield\"];\n\n JS_ILLEGAL_IDENTIFIER_CHARS = {\n \"~\": \"tilde\",\n \"`\": \"backtick\",\n \"!\": \"exclamationmark\",\n \"@\": \"at\",\n \"#\": \"pound\",\n \"%\": \"percent\",\n \"^\": \"carat\",\n \"&\": \"amperstand\",\n \"*\": \"asterisk\",\n \"(\": \"leftparen\",\n \")\": \"rightparen\",\n \"-\": \"dash\",\n \"+\": \"plus\",\n \"=\": \"equals\",\n \"{\": \"leftcurly\",\n \"}\": \"rightcurly\",\n \"[\": \"leftsquare\",\n \"]\": \"rightsquare\",\n \"|\": \"pipe\",\n \"\\\\\": \"backslash\",\n \"\\\"\": \"doublequote\",\n \"'\": \"singlequote\",\n \":\": \"colon\",\n \";\": \"semicolon\",\n \"<\": \"leftangle\",\n \">\": \"rightangle\",\n \",\": \"comma\",\n \".\": \"period\",\n \"?\": \"questionmark\",\n \"/\": \"forwardslash\",\n \" \": \"space\",\n \"\\t\": \"tab\",\n \"\\n\": \"newline\",\n \"\\r\": \"carriagereturn\"\n };\n\n WRAPPER_PREFIX = \"_$\";\n\n WRAPPER_SUFFIX = \"_\";\n\n WRAPPER_REGEX = /_\\$[^_]+_/g;\n\n wrapper = function(text) {\n return \"\" + WRAPPER_PREFIX + text + WRAPPER_SUFFIX;\n };\n\n char_wrapper = function(char) {\n var txt, _ref;\n txt = (_ref = JS_ILLEGAL_IDENTIFIER_CHARS[char]) != null ? _ref : \"ASCII_\" + (char.charCodeAt(0));\n return wrapper(txt);\n };\n\n to_js_identifier = function(text) {\n if ((JS_KEYWORDS.indexOf(text)) >= 0) return wrapper(text);\n if (text.length === 0) return wrapper(\"null\");\n return ((text.replace(WRAPPER_REGEX, wrapper)).replace(/^\\d/, char_wrapper)).replace(/[^\\w\\$]/g, char_wrapper);\n };\n\n if ((typeof module !== \"undefined\" && module !== null ? module.exports : void 0) != null) {\n module.exports = to_js_identifier;\n } else if (typeof ender !== \"undefined\" && ender !== null) {\n ender.ender({\n to_js_identifier: to_js_identifier\n });\n } else {\n this.to_js_identifier = to_js_identifier;\n }\n\n}).call(this);\n","var indexOf = require('indexof');\n\nvar Object_keys = function (obj) {\n if (Object.keys) return Object.keys(obj)\n else {\n var res = [];\n for (var key in obj) res.push(key)\n return res;\n }\n};\n\nvar forEach = function (xs, fn) {\n if (xs.forEach) return xs.forEach(fn)\n else for (var i = 0; i < xs.length; i++) {\n fn(xs[i], i, xs);\n }\n};\n\nvar defineProp = (function() {\n try {\n Object.defineProperty({}, '_', {});\n return function(obj, name, value) {\n Object.defineProperty(obj, name, {\n writable: true,\n enumerable: false,\n configurable: true,\n value: value\n })\n };\n } catch(e) {\n return function(obj, name, value) {\n obj[name] = value;\n };\n }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {\n \n var iframe = document.createElement('iframe');\n if (!iframe.style) iframe.style = {};\n iframe.style.display = 'none';\n\n document.body.appendChild(iframe);\n\n Object.defineProperty(this, \"_iframe\", {\n enumerable: false,\n writable: true\n });\n\n this._iframe = iframe;\n}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n if (!(this instanceof Script)) return new Script(code);\n this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n if (!(context instanceof Context)) {\n throw new TypeError(\"needs a 'context' argument.\");\n }\n \n var win = context._iframe.contentWindow;\n var wEval = win.eval, wExecScript = win.execScript;\n\n if (!wEval && wExecScript) {\n // win.eval() magically appears when this is called in IE:\n wExecScript.call(win, 'null');\n wEval = win.eval;\n }\n\n forEach(Object_keys(context), function (key) {\n win[key] = context[key];\n });\n forEach(globals, function (key) {\n if (context[key]) {\n win[key] = context[key];\n }\n });\n \n var winKeys = Object_keys(win);\n\n var res = wEval.call(win, this.code);\n \n forEach(Object_keys(win), function (key) {\n // Avoid copying circular objects like `top` and `window` by only\n // updating existing context properties or new properties in the `win`\n // that was only introduced after the eval.\n if (key in context || indexOf(winKeys, key) === -1) {\n context[key] = win[key];\n }\n });\n\n forEach(globals, function (key) {\n if (!(key in context)) {\n defineProp(context, key, win[key]);\n }\n });\n return res;\n};\n\nScript.prototype.runInThisContext = function () {\n return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n var ctx = Script.createContext(context);\n var res = this.runInContext(ctx);\n\n forEach(Object_keys(ctx), function (key) {\n context[key] = ctx[key];\n });\n\n return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n exports[name] = Script[name] = function (code) {\n var s = Script(code);\n return s[name].apply(s, [].slice.call(arguments, 1));\n };\n});\n\nexports.createScript = function (code) {\n return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n var copy = new Context();\n if(typeof context === 'object') {\n forEach(Object_keys(context), function (key) {\n copy[key] = context[key];\n copy._iframe.contentWindow[key] = context[key];\n });\n }\n return copy;\n};\n\nexports.isContext = function(sandbox){\n return sandbox instanceof Context;\n};\n","\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n if (indexOf) return arr.indexOf(obj);\n for (var i = 0; i < arr.length; ++i) {\n if (arr[i] === obj) return i;\n }\n return -1;\n};"]}
\No newline at end of file